X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Flibcollectdclient%2Fclient.c;h=4dbee1e8d56d17d2fe38b862b397d61b2aa49a9b;hb=f43d1b843bc886fa4180d505a216a3f5c64b2d41;hp=0f56bd239891fc3e35b4ddd76461074994356c22;hpb=65c20e41cfad6e7ab024983f561835fd347124ce;p=collectd.git diff --git a/src/libcollectdclient/client.c b/src/libcollectdclient/client.c index 0f56bd23..4dbee1e8 100644 --- a/src/libcollectdclient/client.c +++ b/src/libcollectdclient/client.c @@ -36,6 +36,7 @@ #include #include +#include #include #include #include @@ -91,12 +92,6 @@ (c)->errbuf[sizeof ((c)->errbuf) - 1] = 0; \ } while (0) -#if COLLECT_DEBUG -# define LCC_DEBUG(...) printf (__VA_ARGS__) -#else -# define LCC_DEBUG(...) /**/ -#endif - /* * Types */ @@ -118,6 +113,23 @@ typedef struct lcc_response_s lcc_response_t; /* * Private functions */ +__attribute__ ((format (printf, 1, 0))) +static int lcc_tracef(char const *format, ...) +{ + va_list ap; + int status; + + char const *trace = getenv (LCC_TRACE_ENV); + if (!trace || (strcmp ("", trace) == 0) || (strcmp ("0", trace) == 0)) + return 0; + + va_start (ap, format); + status = vprintf (format, ap); + va_end (ap); + + return status; +} + /* Even though Posix requires "strerror_r" to return an "int", * some systems (e.g. the GNU libc) return a "char *" _and_ * ignore the second argument ... -tokkee */ @@ -235,12 +247,10 @@ static void lcc_chomp (char *str) /* {{{ */ static void lcc_response_free (lcc_response_t *res) /* {{{ */ { - size_t i; - if (res == NULL) return; - for (i = 0; i < res->lines_num; i++) + for (size_t i = 0; i < res->lines_num; i++) free (res->lines[i]); free (res->lines); res->lines = NULL; @@ -250,7 +260,7 @@ static int lcc_send (lcc_connection_t *c, const char *command) /* {{{ */ { int status; - LCC_DEBUG ("send: --> %s\n", command); + lcc_tracef ("send: --> %s\n", command); status = fprintf (c->fh, "%s\r\n", command); if (status < 0) @@ -266,13 +276,11 @@ static int lcc_send (lcc_connection_t *c, const char *command) /* {{{ */ static int lcc_receive (lcc_connection_t *c, /* {{{ */ lcc_response_t *ret_res) { - lcc_response_t res; + lcc_response_t res = { 0 }; char *ptr; char buffer[4096]; size_t i; - memset (&res, 0, sizeof (res)); - /* Read the first line, containing the status and a message */ ptr = fgets (buffer, sizeof (buffer), c->fh); if (ptr == NULL) @@ -281,13 +289,13 @@ static int lcc_receive (lcc_connection_t *c, /* {{{ */ return (-1); } lcc_chomp (buffer); - LCC_DEBUG ("receive: <-- %s\n", buffer); + lcc_tracef ("receive: <-- %s\n", buffer); /* Convert the leading status to an integer and make `ptr' to point to the * beginning of the message. */ ptr = NULL; errno = 0; - res.status = strtol (buffer, &ptr, 0); + res.status = (int) strtol (buffer, &ptr, 0); if ((errno != 0) || (ptr == &buffer[0])) { lcc_set_errno (c, errno); @@ -312,7 +320,7 @@ static int lcc_receive (lcc_connection_t *c, /* {{{ */ /* Allocate space for the char-pointers */ res.lines_num = (size_t) res.status; res.status = 0; - res.lines = (char **) malloc (res.lines_num * sizeof (char *)); + res.lines = malloc (res.lines_num * sizeof (*res.lines)); if (res.lines == NULL) { lcc_set_errno (c, ENOMEM); @@ -329,7 +337,7 @@ static int lcc_receive (lcc_connection_t *c, /* {{{ */ break; } lcc_chomp (buffer); - LCC_DEBUG ("receive: <-- %s\n", buffer); + lcc_tracef ("receive: <-- %s\n", buffer); res.lines[i] = strdup (buffer); if (res.lines[i] == NULL) @@ -358,7 +366,7 @@ static int lcc_receive (lcc_connection_t *c, /* {{{ */ static int lcc_sendreceive (lcc_connection_t *c, /* {{{ */ const char *command, lcc_response_t *ret_res) { - lcc_response_t res; + lcc_response_t res = { 0 }; int status; if (c->fh == NULL) @@ -371,7 +379,6 @@ static int lcc_sendreceive (lcc_connection_t *c, /* {{{ */ if (status != 0) return (status); - memset (&res, 0, sizeof (res)); status = lcc_receive (c, &res); if (status == 0) memcpy (ret_res, &res, sizeof (*ret_res)); @@ -381,7 +388,7 @@ static int lcc_sendreceive (lcc_connection_t *c, /* {{{ */ static int lcc_open_unixsocket (lcc_connection_t *c, const char *path) /* {{{ */ { - struct sockaddr_un sa; + struct sockaddr_un sa = { 0 }; int fd; int status; @@ -398,7 +405,6 @@ static int lcc_open_unixsocket (lcc_connection_t *c, const char *path) /* {{{ */ return (-1); } - memset (&sa, 0, sizeof (sa)); sa.sun_family = AF_UNIX; strncpy (sa.sun_path, path, sizeof (sa.sun_path) - 1); @@ -424,9 +430,7 @@ static int lcc_open_unixsocket (lcc_connection_t *c, const char *path) /* {{{ */ static int lcc_open_netsocket (lcc_connection_t *c, /* {{{ */ const char *addr_orig) { - struct addrinfo ai_hints; struct addrinfo *ai_res; - struct addrinfo *ai_ptr; char addr_copy[NI_MAXHOST]; char *addr; char *port; @@ -441,14 +445,6 @@ static int lcc_open_netsocket (lcc_connection_t *c, /* {{{ */ addr_copy[sizeof(addr_copy) - 1] = '\0'; addr = addr_copy; - memset (&ai_hints, 0, sizeof (ai_hints)); - ai_hints.ai_flags = 0; -#ifdef AI_ADDRCONFIG - ai_hints.ai_flags |= AI_ADDRCONFIG; -#endif - ai_hints.ai_family = AF_UNSPEC; - ai_hints.ai_socktype = SOCK_STREAM; - port = NULL; if (*addr == '[') /* IPv6+port format */ { @@ -484,7 +480,12 @@ static int lcc_open_netsocket (lcc_connection_t *c, /* {{{ */ } } - ai_res = NULL; + struct addrinfo ai_hints = { + .ai_family = AF_UNSPEC, + .ai_flags = AI_ADDRCONFIG, + .ai_socktype = SOCK_STREAM + }; + status = getaddrinfo (addr, port == NULL ? LCC_DEFAULT_PORT : port, &ai_hints, &ai_res); @@ -494,7 +495,7 @@ static int lcc_open_netsocket (lcc_connection_t *c, /* {{{ */ return (-1); } - for (ai_ptr = ai_res; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) + for (struct addrinfo *ai_ptr = ai_res; ai_ptr != NULL; ai_ptr = ai_ptr->ai_next) { fd = socket (ai_ptr->ai_family, ai_ptr->ai_socktype, ai_ptr->ai_protocol); if (fd < 0) @@ -584,10 +585,9 @@ int lcc_connect (const char *address, lcc_connection_t **ret_con) /* {{{ */ if (ret_con == NULL) return (-1); - c = (lcc_connection_t *) malloc (sizeof (*c)); + c = calloc (1, sizeof (*c)); if (c == NULL) return (-1); - memset (c, 0, sizeof (*c)); status = lcc_open_socket (c, address); if (status != 0) @@ -687,14 +687,14 @@ int lcc_getval (lcc_connection_t *c, lcc_identifier_t *ident, /* {{{ */ /* Allocate space for the values */ if (ret_values != NULL) { - values = (gauge_t *) malloc (values_num * sizeof (*values)); + values = malloc (values_num * sizeof (*values)); if (values == NULL) BAIL_OUT (ENOMEM); } if (ret_values_names != NULL) { - values_names = (char **) calloc (values_num, sizeof (*values_names)); + values_names = calloc (values_num, sizeof (*values_names)); if (values_names == NULL) BAIL_OUT (ENOMEM); } @@ -750,7 +750,6 @@ int lcc_putval (lcc_connection_t *c, const lcc_value_list_t *vl) /* {{{ */ char command[1024] = ""; lcc_response_t res; int status; - size_t i; if ((c == NULL) || (vl == NULL) || (vl->values_len < 1) || (vl->values == NULL) || (vl->values_types == NULL)) @@ -775,7 +774,7 @@ int lcc_putval (lcc_connection_t *c, const lcc_value_list_t *vl) /* {{{ */ else SSTRCAT (command, " N"); - for (i = 0; i < vl->values_len; i++) + for (size_t i = 0; i < vl->values_len; i++) { if (vl->values_types[i] == LCC_TYPE_COUNTER) SSTRCATF (command, ":%"PRIu64, vl->values[i].counter); @@ -867,7 +866,6 @@ int lcc_listval (lcc_connection_t *c, /* {{{ */ lcc_identifier_t **ret_ident, size_t *ret_ident_num) { lcc_response_t res; - size_t i; int status; lcc_identifier_t *ident; @@ -894,7 +892,7 @@ int lcc_listval (lcc_connection_t *c, /* {{{ */ } ident_num = res.lines_num; - ident = (lcc_identifier_t *) malloc (ident_num * sizeof (*ident)); + ident = malloc (ident_num * sizeof (*ident)); if (ident == NULL) { lcc_response_free (&res); @@ -902,7 +900,7 @@ int lcc_listval (lcc_connection_t *c, /* {{{ */ return (-1); } - for (i = 0; i < res.lines_num; i++) + for (size_t i = 0; i < res.lines_num; i++) { char *time_str; char *ident_str; @@ -1063,9 +1061,11 @@ int lcc_string_to_identifier (lcc_connection_t *c, /* {{{ */ return (0); } /* }}} int lcc_string_to_identifier */ -int lcc_identifier_compare (const lcc_identifier_t *i0, /* {{{ */ - const lcc_identifier_t *i1) +int lcc_identifier_compare (const void *a, /* {{{ */ + const void *b) { + const lcc_identifier_t *i0 = a; + const lcc_identifier_t *i1 = b; int status; if ((i0 == NULL) && (i1 == NULL)) @@ -1102,7 +1102,7 @@ int lcc_sort_identifiers (lcc_connection_t *c, /* {{{ */ } qsort (idents, idents_num, sizeof (*idents), - (void *) lcc_identifier_compare); + lcc_identifier_compare); return (0); } /* }}} int lcc_sort_identifiers */