X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Fcore%2Fdata.c;fp=src%2Fcore%2Fdata.c;h=28d4c36ad66cbd92149ef6bea5a1f97d0e635ca4;hp=53cc88835883db4d895a66953af33948969d3f60;hb=667ae3c735e9c35a0a32affe3f9b41317fe76118;hpb=0ec2844f4123c01908a1369266600d200356f043 diff --git a/src/core/data.c b/src/core/data.c index 53cc888..28d4c36 100644 --- a/src/core/data.c +++ b/src/core/data.c @@ -787,9 +787,14 @@ sdb_data_strlen(const sdb_data_t *datum) return strlen(datum->data.re.raw) + 4; } else if (datum->type & SDB_TYPE_ARRAY) { - /* TODO */ - errno = ENOTSUP; - return 0; + size_t len = 2; /* [] */ + size_t i; + for (i = 0; i < datum->data.array.length; ++i) { + sdb_data_t v = SDB_DATA_INIT; + sdb_data_array_get(datum, i, &v); + len += sdb_data_strlen(&v) + 1; + } + return len; } return 0; } /* sdb_data_strlen */ @@ -804,7 +809,7 @@ sdb_data_format(const sdb_data_t *datum, char *buf, size_t buflen, int quoted) size_t i, pos; - if ((! datum) || (! buf)) + if ((! datum) || (! buf) || (! buflen)) return -1; if (datum->type == SDB_TYPE_INTEGER) { @@ -873,9 +878,32 @@ sdb_data_format(const sdb_data_t *datum, char *buf, size_t buflen, int quoted) } } else if (datum->type & SDB_TYPE_ARRAY) { - /* TODO */ - errno = ENOTSUP; - return -1; + ret = 1; + buf[0] = '['; + for (i = 0; i < datum->data.array.length; ++i) { + sdb_data_t v = SDB_DATA_INIT; + int n; + if ((size_t)ret >= buflen - 1) + break; + + if (ret > 1) { + buf[ret] = ','; + buf[ret + 1] = ' '; + ret += 2; + } + + sdb_data_array_get(datum, i, &v); + n = sdb_data_format(&v, buf + ret, buflen - ret, quoted); + if (n > 0) + ret += n; + else + break; + } + if ((size_t)ret < buflen - 1) { + buf[ret] = ']'; + buf[ret + 1] = '\0'; + ++ret; + } } if (is_null) {