X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Futils%2Funixsock.c;h=75221716e2479585f310c0c1dd263321dbd2735f;hb=76d4396d3e9d2593d76116b6275b1d7edc83e5d1;hp=6f4d5cc2e090350be92920ed3d074a18adaf091a;hpb=6ceaca1424cee5339613b2622ee8e160168fda1b;p=sysdb.git diff --git a/src/utils/unixsock.c b/src/utils/unixsock.c index 6f4d5cc..7522171 100644 --- a/src/utils/unixsock.c +++ b/src/utils/unixsock.c @@ -107,7 +107,7 @@ sdb_unixsock_client_process_one_line(sdb_unixsock_client_t *client, for (i = 0; i < column_count; ++i) { char *next; - if (! line) { /* this must no happen */ + if (! line) { /* this must not happen */ sdb_log(SDB_LOG_ERR, "unixsock: Unexpected EOL while " "parsing line (expected %i columns delimited by '%s'; " "got %i): %s", column_count, delim, @@ -125,15 +125,25 @@ sdb_unixsock_client_process_one_line(sdb_unixsock_client_t *client, ++next; } - if (sdb_data_parse(line, - types ? types[i] : SDB_TYPE_STRING, &data[i])) - return -1; + if (types && (types[i] != SDB_TYPE_STRING)) { + if (sdb_data_parse(line, types[i], &data[i])) + return -1; + } + else { + /* Avoid a copy in common cases */ + data[i].type = SDB_TYPE_STRING; + data[i].data.string = line; + } line = next; } if (callback(client, (size_t)column_count, data, user_data)) return -1; + + for (i = 0; i < column_count; ++i) + if (types && (types[i] != SDB_TYPE_STRING)) + sdb_data_free_datum(&data[i]); return 0; } /* sdb_unixsock_client_process_one_line */