diff options
Diffstat (limited to 'unpack.c')
-rw-r--r-- | unpack.c | 36 |
1 files changed, 18 insertions, 18 deletions
@@ -15,12 +15,12 @@ #include "pack.h" #include "trace.h" -static uintmax_t read_val(const unsigned char *buf, size_t size, enum endian e) +static uintmax_t read_val(const unsigned char *buf, size_t size, enum pack_endian e) { uintmax_t val = 0; for (size_t i = 0; i < size; i++) { - val |= (uintmax_t)(buf[i] & 0xff) << (e == LITTLE ? i : size - i - 1) * 8; + val |= (uintmax_t)(buf[i] & 0xff) << (e == PACK_ENDIAN_LITTLE ? i : size - i - 1) * 8; } return val; @@ -38,7 +38,7 @@ static intmax_t minval(size_t s) enum pack_status unpack(const void *buf_, size_t size, const char *fmt, ...) { - enum endian endianness = BIG; + enum pack_endian endianness = PACK_ENDIAN_BIG; const unsigned char *buf = buf_; size_t offset = 0; va_list ap; @@ -84,21 +84,21 @@ enum pack_status unpack(const void *buf_, size_t size, const char *fmt, ...) tr_debug("count: %" PRIuSIZE ", i: %d, fmt[i]: %c, sign: %ssigned", count, i, fmt[i], sign ? "" : "un"); switch (fmt[i]) { - case '>': endianness = BIG; continue; - case '<': endianness = LITTLE; continue; - case 'b': arg.b = va_arg(ap, signed char *); break; - case 'B': arg.B = va_arg(ap, unsigned char *); break; - case 'h': arg.h = va_arg(ap, short *); break; - case 'H': arg.H = va_arg(ap, unsigned short *); break; - case 'i': arg.i = va_arg(ap, int *); break; - case 'I': arg.I = va_arg(ap, unsigned *); break; - case 'l': arg.l = va_arg(ap, long *); break; - case 'L': arg.L = va_arg(ap, unsigned long *); break; - case 'q': arg.q = va_arg(ap, long long *); break; - case 'Q': arg.Q = va_arg(ap, unsigned long long *); break; - case 'f': arg.f = va_arg(ap, float *); break; - case 'd': arg.d = va_arg(ap, double *); break; - case 'x': break; + case '>': endianness = PACK_ENDIAN_BIG; continue; + case '<': endianness = PACK_ENDIAN_LITTLE; continue; + case PACK_TYPE_UCHAR: arg.b = va_arg(ap, signed char *); break; + case PACK_TYPE_SCHAR: arg.B = va_arg(ap, unsigned char *); break; + case PACK_TYPE_SHORT: arg.h = va_arg(ap, short *); break; + case PACK_TYPE_USHORT: arg.H = va_arg(ap, unsigned short *); break; + case PACK_TYPE_INT: arg.i = va_arg(ap, int *); break; + case PACK_TYPE_UINT: arg.I = va_arg(ap, unsigned *); break; + case PACK_TYPE_LONG: arg.l = va_arg(ap, long *); break; + case PACK_TYPE_ULONG: arg.L = va_arg(ap, unsigned long *); break; + case PACK_TYPE_LLONG: arg.q = va_arg(ap, long long *); break; + case PACK_TYPE_ULLONG: arg.Q = va_arg(ap, unsigned long long *); break; + case PACK_TYPE_FLOAT: arg.f = va_arg(ap, float *); break; + case PACK_TYPE_DOUBLE: arg.d = va_arg(ap, double *); break; + case PACK_TYPE_PADDING: break; default: return PACK_FMTINVAL; } |