X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fcore%2Fdata.c;h=8f4330eabccf173a2ddca0b6721dab2594295f70;hb=0d96909dfa8190cea20f8565b2013824f65d307a;hp=1bb5400028223c89eca2f9a10e7ee3e81cc5cb03;hpb=f578f9621aa645ea20c4cd027aeda802f9346f12;p=sysdb.git diff --git a/src/core/data.c b/src/core/data.c index 1bb5400..8f4330e 100644 --- a/src/core/data.c +++ b/src/core/data.c @@ -114,13 +114,27 @@ sdb_data_format(sdb_data_t *datum, sdb_strbuf_t *buf) break; case SDB_TYPE_BINARY: { - size_t i; - /* TODO: improve this! */ - sdb_strbuf_append(buf, "%s", "\""); - for (i = 0; i < datum->data.binary.length; ++i) - sdb_strbuf_append(buf, "\\%x", - (int)datum->data.binary.datum[i]); - sdb_strbuf_append(buf, "%s", "\""); + char tmp[4 * datum->data.binary.length + 1]; + size_t i, pos; + + pos = 0; + for (i = 0; i < datum->data.binary.length; ++i) { + int byte = (int)datum->data.binary.datum[i]; + char hex[] = {'0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + + tmp[pos] = '\\'; + ++pos; + + if (byte > 0xf) { + tmp[pos] = hex[byte >> 4]; + ++pos; + } + tmp[pos] = hex[byte & 0xf]; + ++pos; + } + tmp[pos] = '\0'; + sdb_strbuf_append(buf, "\"%s\"", tmp); } break; default: