diff --git a/examples/unpack.c b/examples/unpack.c index 56d01fe..b74f628 100644 --- a/examples/unpack.c +++ b/examples/unpack.c @@ -1,22 +1,25 @@ #include #include #include +#include #include #include int main(int argc, char **argv) { - uint8_t buf[7] = "\x5KMFDM", + uint8_t buf[11] = "\x5KMFDM\x04\x03\x02\x01", str[SKIPSTONE_MESSAGE_MAX_STRLEN]; - if (skipstone_message_unpack(buf, sizeof(buf), "z", str) < 0) { + uint32_t num; + + if (skipstone_message_unpack(buf, sizeof(buf), "zL", str, &num) < 0) { fprintf(stderr, "%s: %s: %s\n", argv[0], "skipstone_message_unpack()", strerror(errno)); goto error_message_unpack; } - printf("%s\n", str); + printf("%s: %" PRIu32 "\n", str, num); return 0; diff --git a/src/message.c b/src/message.c index 5693f31..e42c426 100644 --- a/src/message.c +++ b/src/message.c @@ -137,7 +137,7 @@ ssize_t skipstone_message_unpack(void *message, sz = ((uint8_t *)message)[offset++]; - if (len < offset + sz + 1) { + if (len < offset + sz) { goto done; } @@ -145,9 +145,9 @@ ssize_t skipstone_message_unpack(void *message, memcpy(dest, (uint8_t *)message + offset, sz); - offset += sz; + ((uint8_t *)dest)[sz] = '\0'; - ((uint8_t *)message)[offset++] = '\0'; + offset += sz; break; }