diff --git a/src/utils/unixsock.c b/src/utils/unixsock.c
index 564aba70bab4c4a592e86da6bf4be93187f50513..256cf9f7ba7ed56f8917b9110acee9fefdfded15 100644 (file)
--- a/src/utils/unixsock.c
+++ b/src/utils/unixsock.c
*/
#include "utils/unixsock.h"
-#include "utils/string.h"
+#include "core/error.h"
#include <assert.h>
#include <errno.h>
data->data.binary.datum = (const unsigned char *)string;
break;
default:
- fprintf(stderr, "unixsock: Unexpected type %i while "
- "parsing query result.\n", type);
+ sdb_log(SDB_LOG_ERR, "unixsock: Unexpected type %i while "
+ "parsing query result.", type);
return -1;
}
|| (type == SDB_TYPE_DATETIME)) {
if (errno || (string == endptr)) {
char errbuf[1024];
- fprintf(stderr, "unixsock: Failed to parse string '%s' "
- "as numeric value (type %i): %s\n", string, type,
+ 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'))
- fprintf(stderr, "unixsock: Ignoring garbage after number "
- "while parsing numeric value (type %i): %s.\n",
+ sdb_log(SDB_LOG_WARNING, "unixsock: Ignoring garbage after "
+ "number while parsing numeric value (type %i): %s.",
type, endptr);
}
char *next;
if (! line) { /* this must no happen */
- fprintf(stderr, "unixsock: Unexpected EOL while parsing line "
- "(expected %i columns delimited by '%s'; got %i): %s\n",
- column_count, delim, /* last line number */ i, orig_line);
+ sdb_log(SDB_LOG_ERR, "unixsock: Unexpected EOL while "
+ "parsing line (expected %i columns delimited by '%s'; "
+ "got %i): %s", column_count, delim,
+ /* last line number */ i, orig_line);
return -1;
}
fd = socket(AF_UNIX, SOCK_STREAM, /* protocol = */ 0);
if (fd < 0) {
char errbuf[1024];
- fprintf(stderr, "unixsock: Failed to open socket: %s\n",
+ sdb_log(SDB_LOG_ERR, "unixsock: Failed to open socket: %s",
sdb_strerror(errno, errbuf, sizeof(errbuf)));
return -1;
}
if (connect(fd, (struct sockaddr *)&sa, sizeof(sa))) {
char errbuf[1024];
- fprintf(stderr, "unixsock: Failed to connect to %s: %s\n",
+ sdb_log(SDB_LOG_ERR, "unixsock: Failed to connect to %s: %s",
sa.sun_path, sdb_strerror(errno, errbuf, sizeof(errbuf)));
close(fd);
return -1;
client->fh = fdopen(fd, "r+");
if (! client->fh) {
char errbuf[1024];
- fprintf(stderr, "unixsock: Failed to open I/O stream for %s: %s\n",
- sa.sun_path, sdb_strerror(errno, errbuf, sizeof(errbuf)));
+ sdb_log(SDB_LOG_ERR, "unixsock: Failed to open I/O "
+ "stream for %s: %s", sa.sun_path,
+ sdb_strerror(errno, errbuf, sizeof(errbuf)));
close(fd);
return -1;
}
+ /* enable line-buffering */
+ setvbuf(client->fh, NULL, _IOLBF, 0);
+
client->shutdown = 0;
return 0;
} /* sdb_unixsock_client_connect */
status = fprintf(client->fh, "%s\r\n", msg);
if (status < 0) {
char errbuf[1024];
- fprintf(stderr, "unixsock: Failed to write to socket (%s): %s\n",
- client->path, sdb_strerror(errno, errbuf, sizeof(errbuf)));
+ sdb_log(SDB_LOG_ERR, "unixsock: Failed to write to "
+ "socket (%s): %s", client->path,
+ sdb_strerror(errno, errbuf, sizeof(errbuf)));
return status;
}
return status;
if (! buffer) {
if (! feof(client->fh)) {
char errbuf[1024];
- fprintf(stderr, "unixsock: Failed to read from socket (%s): %s\n",
- client->path, sdb_strerror(errno, errbuf, sizeof(errbuf)));
+ sdb_log(SDB_LOG_ERR, "unixsock: Failed to read "
+ "from socket (%s): %s", client->path,
+ sdb_strerror(errno, errbuf, sizeof(errbuf)));
}
return buffer;
}
types[i] = va_arg(ap, int);
if ((types[i] < 1) || (types[i] > SDB_TYPE_BINARY)) {
- fprintf(stderr, "unixsock: Unknown column type %i while "
- "processing response from the UNIX socket @ %s.\n",
- types[i], client->path);
+ sdb_log(SDB_LOG_ERR, "unixsock: Unknown column "
+ "type %i while processing response from the "
+ "UNIX socket @ %s.", types[i], client->path);
va_end(ap);
free(types);
return -1;
column_count = sdb_unixsock_get_column_count(line, delim);
if ((n_cols >= 0) && (n_cols != column_count)) {
- fprintf(stderr, "unixsock: number of columns (%i) does not "
- "match the number of requested columns (%i) while "
- "processing response from the UNIX socket @ %s: %s\n",
+ sdb_log(SDB_LOG_ERR, "unixsock: number of columns (%i) "
+ "does not match the number of requested columns (%i) "
+ "while processing response from the UNIX socket @ %s: %s",
column_count, n_cols, client->path, line);
continue;
}
|| ((max_lines < 0) && (! sdb_unixsock_client_eof(client)))
|| sdb_unixsock_client_error(client)) {
char errbuf[1024];
- fprintf(stderr, "unixsock: Unexpected end of data while reading "
- "from socket (%s): %s\n", client->path,
+ sdb_log(SDB_LOG_ERR, "unixsock: Unexpected end of data while "
+ "reading from socket (%s): %s", client->path,
sdb_strerror(errno, errbuf, sizeof(errbuf)));
return -1;
}