From 5edfaf66958a7ea7ae6fb7b58c037b86465340ad Mon Sep 17 00:00:00 2001 From: Tomasz Kramkowski Date: Fri, 6 Aug 2021 20:14:04 +0100 Subject: add pack_type and pack_endian and use them --- pack.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'pack.c') diff --git a/pack.c b/pack.c index 3f25ab8..9d7046c 100644 --- a/pack.c +++ b/pack.c @@ -12,15 +12,15 @@ #include "pack.h" #include "trace.h" -static void write_val(unsigned char *buf, size_t size, enum endian e, uintmax_t val) +static void write_val(unsigned char *buf, size_t size, enum pack_endian e, uintmax_t val) { for (size_t i = 0; i < size; i++) - buf[i] = (val >> (e == LITTLE ? i : size - i - 1) * 8) & 0xff; + buf[i] = (val >> (e == PACK_ENDIAN_LITTLE ? i : size - i - 1) * 8) & 0xff; } enum pack_status pack(void *buf_, size_t size, const char *fmt, ...) { - enum endian endianness = BIG; + enum pack_endian endianness = PACK_ENDIAN_BIG; unsigned char *buf = buf_; size_t offset = 0; va_list ap; @@ -36,19 +36,19 @@ enum pack_status pack(void *buf_, size_t size, const char *fmt, ...) tr_debug("i: %d, fmt[i]: %c", i, fmt[i]); sign = islower(fmt[i]); switch (fmt[i]) { - case '>': endianness = BIG; continue; - case '<': endianness = LITTLE; continue; - case 'b': val.s = va_arg(ap, int ); break; - case 'B': val.u = va_arg(ap, unsigned ); break; - case 'h': val.s = va_arg(ap, int ); break; - case 'H': val.u = va_arg(ap, unsigned ); break; - case 'i': val.s = va_arg(ap, int ); break; - case 'I': val.u = va_arg(ap, unsigned ); break; - case 'l': val.s = va_arg(ap, long ); break; - case 'L': val.u = va_arg(ap, unsigned long ); break; - case 'q': val.s = va_arg(ap, long long); break; - case 'Q': val.u = va_arg(ap, unsigned long long); break; - case 'x': val.u = 0; sign = false; break; + case '>': endianness = PACK_ENDIAN_BIG; continue; + case '<': endianness = PACK_ENDIAN_LITTLE; continue; + case PACK_TYPE_SCHAR: val.s = va_arg(ap, int); break; + case PACK_TYPE_UCHAR: val.u = va_arg(ap, unsigned); break; + case PACK_TYPE_SHORT: val.s = va_arg(ap, int); break; + case PACK_TYPE_USHORT: val.u = va_arg(ap, unsigned); break; + case PACK_TYPE_INT: val.s = va_arg(ap, int); break; + case PACK_TYPE_UINT: val.u = va_arg(ap, unsigned); break; + case PACK_TYPE_LONG: val.s = va_arg(ap, long); break; + case PACK_TYPE_ULONG: val.u = va_arg(ap, unsigned long); break; + case PACK_TYPE_LLONG: val.s = va_arg(ap, long long); break; + case PACK_TYPE_ULLONG: val.u = va_arg(ap, unsigned long long); break; + case PACK_TYPE_PADDING: val.u = 0; sign = false; break; default: return PACK_FMTINVAL; } tr_debug("i: %d, fmt[i]: %c, sign: %ssigned", i, fmt[i], sign ? "" : "un"); -- cgit v1.2.3-54-g00ecf