summaryrefslogtreecommitdiff
path: root/src/ecbor_describe.c
diff options
context:
space:
mode:
authorrimio <vasi.vilvoiu@gmail.com>2018-03-02 01:40:43 +0200
committerrimio <vasi.vilvoiu@gmail.com>2018-03-02 01:40:43 +0200
commitf2397db2cab21c9db06e8f7b69981f7eb2ca8cd5 (patch)
tree897682067030314d41db3491c013117739e04bb9 /src/ecbor_describe.c
parent85f4b2274c7ed2107dd56329c3421c15272e67a5 (diff)
Added indefinite string API; added test case answers
Diffstat (limited to 'src/ecbor_describe.c')
-rw-r--r--src/ecbor_describe.c96
1 files changed, 72 insertions, 24 deletions
diff --git a/src/ecbor_describe.c b/src/ecbor_describe.c
index 2ae9ccf..fc72331 100644
--- a/src/ecbor_describe.c
+++ b/src/ecbor_describe.c
@@ -87,50 +87,98 @@ print_ecbor_item (ecbor_item_t *item, unsigned int level, char *prefix)
case ECBOR_TYPE_STR:
{
uint64_t len;
- char *val;
rc = ecbor_get_length (item, &len);
if (rc != ECBOR_OK) {
return rc;
}
-
- rc = ecbor_get_value (item, (char *) &val);
- if (rc != ECBOR_OK) {
- return rc;
- }
- printf ("[STR] len %u %s value '%.*s'\n", (unsigned int) len,
- (ECBOR_IS_INDEFINITE (*item) ? "(indefinite)" : ""),
- (int)(len <= max_str_print_len ? len : strlen(msg_too_large)),
- (len <= max_str_print_len ? val : msg_too_large));
+ if (ECBOR_IS_INDEFINITE (*item)) {
+ uint64_t nchunks;
+
+ rc = ecbor_get_str_chunk_count (item, &nchunks);
+ if (rc != ECBOR_OK) {
+ return rc;
+ }
+
+ printf ("[STR] len %u (indefinite)\n", (unsigned int) len);
+ for (i = 0; i < nchunks; i ++) {
+ ecbor_item_t chunk;
+
+ rc = ecbor_get_str_chunk (item, i, &chunk);
+ if (rc != ECBOR_OK) {
+ return rc;
+ }
+
+ rc = print_ecbor_item (&chunk, level + 1, "");
+ if (rc != ECBOR_OK) {
+ return rc;
+ }
+ }
+ } else {
+ char *val;
+
+ rc = ecbor_get_str (item, &val);
+ if (rc != ECBOR_OK) {
+ return rc;
+ }
+
+ printf ("[STR] len %u value '%.*s'\n", (unsigned int) len,
+ (int)(len <= max_str_print_len ? len : strlen(msg_too_large)),
+ (len <= max_str_print_len ? val : msg_too_large));
+ }
}
break;
case ECBOR_TYPE_BSTR:
{
uint64_t len;
- char *val;
rc = ecbor_get_length (item, &len);
if (rc != ECBOR_OK) {
return rc;
}
-
- rc = ecbor_get_value (item, (char *) &val);
- if (rc != ECBOR_OK) {
- return rc;
- }
- printf ("[BSTR] len %u %s value ", (unsigned int) len,
- (ECBOR_IS_INDEFINITE (*item) ? "(indefinite)" : ""));
- if (len > max_str_print_len) {
- printf ("'%s'\n", msg_too_large);
+ if (ECBOR_IS_INDEFINITE (*item)) {
+ uint64_t nchunks;
+
+ rc = ecbor_get_bstr_chunk_count (item, &nchunks);
+ if (rc != ECBOR_OK) {
+ return rc;
+ }
+
+ printf ("[BSTR] len %u (indefinite)\n", (unsigned int) len);
+ for (i = 0; i < nchunks; i ++) {
+ ecbor_item_t chunk;
+
+ rc = ecbor_get_bstr_chunk (item, i, &chunk);
+ if (rc != ECBOR_OK) {
+ return rc;
+ }
+
+ rc = print_ecbor_item (&chunk, level + 1, "");
+ if (rc != ECBOR_OK) {
+ return rc;
+ }
+ }
} else {
- printf ("'");
- for (i = 0; i < len; i ++) {
- printf("%02x", val[i]);
+ uint8_t *val;
+
+ rc = ecbor_get_bstr (item, &val);
+ if (rc != ECBOR_OK) {
+ return rc;
+ }
+
+ printf ("[BSTR] len %u value ", (unsigned int) len);
+ if (len > max_str_print_len) {
+ printf ("'%s'\n", msg_too_large);
+ } else {
+ printf ("'");
+ for (i = 0; i < len; i ++) {
+ printf("%02x", val[i]);
+ }
+ printf ("'\n");
}
- printf ("'\n");
}
}
break;