X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fcore%2Fdata.c;h=81b511b6c48fda961b51e9d770f13da415cabfac;hb=f274b5e2002b20b64a84b31791d82e5a195bb771;hp=1bb5400028223c89eca2f9a10e7ee3e81cc5cb03;hpb=4f8a84025ecb0d230407d54743186c2b4d1941c9;p=sysdb.git diff --git a/src/core/data.c b/src/core/data.c index 1bb5400..81b511b 100644 --- a/src/core/data.c +++ b/src/core/data.c @@ -99,6 +99,10 @@ sdb_data_format(sdb_data_t *datum, sdb_strbuf_t *buf) sdb_strbuf_append(buf, "%a", datum->data.decimal); break; case SDB_TYPE_STRING: + if (! datum->data.string) { + sdb_strbuf_append(buf, "\"NULL\""); + return 0; + } /* TODO: escape special characters */ sdb_strbuf_append(buf, "\"%s\"", datum->data.string); break; @@ -109,18 +113,33 @@ sdb_data_format(sdb_data_t *datum, sdb_strbuf_t *buf) datum->data.datetime)) return -1; tmp[sizeof(tmp) - 1] = '\0'; - sdb_strbuf_append(buf, "%s", tmp); + sdb_strbuf_append(buf, "\"%s\"", tmp); } 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] = '\\'; + tmp[pos + 1] = 'x'; + pos += 2; + + 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: