diff --git a/src/filecount.c b/src/filecount.c
index 2f10912bff96d9e77d8935e6f16a132e24395030..47f99e91c8e3df2a502208ba6f99f6596afe10e1 100644 (file)
--- a/src/filecount.c
+++ b/src/filecount.c
#include <dirent.h>
#include <fnmatch.h>
+#define FC_RECURSIVE 1
+#define FC_HIDDEN 2
+
struct fc_directory_conf_s
{
char *path;
char *instance;
+ int options;
+
/* Data counters */
uint64_t files_num;
uint64_t files_size;
vl.values = values;
vl.values_len = STATIC_ARRAY_SIZE (values);
- vl.time = time (NULL);
sstrncpy (vl.host, hostname_g, sizeof (vl.host));
sstrncpy (vl.plugin, "filecount", sizeof (vl.plugin));
sstrncpy (vl.plugin_instance, dir->instance, sizeof (vl.plugin_instance));
sstrncpy (vl.type, "bytes", sizeof (vl.type));
plugin_dispatch_values (&vl);
-} /* void qmail_submit */
+} /* void fc_submit_dir */
/*
* Config:
char *ptr;
char *copy;
- strncpy (buffer, str, sizeof (buffer));
+ sstrncpy (buffer, str, sizeof (buffer));
for (ptr = buffer; *ptr != 0; ptr++)
if (*ptr == '/')
*ptr = '_';
return (0);
} /* int fc_config_add_dir_size */
+static int fc_config_add_dir_option (fc_directory_conf_t *dir,
+ oconfig_item_t *ci, int bit)
+{
+ if ((ci->values_num != 1)
+ || (ci->values[0].type != OCONFIG_TYPE_BOOLEAN))
+ {
+ WARNING ("filecount plugin: The `Recursive' config options needs exactly "
+ "one boolean argument.");
+ return (-1);
+ }
+
+ if (ci->values[0].value.boolean)
+ dir->options |= bit;
+ else
+ dir->options &= ~bit;
+
+ return (0);
+} /* int fc_config_add_dir_option */
+
static int fc_config_add_dir (oconfig_item_t *ci)
{
fc_directory_conf_t *dir;
fc_config_set_instance (dir, dir->path);
+ dir->options = FC_RECURSIVE;
+
dir->name = NULL;
dir->mtime = 0;
dir->size = 0;
status = fc_config_add_dir_mtime (dir, option);
else if (strcasecmp ("Size", option->key) == 0)
status = fc_config_add_dir_size (dir, option);
+ else if (strcasecmp ("Recursive", option->key) == 0)
+ 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
{
WARNING ("filecount plugin: fc_config_add_dir: "
fc_directory_conf_t **temp;
temp = (fc_directory_conf_t **) realloc (directories,
- sizeof (*directories) * directories_num);
+ sizeof (*directories) * (directories_num + 1));
if (temp == NULL)
{
ERROR ("filecount plugin: realloc failed.");
} /* for (ci->children) */
return (0);
-} /* int qmail_config */
+} /* int fc_config */
static int fc_init (void)
{
return (-1);
}
- if (S_ISDIR (statbuf.st_mode))
+ if (S_ISDIR (statbuf.st_mode) && (dir->options & FC_RECURSIVE))
{
- status = walk_directory (abs_path, fc_read_dir_callback, dir);
+ status = walk_directory (abs_path, fc_read_dir_callback, dir,
+ /* include hidden = */ (dir->options & FC_HIDDEN) ? 1 : 0);
return (status);
}
else if (!S_ISREG (statbuf.st_mode))
if (dir->mtime != 0)
dir->now = time (NULL);
-
- status = walk_directory (dir->path, fc_read_dir_callback, dir);
+
+ status = walk_directory (dir->path, fc_read_dir_callback, dir,
+ /* include hidden */ (dir->options & FC_HIDDEN) ? 1 : 0);
if (status != 0)
{
WARNING ("filecount plugin: walk_directory (%s) failed.", dir->path);