X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fcommon.c;h=fd7c19938e7119f1a9f8347059b9c4d85d86d04c;hb=5e700757575fa6606cf201947cb0efb57ce12e6d;hp=3f6eecc363bde456e6dec8a96e79c14610e86031;hpb=4e6812d3e5073e5b4bd7eaef9f2539c8c9dd28a4;p=collectd.git diff --git a/src/common.c b/src/common.c index 3f6eecc3..fd7c1993 100644 --- a/src/common.c +++ b/src/common.c @@ -83,12 +83,12 @@ char *sstrdup (const char *s) if((r = strdup (s)) == NULL) { - DEBUG ("Not enough memory."); - exit(3); + ERROR ("Not enough memory."); + exit (3); } return (r); -} +} /* char *sstrdup */ /* Even though Posix requires "strerror_r" to return an "int", * some systems (e.g. the GNU libc) return a "char *" _and_ @@ -143,12 +143,12 @@ void *smalloc (size_t size) if ((r = malloc (size)) == NULL) { - DEBUG("Not enough memory."); - exit(3); + ERROR ("Not enough memory."); + exit (3); } - return r; -} + return (r); +} /* void *smalloc */ #if 0 void sfree (void **ptr) @@ -236,7 +236,7 @@ int strsplit (char *string, char **fields, size_t size) i = 0; ptr = string; saveptr = NULL; - while ((fields[i] = strtok_r (ptr, " \t", &saveptr)) != NULL) + while ((fields[i] = strtok_r (ptr, " \t\r\n", &saveptr)) != NULL) { ptr = NULL; i++; @@ -864,3 +864,47 @@ int notification_init (notification_t *n, int severity, const char *message, return (0); } /* int notification_init */ + +int walk_directory (const char *dir, dirwalk_callback_f callback) +{ + struct dirent *ent; + DIR *dh; + int ok = 0; + + if ((dh = opendir (dir)) == NULL) + { + char errbuf[1024]; + ERROR ("Cannot open '%s': %s", dir, + sstrerror (errno, errbuf, sizeof (errbuf))); + return -1; + } + + while ((ent = readdir (dh)) != NULL) + { + if (ent->d_name[0] == '.') + continue; + + if (!callback(ent->d_name)) + ++ok; + } + + closedir (dh); + + return ok ? 0 : -1; +} + +int read_file_contents (const char *filename, char *buf, int bufsize) +{ + FILE *fh; + int n; + + if ((fh = fopen (filename, "r")) == NULL) + return -1; + + n = fread(buf, 1, bufsize, fh); + fclose(fh); + + return n; +} + +