X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Ffilecount.c;h=5acd47b3339e99d259fce8a9c1c5513e987f2b5a;hp=5b812b88ed3272f6039651b9b749fff294cb57b3;hb=54619dc85fd308b21ed09a0271e5c7383c7921b9;hpb=2ec16cfeb86629a81a6942deb9b7e3c1b1711e02 diff --git a/src/filecount.c b/src/filecount.c index 5b812b88..5acd47b3 100644 --- a/src/filecount.c +++ b/src/filecount.c @@ -23,8 +23,8 @@ #include "collectd.h" -#include "common.h" #include "plugin.h" +#include "utils/common/common.h" #include #include @@ -34,6 +34,7 @@ #define FC_RECURSIVE 1 #define FC_HIDDEN 2 +#define FC_REGULAR 4 struct fc_directory_conf_s { char *path; @@ -59,10 +60,10 @@ struct fc_directory_conf_s { }; typedef struct fc_directory_conf_s fc_directory_conf_t; -static fc_directory_conf_t **directories = NULL; -static size_t directories_num = 0; +static fc_directory_conf_t **directories; +static size_t directories_num; -void fc_free_dir(fc_directory_conf_t *dir) { +static void fc_free_dir(fc_directory_conf_t *dir) { sfree(dir->path); sfree(dir->plugin_name); sfree(dir->instance); @@ -153,26 +154,6 @@ static int fc_config_add_dir_instance(fc_directory_conf_t *dir, return fc_config_set_instance(dir, ci->values[0].value.string); } /* int fc_config_add_dir_instance */ -static int fc_config_add_dir_name(fc_directory_conf_t *dir, - oconfig_item_t *ci) { - if ((ci->values_num != 1) || (ci->values[0].type != OCONFIG_TYPE_STRING)) { - WARNING("filecount plugin: The `Name' config option needs exactly one " - "string argument."); - return -1; - } - - char *temp = strdup(ci->values[0].value.string); - if (temp == NULL) { - ERROR("filecount plugin: strdup failed."); - return -1; - } - - sfree(dir->name); - dir->name = temp; - - return 0; -} /* int fc_config_add_dir_name */ - static int fc_config_add_dir_mtime(fc_directory_conf_t *dir, oconfig_item_t *ci) { if ((ci->values_num != 1) || ((ci->values[0].type != OCONFIG_TYPE_STRING) && @@ -340,7 +321,7 @@ static int fc_config_add_dir(oconfig_item_t *ci) { return -1; } - dir->options = FC_RECURSIVE; + dir->options = FC_RECURSIVE | FC_REGULAR; dir->name = NULL; dir->plugin_name = strdup("filecount"); @@ -368,7 +349,7 @@ static int fc_config_add_dir(oconfig_item_t *ci) { else if (strcasecmp("Instance", option->key) == 0) status = fc_config_add_dir_instance(dir, option); else if (strcasecmp("Name", option->key) == 0) - status = fc_config_add_dir_name(dir, option); + status = cf_util_get_string(option, &dir->name); else if (strcasecmp("MTime", option->key) == 0) status = fc_config_add_dir_mtime(dir, option); else if (strcasecmp("Size", option->key) == 0) @@ -377,6 +358,8 @@ static int fc_config_add_dir(oconfig_item_t *ci) { status = fc_config_add_dir_option(dir, option, FC_RECURSIVE); else if (strcasecmp("IncludeHidden", option->key) == 0) status = fc_config_add_dir_option(dir, option, FC_HIDDEN); + else if (strcasecmp("RegularOnly", option->key) == 0) + status = fc_config_add_dir_option(dir, option, FC_REGULAR); else if (strcasecmp("FilesSizeType", option->key) == 0) status = cf_util_get_string(option, &dir->files_size_type); else if (strcasecmp("FilesCountType", option->key) == 0) @@ -488,7 +471,7 @@ static int fc_read_dir_callback(const char *dirname, const char *filename, abs_path, fc_read_dir_callback, dir, /* include hidden = */ (dir->options & FC_HIDDEN) ? 1 : 0); return status; - } else if (!S_ISREG(statbuf.st_mode)) { + } else if ((dir->options & FC_REGULAR) && !S_ISREG(statbuf.st_mode)) { return 0; } @@ -498,6 +481,11 @@ static int fc_read_dir_callback(const char *dirname, const char *filename, return 0; } + if (!S_ISREG(statbuf.st_mode)) { + dir->files_num++; + return 0; + } + if (dir->mtime != 0) { time_t mtime = dir->now;