memory.h 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. /*====================================================================*
  2. * Copyright (c) 2020 Qualcomm Technologies, Inc.
  3. * All Rights Reserved.
  4. * Confidential and Proprietary - Qualcomm Technologies, Inc.
  5. *===================================================================*/
  6. /*====================================================================*
  7. *
  8. * memory.h - memory encode/decode definitions and delcaration;
  9. *
  10. * this file is a subset of the original that includes only those
  11. * definitions and declaration needed for toolkit programs;
  12. *
  13. * Motley Tools by Charles Maier <cmaier@cmassoc.net>;
  14. * Copyright 2001-2006 by Charles Maier Associates;
  15. * Licensed under the Internet Software Consortium License;
  16. *
  17. *--------------------------------------------------------------------*/
  18. #ifndef MEMORY_HEADER
  19. #define MEMORY_HEADER
  20. /*====================================================================*
  21. * system header files;
  22. *--------------------------------------------------------------------*/
  23. #include <stdio.h>
  24. #include <unistd.h>
  25. #include <stdint.h>
  26. #include <netinet/in.h>
  27. /*====================================================================*
  28. * custom header files;
  29. *--------------------------------------------------------------------*/
  30. #include "../tools/types.h"
  31. #include "../tools/endian.h"
  32. /*====================================================================*
  33. *
  34. *--------------------------------------------------------------------*/
  35. #define IPv4_LEN 4
  36. #define IPv6_LEN 16
  37. /*====================================================================*
  38. *
  39. *--------------------------------------------------------------------*/
  40. #ifndef offset
  41. #define offset(struct, member) (signed)(&struct.member)-(signed)(&struct)
  42. #endif
  43. /*====================================================================*
  44. *
  45. *--------------------------------------------------------------------*/
  46. #define HEXSTRING(string, memory) hexstring (string, sizeof (string), memory, sizeof (memory))
  47. #define HEXDUMP_HEADER "-------- 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ----------------\n"
  48. #define REGVIEW32_HEADER "REGISTER CONTENTS 31----24 23----16 15----08 07----00\n"
  49. #define REGVIEW16_HEADER "ADDR DATA 5432 1098 7654 3210\n"
  50. #define ADDRSIZE 8
  51. /*====================================================================*
  52. * macro expansions;
  53. *--------------------------------------------------------------------*/
  54. #define NEW(object) (object *)(emalloc(sizeof(object)))
  55. #define STR(length) (char *)(emalloc((length)+1))
  56. /*====================================================================*
  57. * memory increment/decrement functions;
  58. *--------------------------------------------------------------------*/
  59. signed strincr (void * memory, size_t extent, byte min, byte max);
  60. signed strdecr (void * memory, size_t extent, byte min, byte max);
  61. signed memincr (void * memory, size_t extent);
  62. signed memdecr (void * memory, size_t extent);
  63. /*====================================================================*
  64. *
  65. *--------------------------------------------------------------------*/
  66. bool memseek (void const * memory, size_t extent, void const * buffer, size_t length);
  67. /*====================================================================*
  68. * memory allocation functions;
  69. *--------------------------------------------------------------------*/
  70. void * emalloc (size_t length);
  71. /*====================================================================*
  72. * memory movement functions;
  73. *--------------------------------------------------------------------*/
  74. void memswap (void *, void *, size_t extent);
  75. void endian (void * memory, size_t extent);
  76. /*====================================================================*
  77. * memory validation functions (deprecated);
  78. *--------------------------------------------------------------------*/
  79. uint32_t checksum_32 (const uint32_t memory [], size_t extent, uint32_t checksum);
  80. uint32_t fdchecksum_32 (int fd, size_t extent, uint32_t checksum);
  81. /*====================================================================*
  82. * memory validation functions;
  83. *--------------------------------------------------------------------*/
  84. uint32_t checksum32 (void const * memory, size_t extent, uint32_t checksum);
  85. uint32_t fdchecksum32 (int fd, size_t extent, uint32_t checksum);
  86. /*====================================================================*
  87. * memory encode functions;
  88. *--------------------------------------------------------------------*/
  89. size_t memencode (void * memory, size_t extent, char const * format, char const * string);
  90. size_t hexencode (void * memory, size_t extent, char const * string);
  91. size_t hexcopy (void * memory, size_t extent, char const * string);
  92. size_t decencode (void * memory, size_t extent, char const * string);
  93. size_t memdecode (void const * memory, size_t extent, char const * format, char const * string);
  94. size_t hexdecode (void const * memory, size_t extent, char buffer [], size_t length);
  95. size_t decdecode (void const * memory, size_t extent, char buffer [], size_t length);
  96. char const * hexstream (char buffer [], size_t length, void const * memory, size_t extent);
  97. char const * hexstring (char buffer [], size_t length, void const * memory, size_t extent);
  98. char const * decstring (char buffer [], size_t length, void const * memory, size_t extent);
  99. char const * hexoffset (char buffer [], size_t length, off_t offset);
  100. char const * hex2IPv4 (char buffer [], register size_t length, void const * memory, register size_t extent);
  101. size_t bytespec (char const * string, void * memory, size_t extent);
  102. size_t dataspec (char const * string, void * memory, size_t extent);
  103. size_t ipv4spec (char const * string, void * memory);
  104. size_t ipv6spec (char const * string, void * memory);
  105. /*====================================================================*
  106. * memory input functions;
  107. *--------------------------------------------------------------------*/
  108. size_t hexload (void * memory, size_t extent, FILE * fp);
  109. /*====================================================================*
  110. * memory output functions;
  111. *--------------------------------------------------------------------*/
  112. void hexwrite (signed fd, void const * memory, size_t extent);
  113. void hexsave (void const * memory, size_t extent, size_t column, FILE * fp);
  114. void hexdump (void const * memory, size_t offset, size_t extent, FILE * fp);
  115. void bindump (void const * memory, size_t offset, size_t extent, FILE * fp);
  116. void hexview (void const * memory, size_t offset, size_t extent, FILE * fp);
  117. void hexpeek (void const * memory, size_t origin, size_t offset, size_t extent, size_t window, FILE * fp);
  118. void regview16 (void const * memory, size_t offset, size_t extent, FILE * fp);
  119. void regview32 (void const * memory, size_t offset, size_t extent, FILE * fp);
  120. void hexout (void const * memory, size_t extent, char c, char e, FILE * fp);
  121. void decout (void const * memory, size_t extent, char c, char e, FILE * fp);
  122. void binout (void const * memory, size_t extent, char c, char e, FILE * fp);
  123. void chrout (void const * memory, size_t extent, char c, char e, FILE * fp);
  124. void memout (void const * memory, size_t extent, char const * format, unsigned group, char c, char e, FILE * fp);
  125. /*====================================================================*
  126. * end definitions;
  127. *--------------------------------------------------------------------*/
  128. #endif