X-Git-Url: https://git.tokkee.org/?p=sysdb.git;a=blobdiff_plain;f=src%2Futils%2Funixsock.c;h=6f4d5cc2e090350be92920ed3d074a18adaf091a;hp=62b6f45aa404f360ed1f623c07362dcb2c2e26b0;hb=3d184d708cdbf864eb96c15e1a0f08b57c118009;hpb=7eae8c92fd40a050f9ce4a7132191fbcef810dc0 diff --git a/src/utils/unixsock.c b/src/utils/unixsock.c index 62b6f45..6f4d5cc 100644 --- a/src/utils/unixsock.c +++ b/src/utils/unixsock.c @@ -25,6 +25,10 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#if HAVE_CONFIG_H +# include "config.h" +#endif /* HAVE_CONFIG_H */ + #include "utils/error.h" #include "utils/unixsock.h" @@ -87,59 +91,6 @@ sdb_unixsock_get_column_count(const char *string, const char *delim) return count; } /* sdb_unixsock_get_column_count */ -static int -sdb_unixsock_parse_cell(char *string, int type, sdb_data_t *data) -{ - char *endptr = NULL; - - switch (type) { - case SDB_TYPE_INTEGER: - errno = 0; - data->data.integer = strtoll(string, &endptr, 0); - break; - case SDB_TYPE_DECIMAL: - errno = 0; - data->data.decimal = strtod(string, &endptr); - break; - case SDB_TYPE_STRING: - data->data.string = string; - break; - case SDB_TYPE_DATETIME: - { - double datetime = strtod(string, &endptr); - data->data.datetime = DOUBLE_TO_SDB_TIME(datetime); - } - break; - case SDB_TYPE_BINARY: - /* we don't support any binary information containing 0-bytes */ - data->data.binary.length = strlen(string); - data->data.binary.datum = (const unsigned char *)string; - break; - default: - sdb_log(SDB_LOG_ERR, "unixsock: Unexpected type %i while " - "parsing query result.", type); - return -1; - } - - if ((type == SDB_TYPE_INTEGER) || (type == SDB_TYPE_DECIMAL) - || (type == SDB_TYPE_DATETIME)) { - if (errno || (string == endptr)) { - char errbuf[1024]; - sdb_log(SDB_LOG_ERR, "unixsock: Failed to parse string " - "'%s' as numeric value (type %i): %s", string, type, - sdb_strerror(errno, errbuf, sizeof(errbuf))); - return -1; - } - else if (endptr && (*endptr != '\0')) - sdb_log(SDB_LOG_WARNING, "unixsock: Ignoring garbage after " - "number while parsing numeric value (type %i): %s.", - type, endptr); - } - - data->type = type; - return 0; -} /* sdb_unixsock_parse_cell */ - static int sdb_unixsock_client_process_one_line(sdb_unixsock_client_t *client, char *line, sdb_unixsock_client_data_cb callback, @@ -174,7 +125,7 @@ sdb_unixsock_client_process_one_line(sdb_unixsock_client_t *client, ++next; } - if (sdb_unixsock_parse_cell(line, + if (sdb_data_parse(line, types ? types[i] : SDB_TYPE_STRING, &data[i])) return -1;