1
0

pack.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. /* $MirOS: contrib/hosted/fwcf/pack.h,v 1.13 2007/03/09 21:10:29 tg Exp $ */
  2. /*
  3. * This file is part of the FreeWRT project. FreeWRT is copyrighted
  4. * material, please see the LICENCE file in the top-level directory
  5. * or at http://www.freewrt.org/licence for details.
  6. */
  7. #ifndef PACK_H
  8. #define PACK_H
  9. #include <sys/types.h>
  10. struct FTSF_ENTRY;
  11. #ifndef FTS_SUBS_H
  12. typedef struct FTSF_ENTRY ftsf_entry;
  13. #endif
  14. /* XXX use macros from minilzop.h */
  15. #define STOREB(x) do { \
  16. if (hdrleft < 1) \
  17. return (NULL); \
  18. *hdrptr++ = (x) & 0xFF; \
  19. --hdrleft; \
  20. } while (0)
  21. #define STOREW(x) do { \
  22. if (hdrleft < 2) \
  23. return (NULL); \
  24. *hdrptr++ = (x) & 0xFF; \
  25. *hdrptr++ = ((x) >> 8) & 0xFF; \
  26. hdrleft -= 2; \
  27. } while (0)
  28. #define STORET(x) do { \
  29. if (hdrleft < 3) \
  30. return (NULL); \
  31. *hdrptr++ = (x) & 0xFF; \
  32. *hdrptr++ = ((x) >> 8) & 0xFF; \
  33. *hdrptr++ = ((x) >> 16) & 0xFF; \
  34. hdrleft -= 3; \
  35. } while (0)
  36. #define STORED(x) do { \
  37. if (hdrleft < 4) \
  38. return (NULL); \
  39. *hdrptr++ = (x) & 0xFF; \
  40. *hdrptr++ = ((x) >> 8) & 0xFF; \
  41. *hdrptr++ = ((x) >> 16) & 0xFF; \
  42. *hdrptr++ = ((x) >> 24) & 0xFF; \
  43. hdrleft -= 4; \
  44. } while (0)
  45. #define LOADW(x) __extension__({ \
  46. u_int8_t *lwbf = (u_int8_t *)(x); \
  47. u_int32_t res = 0; \
  48. res = (res << 8) | lwbf[1]; \
  49. res = (res << 8) | lwbf[0]; \
  50. res; \
  51. })
  52. #define LOADT(x) __extension__({ \
  53. u_int8_t *lwbf = (u_int8_t *)(x); \
  54. u_int32_t res = 0; \
  55. res = (res << 8) | lwbf[2]; \
  56. res = (res << 8) | lwbf[1]; \
  57. res = (res << 8) | lwbf[0]; \
  58. res; \
  59. })
  60. #define LOADD(x) __extension__({ \
  61. u_int8_t *lwbf = (u_int8_t *)(x); \
  62. u_int32_t res = 0; \
  63. res = (res << 8) | lwbf[3]; \
  64. res = (res << 8) | lwbf[2]; \
  65. res = (res << 8) | lwbf[1]; \
  66. res = (res << 8) | lwbf[0]; \
  67. res; \
  68. })
  69. char *ft_pack(ftsf_entry *);
  70. char *ft_packm(void);
  71. char *mkheader(char *, size_t, u_int32_t, u_int32_t, u_int8_t);
  72. char *mktrailer(char *, size_t);
  73. void ft_dump(char *);
  74. void ft_creatm(char *, const char *);
  75. char *fwcf_unpack(int, size_t *);
  76. char *fwcf_pack(char *, size_t, int, size_t *);
  77. char *fwcf_packm(const char *, int, size_t *);
  78. #endif