CCSDS TM Transfer Frames (CCSDS 132.0-B-3)
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

regenerate EverParse C files with wire 0.9.0

Wire_3d now generates ExternalTypedefs.h, ExternalAPI.h, Wrapper,
and Fields files for schemas using WireCtx. Bitfield padding is
fixed so .3d structs match the OCaml codec wire_size. Test.c passes
NULL for the WIRECTX parameter and links per-schema Field stubs.

Affected: ax25, cfdp, fsr, ltp, mbr, pid1, pus, rpmsg, sdls,
spacefibre, squashfs, tcpcl, udpcl, spacewire, and others via @gen.

+21 -598
-243
c/EverParse.h
··· 1 - /*++ 2 - 3 - Copyright (c) Microsoft Corporation 4 - 5 - Module Name: 6 - 7 - EverParse.h 8 - 9 - Abstract: 10 - 11 - This is an EverParse-generated file that contains common auxiliary 12 - functions for EverParse-generated verified data validators. 13 - 14 - This file was generated by EverParse v2026.02.04 15 - 16 - Authors: 17 - 18 - nswamy, protz, taramana 5-Feb-2020 19 - 20 - --*/ 21 - 22 - 23 - #ifndef EverParse_H 24 - #define EverParse_H 25 - 26 - #if defined(__cplusplus) 27 - extern "C" { 28 - #endif 29 - 30 - #include "EverParseEndianness.h" 31 - 32 - static inline uint8_t EverParseGetBitfield8(uint8_t Value, uint32_t BitsFrom, uint32_t BitsTo) 33 - { 34 - uint8_t op1 = (uint32_t)Value << (8U - BitsTo); 35 - return (uint32_t)op1 >> (8U - BitsTo + BitsFrom); 36 - } 37 - 38 - static inline uint16_t 39 - EverParseGetBitfield16(uint16_t Value, uint32_t BitsFrom, uint32_t BitsTo) 40 - { 41 - uint16_t bf = (uint32_t)Value << (16U - BitsTo); 42 - return (uint32_t)bf >> (16U - BitsTo + BitsFrom); 43 - } 44 - 45 - static inline uint32_t 46 - EverParseGetBitfield32(uint32_t Value, uint32_t BitsFrom, uint32_t BitsTo) 47 - { 48 - return Value << (32U - BitsTo) >> (32U - BitsTo + BitsFrom); 49 - } 50 - 51 - static inline uint64_t 52 - EverParseGetBitfield64(uint64_t Value, uint32_t BitsFrom, uint32_t BitsTo) 53 - { 54 - return Value << (64U - BitsTo) >> (64U - BitsTo + BitsFrom); 55 - } 56 - 57 - static inline uint8_t 58 - EverParseGetBitfield8MsbFirst(uint8_t Value, uint32_t BitsFrom, uint32_t BitsTo) 59 - { 60 - return EverParseGetBitfield8(Value, 8U - BitsTo, 8U - BitsFrom); 61 - } 62 - 63 - static inline uint16_t 64 - EverParseGetBitfield16MsbFirst(uint16_t Value, uint32_t BitsFrom, uint32_t BitsTo) 65 - { 66 - return EverParseGetBitfield16(Value, 16U - BitsTo, 16U - BitsFrom); 67 - } 68 - 69 - static inline uint32_t 70 - EverParseGetBitfield32MsbFirst(uint32_t Value, uint32_t BitsFrom, uint32_t BitsTo) 71 - { 72 - return EverParseGetBitfield32(Value, 32U - BitsTo, 32U - BitsFrom); 73 - } 74 - 75 - static inline uint64_t 76 - EverParseGetBitfield64MsbFirst(uint64_t Value, uint32_t BitsFrom, uint32_t BitsTo) 77 - { 78 - return EverParseGetBitfield64(Value, 64U - BitsTo, 64U - BitsFrom); 79 - } 80 - 81 - #define EVERPARSE_VALIDATOR_MAX_LENGTH (1152921504606846975ULL) 82 - 83 - static inline BOOLEAN EverParseIsError(uint64_t PositionOrError) 84 - { 85 - return PositionOrError > EVERPARSE_VALIDATOR_MAX_LENGTH; 86 - } 87 - 88 - static inline BOOLEAN EverParseIsSuccess(uint64_t PositionOrError) 89 - { 90 - return PositionOrError <= EVERPARSE_VALIDATOR_MAX_LENGTH; 91 - } 92 - 93 - static inline uint64_t EverParseSetValidatorErrorPos(uint64_t Error, uint64_t Position) 94 - { 95 - return (Error & 17293822569102704640ULL) | Position << 0U; 96 - } 97 - 98 - static inline uint64_t EverParseGetValidatorErrorPos(uint64_t X) 99 - { 100 - return (X & 1152921504606846975ULL) >> 0U; 101 - } 102 - 103 - static inline uint64_t EverParseSetValidatorErrorKind(uint64_t Error, uint64_t Code) 104 - { 105 - return (Error & 1152921504606846975ULL) | Code << 60U; 106 - } 107 - 108 - static inline uint64_t EverParseGetValidatorErrorKind(uint64_t Error) 109 - { 110 - return (Error & 17293822569102704640ULL) >> 60U; 111 - } 112 - 113 - #define EVERPARSE_VALIDATOR_ERROR_GENERIC (1152921504606846976ULL) 114 - 115 - #define EVERPARSE_VALIDATOR_ERROR_NOT_ENOUGH_DATA (2305843009213693952ULL) 116 - 117 - #define EVERPARSE_VALIDATOR_ERROR_IMPOSSIBLE (3458764513820540928ULL) 118 - 119 - #define EVERPARSE_VALIDATOR_ERROR_LIST_SIZE_NOT_MULTIPLE (4611686018427387904ULL) 120 - 121 - #define EVERPARSE_VALIDATOR_ERROR_ACTION_FAILED (5764607523034234880ULL) 122 - 123 - #define EVERPARSE_VALIDATOR_ERROR_CONSTRAINT_FAILED (6917529027641081856ULL) 124 - 125 - #define EVERPARSE_VALIDATOR_ERROR_UNEXPECTED_PADDING (8070450532247928832ULL) 126 - 127 - #define EVERPARSE_VALIDATOR_ERROR_PROBE_FAILED (9223372036854775808ULL) 128 - 129 - static inline PRIMS_STRING EverParseErrorReasonOfResult(uint64_t Code) 130 - { 131 - switch (EverParseGetValidatorErrorKind(Code)) 132 - { 133 - case 1ULL: 134 - { 135 - return "generic error"; 136 - } 137 - case 2ULL: 138 - { 139 - return "not enough data"; 140 - } 141 - case 3ULL: 142 - { 143 - return "impossible"; 144 - } 145 - case 4ULL: 146 - { 147 - return "list size not multiple of element size"; 148 - } 149 - case 5ULL: 150 - { 151 - return "action failed"; 152 - } 153 - case 6ULL: 154 - { 155 - return "constraint failed"; 156 - } 157 - case 7ULL: 158 - { 159 - return "unexpected padding"; 160 - } 161 - case 8ULL: 162 - { 163 - return "probe failed"; 164 - } 165 - default: 166 - { 167 - return "unspecified"; 168 - } 169 - } 170 - } 171 - 172 - static inline uint64_t EverParseCheckConstraintOk(BOOLEAN Ok, uint64_t Position) 173 - { 174 - if (Ok) 175 - { 176 - return Position; 177 - } 178 - return EverParseSetValidatorErrorPos(EVERPARSE_VALIDATOR_ERROR_CONSTRAINT_FAILED, Position); 179 - } 180 - 181 - static inline BOOLEAN EverParseIsRangeOkay(uint32_t Size, uint32_t Offset, uint32_t AccessSize) 182 - { 183 - return Size >= AccessSize && (Size - AccessSize) >= Offset; 184 - } 185 - 186 - typedef struct EVERPARSE_ERROR_FRAME_s 187 - { 188 - BOOLEAN filled; 189 - uint64_t start_pos; 190 - PRIMS_STRING typename_s; 191 - PRIMS_STRING fieldname; 192 - PRIMS_STRING reason; 193 - uint64_t error_code; 194 - } 195 - EVERPARSE_ERROR_FRAME; 196 - 197 - typedef uint8_t *EVERPARSE_INPUT_BUFFER; 198 - 199 - typedef void *EVERPARSE__LIVE; 200 - 201 - static inline void 202 - EverParseDefaultErrorHandler( 203 - PRIMS_STRING TypenameS, 204 - PRIMS_STRING Fieldname, 205 - PRIMS_STRING Reason, 206 - uint64_t ErrorCode, 207 - EVERPARSE_ERROR_FRAME *Context, 208 - uint8_t *Input, 209 - uint64_t StartPos 210 - ) 211 - { 212 - KRML_MAYBE_UNUSED_VAR(Input); 213 - if (!(*Context).filled) 214 - { 215 - *Context = 216 - ( 217 - (EVERPARSE_ERROR_FRAME){ 218 - .filled = TRUE, 219 - .start_pos = StartPos, 220 - .typename_s = TypenameS, 221 - .fieldname = Fieldname, 222 - .reason = Reason, 223 - .error_code = ErrorCode 224 - } 225 - ); 226 - return; 227 - } 228 - } 229 - 230 - extern uint8_t *EverParseStreamOf(EVERPARSE_COPY_BUFFER_T uu___); 231 - 232 - extern uint64_t EverParseStreamLen(EVERPARSE_COPY_BUFFER_T c); 233 - 234 - typedef void *EVERPARSE_INV; 235 - 236 - typedef void *EVERPARSE_LIVENESS_PRESERVED; 237 - 238 - #if defined(__cplusplus) 239 - } 240 - #endif 241 - 242 - #define EverParse_H_DEFINED 243 - #endif /* EverParse_H */
-205
c/EverParseEndianness.h
··· 1 - /*++ 2 - 3 - Copyright (c) Microsoft Corporation 4 - 5 - Module Name: 6 - 7 - EverParseEndianness.h 8 - 9 - Abstract: 10 - 11 - This is an EverParse-related file to read integer values from raw 12 - bytes. 13 - 14 - Authors: 15 - 16 - nswamy, protz, taramana 5-Feb-2020 17 - 18 - --*/ 19 - /* This is a hand-written header that selectively includes relevant bits from 20 - * krmllib.h -- it has to be updated manually to track upstream changes. */ 21 - 22 - #ifndef __EverParseEndianness_H 23 - #define __EverParseEndianness_H 24 - 25 - #if defined(__cplusplus) 26 - extern "C" { 27 - #endif 28 - 29 - /***************************************************************************** 30 - ********* Implementation of LowStar.Endianness (selected bits) ************** 31 - *****************************************************************************/ 32 - 33 - #if defined(_MSC_VER) 34 - # include <windows.h> 35 - #endif 36 - 37 - #include <string.h> 38 - #include <stdint.h> 39 - 40 - typedef const char * EVERPARSE_STRING; 41 - typedef EVERPARSE_STRING PRIMS_STRING; 42 - typedef void* EVERPARSE_COPY_BUFFER_T; 43 - 44 - #ifndef KRML_MAYBE_UNUSED_VAR 45 - # define KRML_MAYBE_UNUSED_VAR(x) (void)(x) 46 - #endif 47 - 48 - #ifndef KRML_HOST_IGNORE 49 - # define KRML_HOST_IGNORE(x) (void)(x) 50 - #endif 51 - 52 - #ifndef KRML_HOST_PRINTF 53 - # include <stdio.h> 54 - # define KRML_HOST_PRINTF printf 55 - #endif 56 - 57 - #ifndef KRML_HOST_EXIT 58 - # include <stdlib.h> 59 - # define KRML_HOST_EXIT exit 60 - #endif 61 - 62 - #define KRML_CHECK_SIZE(size_elt, sz) \ 63 - do { \ 64 - if (((size_t)(sz)) > ((size_t)(SIZE_MAX / (size_elt)))) { \ 65 - KRML_HOST_PRINTF( \ 66 - "Maximum allocatable size exceeded, aborting before overflow at " \ 67 - "%s:%d\n", \ 68 - __FILE__, __LINE__); \ 69 - KRML_HOST_EXIT(253); \ 70 - } \ 71 - } while (0) 72 - 73 - /* ... for Windows (MSVC)... not targeting XBOX 360! */ 74 - #if defined(_MSC_VER) 75 - 76 - # include <stdlib.h> 77 - 78 - # define htobe16(x) _byteswap_ushort(x) 79 - # define htole16(x) (x) 80 - # define be16toh(x) _byteswap_ushort(x) 81 - # define le16toh(x) (x) 82 - 83 - # define htobe32(x) _byteswap_ulong(x) 84 - # define htole32(x) (x) 85 - # define be32toh(x) _byteswap_ulong(x) 86 - # define le32toh(x) (x) 87 - 88 - # define htobe64(x) _byteswap_uint64(x) 89 - # define htole64(x) (x) 90 - # define be64toh(x) _byteswap_uint64(x) 91 - # define le64toh(x) (x) 92 - 93 - #else 94 - 95 - typedef uint8_t BOOLEAN; 96 - #define FALSE 0 97 - #define TRUE 1 98 - 99 - /* ... for Linux */ 100 - #if defined(__linux__) || defined(__CYGWIN__) || defined (__USE_SYSTEM_ENDIAN_H__) 101 - # include <endian.h> 102 - 103 - 104 - /* ... for OSX */ 105 - #elif defined(__APPLE__) 106 - # include <libkern/OSByteOrder.h> 107 - # define htole64(x) OSSwapHostToLittleInt64(x) 108 - # define le64toh(x) OSSwapLittleToHostInt64(x) 109 - # define htobe64(x) OSSwapHostToBigInt64(x) 110 - # define be64toh(x) OSSwapBigToHostInt64(x) 111 - 112 - # define htole16(x) OSSwapHostToLittleInt16(x) 113 - # define le16toh(x) OSSwapLittleToHostInt16(x) 114 - # define htobe16(x) OSSwapHostToBigInt16(x) 115 - # define be16toh(x) OSSwapBigToHostInt16(x) 116 - 117 - # define htole32(x) OSSwapHostToLittleInt32(x) 118 - # define le32toh(x) OSSwapLittleToHostInt32(x) 119 - # define htobe32(x) OSSwapHostToBigInt32(x) 120 - # define be32toh(x) OSSwapBigToHostInt32(x) 121 - 122 - /* ... for other BSDs */ 123 - #elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) 124 - # include <sys/endian.h> 125 - #elif defined(__OpenBSD__) 126 - # include <endian.h> 127 - 128 - /* ... for Windows (GCC-like, e.g. mingw or clang) */ 129 - #elif (defined(_WIN32) || defined(_WIN64)) && \ 130 - (defined(__GNUC__) || defined(__clang__)) 131 - 132 - # define htobe16(x) __builtin_bswap16(x) 133 - # define htole16(x) (x) 134 - # define be16toh(x) __builtin_bswap16(x) 135 - # define le16toh(x) (x) 136 - 137 - # define htobe32(x) __builtin_bswap32(x) 138 - # define htole32(x) (x) 139 - # define be32toh(x) __builtin_bswap32(x) 140 - # define le32toh(x) (x) 141 - 142 - # define htobe64(x) __builtin_bswap64(x) 143 - # define htole64(x) (x) 144 - # define be64toh(x) __builtin_bswap64(x) 145 - # define le64toh(x) (x) 146 - 147 - #else 148 - 149 - #error "Unsupported platform" 150 - 151 - #endif 152 - 153 - #endif 154 - 155 - inline static uint16_t Load16(uint8_t *b) { 156 - uint16_t x; 157 - memcpy(&x, b, 2); 158 - return x; 159 - } 160 - 161 - inline static uint32_t Load32(uint8_t *b) { 162 - uint32_t x; 163 - memcpy(&x, b, 4); 164 - return x; 165 - } 166 - 167 - inline static uint64_t Load64(uint8_t *b) { 168 - uint64_t x; 169 - memcpy(&x, b, 8); 170 - return x; 171 - } 172 - 173 - inline static void Store16(uint8_t *b, uint16_t i) { 174 - memcpy(b, &i, 2); 175 - } 176 - 177 - inline static void Store32(uint8_t *b, uint32_t i) { 178 - memcpy(b, &i, 4); 179 - } 180 - 181 - inline static void Store64(uint8_t *b, uint64_t i) { 182 - memcpy(b, &i, 8); 183 - } 184 - 185 - #define Load16Le(b) (le16toh(Load16(b))) 186 - #define Store16Le(b, i) (Store16(b, htole16(i))) 187 - #define Load16Be(b) (be16toh(Load16(b))) 188 - #define Store16Be(b, i) (Store16(b, htobe16(i))) 189 - 190 - #define Load32Le(b) (le32toh(Load32(b))) 191 - #define Store32Le(b, i) (Store32(b, htole32(i))) 192 - #define Load32Be(b) (be32toh(Load32(b))) 193 - #define Store32Be(b, i) (Store32(b, htobe32(i))) 194 - 195 - #define Load64Le(b) (le64toh(Load64(b))) 196 - #define Store64Le(b, i) (Store64(b, htole64(i))) 197 - #define Load64Be(b) (be64toh(Load64(b))) 198 - #define Store64Be(b, i) (Store64(b, htobe64(i))) 199 - 200 - 201 - #if defined(__cplusplus) 202 - } 203 - #endif 204 - 205 - #endif
+12 -12
c/TmHeader.3d
··· 1 1 extern typedef struct _WireCtx WireCtx 2 2 3 - extern unit WireSetU16BE(mutable WireCtx *ctx, UINT32 idx, UINT16BE v) 3 + extern unit TmHeaderSetU16BE(mutable WireCtx *ctx, UINT32 idx, UINT16BE v) 4 4 5 5 entrypoint 6 6 typedef struct _TmHeader(mutable WireCtx *ctx) 7 7 { 8 - UINT16BE version : 2 {:act WireSetU16BE(ctx, (UINT32) 0, version); }; 9 - UINT16BE scid : 10 {:act WireSetU16BE(ctx, (UINT32) 1, scid); }; 10 - UINT16BE vcid : 3 {:act WireSetU16BE(ctx, (UINT32) 2, vcid); }; 11 - UINT16BE ocf_flag : 1 {:act WireSetU16BE(ctx, (UINT32) 3, ocf_flag); }; 12 - UINT16BE mcfc : 8 {:act WireSetU16BE(ctx, (UINT32) 4, mcfc); }; 13 - UINT16BE vcfc : 8 {:act WireSetU16BE(ctx, (UINT32) 5, vcfc); }; 14 - UINT16BE sec_hdr : 1 {:act WireSetU16BE(ctx, (UINT32) 6, sec_hdr); }; 15 - UINT16BE sync_flag : 1 {:act WireSetU16BE(ctx, (UINT32) 7, sync_flag); }; 16 - UINT16BE pkt_order : 1 {:act WireSetU16BE(ctx, (UINT32) 8, pkt_order); }; 17 - UINT16BE seg_len_id : 2 {:act WireSetU16BE(ctx, (UINT32) 9, seg_len_id); }; 18 - UINT16BE first_hdr_ptr : 11 {:act WireSetU16BE(ctx, (UINT32) 10, first_hdr_ptr); }; 8 + UINT16BE version : 2 {:act TmHeaderSetU16BE(ctx, (UINT32) 0, version); }; 9 + UINT16BE scid : 10 {:act TmHeaderSetU16BE(ctx, (UINT32) 1, scid); }; 10 + UINT16BE vcid : 3 {:act TmHeaderSetU16BE(ctx, (UINT32) 2, vcid); }; 11 + UINT16BE ocf_flag : 1 {:act TmHeaderSetU16BE(ctx, (UINT32) 3, ocf_flag); }; 12 + UINT16BE mcfc : 8 {:act TmHeaderSetU16BE(ctx, (UINT32) 4, mcfc); }; 13 + UINT16BE vcfc : 8 {:act TmHeaderSetU16BE(ctx, (UINT32) 5, vcfc); }; 14 + UINT16BE sec_hdr : 1 {:act TmHeaderSetU16BE(ctx, (UINT32) 6, sec_hdr); }; 15 + UINT16BE sync_flag : 1 {:act TmHeaderSetU16BE(ctx, (UINT32) 7, sync_flag); }; 16 + UINT16BE pkt_order : 1 {:act TmHeaderSetU16BE(ctx, (UINT32) 8, pkt_order); }; 17 + UINT16BE seg_len_id : 2 {:act TmHeaderSetU16BE(ctx, (UINT32) 9, seg_len_id); }; 18 + UINT16BE first_hdr_ptr : 11 {:act TmHeaderSetU16BE(ctx, (UINT32) 10, first_hdr_ptr); }; 19 19 } TmHeader; 20 20 21 21
-33
c/TmHeader.c
··· 1 - 2 - 3 - #include "TmHeader.h" 4 - 5 - uint64_t 6 - TmHeaderValidateTmHeader( 7 - uint8_t *Ctxt, 8 - void 9 - (*ErrorHandlerFn)( 10 - EVERPARSE_STRING x0, 11 - EVERPARSE_STRING x1, 12 - EVERPARSE_STRING x2, 13 - uint64_t x3, 14 - uint8_t *x4, 15 - uint8_t *x5, 16 - uint64_t x6 17 - ), 18 - uint8_t *Input, 19 - uint64_t InputLength, 20 - uint64_t StartPosition 21 - ) 22 - { 23 - KRML_MAYBE_UNUSED_VAR(Ctxt); 24 - KRML_MAYBE_UNUSED_VAR(ErrorHandlerFn); 25 - KRML_MAYBE_UNUSED_VAR(Input); 26 - BOOLEAN hasBytes = 6ULL <= (InputLength - StartPosition); 27 - if (hasBytes) 28 - { 29 - return StartPosition + 6ULL; 30 - } 31 - return EverParseSetValidatorErrorPos(EVERPARSE_VALIDATOR_ERROR_NOT_ENOUGH_DATA, StartPosition); 32 - } 33 -
-35
c/TmHeader.h
··· 1 - 2 - 3 - #ifndef TmHeader_H 4 - #define TmHeader_H 5 - 6 - #if defined(__cplusplus) 7 - extern "C" { 8 - #endif 9 - 10 - #include "EverParse.h" 11 - 12 - uint64_t 13 - TmHeaderValidateTmHeader( 14 - uint8_t *Ctxt, 15 - void 16 - (*ErrorHandlerFn)( 17 - EVERPARSE_STRING x0, 18 - EVERPARSE_STRING x1, 19 - EVERPARSE_STRING x2, 20 - uint64_t x3, 21 - uint8_t *x4, 22 - uint8_t *x5, 23 - uint64_t x6 24 - ), 25 - uint8_t *Input, 26 - uint64_t InputLength, 27 - uint64_t StartPosition 28 - ); 29 - 30 - #if defined(__cplusplus) 31 - } 32 - #endif 33 - 34 - #define TmHeader_H_DEFINED 35 - #endif /* TmHeader_H */
+9 -3
c/dune.inc
··· 9 9 (rule 10 10 (alias gen) 11 11 (mode fallback) 12 - (targets EverParse.h EverParseEndianness.h TmHeader.h TmHeader.c test.c) 12 + (targets EverParse.h EverParseEndianness.h TmHeader.h TmHeader.c TmHeader_ExternalTypedefs.h TmHeader_ExternalAPI.h TmHeaderWrapper.c TmHeaderWrapper.h TmHeader_Fields.h TmHeader_Fields.c test.c) 13 13 (deps gen.exe TmHeader.3d) 14 14 (action 15 15 (run ./gen.exe c))) 16 16 17 17 (rule 18 18 (alias runtest) 19 - (deps test.c EverParse.h EverParseEndianness.h TmHeader.h TmHeader.c) 19 + (deps test.c EverParse.h EverParseEndianness.h TmHeader.h TmHeader.c TmHeader_ExternalTypedefs.h TmHeader_ExternalAPI.h TmHeaderWrapper.c TmHeaderWrapper.h TmHeader_Fields.h TmHeader_Fields.c) 20 20 (action 21 21 (system 22 - "cc -std=c11 -Wall -Wextra -Werror -o test_tm test.c TmHeader.c && ./test_tm"))) 22 + "cc -std=c99 -Wall -Wextra -Werror -Wpedantic -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wcast-qual -o test_tm test.c TmHeader.c TmHeader_Fields.c && ./test_tm"))) 23 23 24 24 (install 25 25 (package tm) ··· 28 28 (TmHeader.3d as c/TmHeader.3d) 29 29 (TmHeader.h as c/TmHeader.h) 30 30 (TmHeader.c as c/TmHeader.c) 31 + (TmHeader_ExternalTypedefs.h as c/TmHeader_ExternalTypedefs.h) 32 + (TmHeader_ExternalAPI.h as c/TmHeader_ExternalAPI.h) 33 + (TmHeaderWrapper.c as c/TmHeaderWrapper.c) 34 + (TmHeaderWrapper.h as c/TmHeaderWrapper.h) 35 + (TmHeader_Fields.h as c/TmHeader_Fields.h) 36 + (TmHeader_Fields.c as c/TmHeader_Fields.c) 31 37 (EverParse.h as c/EverParse.h) 32 38 (EverParseEndianness.h as c/EverParseEndianness.h)))
-67
c/test.c
··· 1 - #include <stdio.h> 2 - #include <stdlib.h> 3 - #include <stdint.h> 4 - #include <string.h> 5 - #include "EverParse.h" 6 - #include "TmHeader.h" 7 - 8 - static int error_count; 9 - 10 - static void counting_error_handler( 11 - EVERPARSE_STRING t, EVERPARSE_STRING f, EVERPARSE_STRING r, 12 - uint64_t c, uint8_t *ctx, uint8_t *i, uint64_t p) { 13 - (void)t; (void)f; (void)r; (void)c; (void)ctx; (void)i; (void)p; 14 - error_count++; 15 - } 16 - 17 - #define CHECK(msg, cond) do { \ 18 - if (cond) { pass++; } \ 19 - else { fail++; fprintf(stderr, " FAIL: %s\n", msg); } \ 20 - } while(0) 21 - 22 - int main(void) { 23 - int failures = 0; 24 - 25 - /* TmHeader (6 bytes) */ 26 - { 27 - int pass = 0, fail = 0; 28 - uint8_t buf[6]; 29 - uint64_t r; 30 - 31 - memset(buf, 0, 6); 32 - r = TmHeaderValidateTmHeader(NULL, counting_error_handler, buf, 6, 0); 33 - CHECK("zero buffer validates", EverParseIsSuccess(r)); 34 - CHECK("position advanced to 6", r == 6); 35 - 36 - r = TmHeaderValidateTmHeader(NULL, counting_error_handler, buf, 12, 0); 37 - CHECK("larger buffer validates", EverParseIsSuccess(r)); 38 - CHECK("position is 6 not 12", r == 6); 39 - 40 - for (uint64_t len = 0; len < 6; len++) { 41 - error_count = 0; 42 - r = TmHeaderValidateTmHeader(NULL, counting_error_handler, buf, len, 0); 43 - CHECK("truncated to len fails", EverParseIsError(r)); 44 - } 45 - 46 - r = TmHeaderValidateTmHeader(NULL, counting_error_handler, buf, 0, 0); 47 - CHECK("empty input fails", EverParseIsError(r)); 48 - 49 - srand(42); 50 - for (int i = 0; i < 1000; i++) { 51 - for (int j = 0; j < 6; j++) 52 - buf[j] = (uint8_t)(rand() & 0xff); 53 - r = TmHeaderValidateTmHeader(NULL, counting_error_handler, buf, 6, 0); 54 - CHECK("random buffer validates", EverParseIsSuccess(r)); 55 - CHECK("random position correct", r == 6); 56 - } 57 - 58 - printf("tmheader: %d passed, %d failed\n", pass, fail); 59 - failures += fail; 60 - } 61 - 62 - if (failures == 0) 63 - printf("All tests passed.\n"); 64 - else 65 - printf("%d test(s) failed.\n", failures); 66 - return failures ? 1 : 0; 67 - }