static int
decode_int(const char *buffer, unsigned int buff_size, unsigned int *out_size);
+static int
+decode_uint(const char *buffer, unsigned int buff_size, unsigned int *out_size);
+
static int
decode_bigint(const char *buffer, unsigned int buff_size, unsigned int *out_size);
"int", &decode_int
},
{
- "oid", &decode_int
+ "oid", &decode_uint
},
{
- "xid", &decode_int
+ "xid", &decode_uint
},
{
"serial", &decode_int
return 0;
}
+/* Decode an unsigned int type */
+static int
+decode_uint(const char *buffer, unsigned int buff_size, unsigned int *out_size)
+{
+ const char *new_buffer = (const char *) INTALIGN(buffer);
+ unsigned int delta = (unsigned int) ((uintptr_t) new_buffer - (uintptr_t) buffer);
+
+ if (buff_size < delta)
+ return -1;
+
+ buff_size -= delta;
+ buffer = new_buffer;
+
+ if (buff_size < sizeof(uint32))
+ return -2;
+
+ CopyAppendFmt("%u", *(uint32 *) buffer);
+ *out_size = sizeof(uint32) + delta;
+ return 0;
+}
+
/* Decode a bigint type */
static int
decode_bigint(const char *buffer, unsigned int buff_size, unsigned int *out_size)
<Data> -----
Item 1 -- Length: 28 Offset: 8160 (0x1fe0) Flags: NORMAL
-COPY: -1
+COPY: 4294967295
Item 2 -- Length: 28 Offset: 8128 (0x1fc0) Flags: NORMAL
COPY: 0
Item 3 -- Length: 28 Offset: 8096 (0x1fa0) Flags: NORMAL
<Data> -----
Item 1 -- Length: 28 Offset: 8160 (0x1fe0) Flags: NORMAL
-COPY: -1
+COPY: 4294967295
Item 2 -- Length: 28 Offset: 8128 (0x1fc0) Flags: NORMAL
COPY: 0
Item 3 -- Length: 28 Offset: 8096 (0x1fa0) Flags: NORMAL
<Data> -----
Item 1 -- Length: 28 Offset: 8164 (0x1fe4) Flags: NORMAL
-COPY: -1
+COPY: 4294967295
Item 2 -- Length: 28 Offset: 8136 (0x1fc8) Flags: NORMAL
COPY: 0
Item 3 -- Length: 28 Offset: 8108 (0x1fac) Flags: NORMAL
<Data> -----
Item 1 -- Length: 28 Offset: 8164 (0x1fe4) Flags: NORMAL
-COPY: -1
+COPY: 4294967295
Item 2 -- Length: 28 Offset: 8136 (0x1fc8) Flags: NORMAL
COPY: 0
Item 3 -- Length: 28 Offset: 8108 (0x1fac) Flags: NORMAL