# include <pthread.h>
#endif
-#include <sys/socket.h>
#include <sys/un.h>
#include <sys/select.h>
break;
continue;
}
+ if (len < 3) { /* [a-z] ':' '\n' */
+ continue;
+ }
- line[len - 1] = '\0';
+ line[len - 1] = 0;
log_debug ("collect: line = '%s'", line);
bytes = atoi (tmp);
pthread_mutex_lock (&count_mutex);
- type_list_incr (&list_count, type, 1);
+ type_list_incr (&list_count, type, /* increment = */ 1);
pthread_mutex_unlock (&count_mutex);
if (bytes > 0) {
pthread_mutex_lock (&size_mutex);
- type_list_incr (&list_size, type, bytes);
+ type_list_incr (&list_size, type, /* increment = */ bytes);
pthread_mutex_unlock (&size_mutex);
}
}
pthread_mutex_unlock (&score_mutex);
}
else if ('c' == line[0]) { /* c:<type1>[,<type2>,...] */
- char *ptr = NULL;
- char *type = strtok_r (line + 2, ",", &ptr);
-
- do {
- pthread_mutex_lock (&check_mutex);
- type_list_incr (&list_check, type, 1);
- pthread_mutex_unlock (&check_mutex);
- } while (NULL != (type = strtok_r (NULL, ",", &ptr)));
+ char *dummy = line + 2;
+ char *endptr = NULL;
+ char *type;
+
+ pthread_mutex_lock (&check_mutex);
+ while ((type = strtok_r (dummy, ",", &endptr)) != NULL)
+ {
+ dummy = NULL;
+ type_list_incr (&list_check, type, /* increment = */ 1);
+ }
+ pthread_mutex_unlock (&check_mutex);
}
else {
log_err ("collect: unknown type '%c'", line[0]);
{
struct sockaddr_un addr;
- char *path = (NULL == sock_file) ? SOCK_PATH : sock_file;
- char *group = (NULL == sock_group) ? COLLECTD_GRP_NAME : sock_group;
+ const char *path = (NULL == sock_file) ? SOCK_PATH : sock_file;
+ const char *group = (NULL == sock_group) ? COLLECTD_GRP_NAME : sock_group;
/* create UNIX socket */
errno = 0;
pthread_mutex_unlock (&available_mutex);
- do {
+ while (42) {
errno = 0;
- if (-1 == (remote = accept (connector_socket, NULL, NULL))) {
- if (EINTR != errno) {
- char errbuf[1024];
- disabled = 1;
- close (connector_socket);
- connector_socket = -1;
- log_err ("accept() failed: %s",
- sstrerror (errno, errbuf, sizeof (errbuf)));
- pthread_exit ((void *)1);
- }
+
+ remote = accept (connector_socket, NULL, NULL);
+ if (remote == -1) {
+ char errbuf[1024];
+
+ if (errno == EINTR)
+ continue;
+
+ disabled = 1;
+ close (connector_socket);
+ connector_socket = -1;
+ log_err ("accept() failed: %s",
+ sstrerror (errno, errbuf, sizeof (errbuf)));
+ pthread_exit ((void *)1);
}
- } while (EINTR == errno);
- connection = (conn_t *)smalloc (sizeof (conn_t));
+ /* access() succeeded. */
+ break;
+ }
+
+ connection = malloc (sizeof (*connection));
+ if (connection == NULL)
+ {
+ close (remote);
+ continue;
+ }
+ memset (connection, 0, sizeof (*connection));
connection->socket = fdopen (remote, "r");
connection->next = NULL;
if (NULL == connection->socket) {
close (remote);
+ sfree (connection);
continue;
}