X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fcommon.c;h=119d284fdfd2d72d94e98220953151d33ea256ff;hb=074b4980bc75bea6826e6a38dcc6e193a721b2a8;hp=fd7c19938e7119f1a9f8347059b9c4d85d86d04c;hpb=5e700757575fa6606cf201947cb0efb57ce12e6d;p=collectd.git diff --git a/src/common.c b/src/common.c index fd7c1993..119d284f 100644 --- a/src/common.c +++ b/src/common.c @@ -537,12 +537,12 @@ long long get_kstat_value (kstat_t *ksp, char *name) #else if (ksp == NULL) { - fprintf (stderr, "ERROR: %s:%i: ksp == NULL\n", __FILE__, __LINE__); + ERROR ("ERROR: %s:%i: ksp == NULL\n", __FILE__, __LINE__); return (-1LL); } else if (ksp->ks_type != KSTAT_TYPE_NAMED) { - fprintf (stderr, "ERROR: %s:%i: ksp->ks_type != KSTAT_TYPE_NAMED\n", __FILE__, __LINE__); + ERROR ("ERROR: %s:%i: ksp->ks_type != KSTAT_TYPE_NAMED\n", __FILE__, __LINE__); return (-1LL); } #endif @@ -865,32 +865,44 @@ 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) +int walk_directory (const char *dir, dirwalk_callback_f callback, + void *user_data) { struct dirent *ent; DIR *dh; - int ok = 0; + int success; + int failure; + + success = 0; + failure = 0; if ((dh = opendir (dir)) == NULL) { char errbuf[1024]; - ERROR ("Cannot open '%s': %s", dir, + ERROR ("walk_directory: Cannot open '%s': %s", dir, sstrerror (errno, errbuf, sizeof (errbuf))); return -1; } while ((ent = readdir (dh)) != NULL) { + int status; + if (ent->d_name[0] == '.') continue; - if (!callback(ent->d_name)) - ++ok; + status = (*callback) (dir, ent->d_name, user_data); + if (status != 0) + failure++; + else + success++; } closedir (dh); - return ok ? 0 : -1; + if ((success == 0) && (failure > 0)) + return (-1); + return (0); } int read_file_contents (const char *filename, char *buf, int bufsize)