**/
#include "common.h"
-#include "utils_debug.h"
+#include "plugin.h"
#ifdef HAVE_MATH_H
# include <math.h>
if((r = strdup (s)) == NULL)
{
- DBG ("Not enough memory.");
+ DEBUG ("Not enough memory.");
exit(3);
}
return (r);
}
+/* Don't use the return value of `strerror_r', because the GNU-people got
+ * inventive there.. -octo */
+char *sstrerror (int errnum, char *buf, size_t buflen)
+{
+ buf[0] = '\0';
+ strerror_r (errnum, buf, buflen);
+ return (buf);
+} /* char *sstrerror */
+
void *smalloc (size_t size)
{
void *r;
if ((r = malloc (size)) == NULL)
{
- DBG("Not enough memory.");
+ DEBUG("Not enough memory.");
exit(3);
}
if (status == 0)
{
- DBG ("Received EOF from fd %i. "
+ DEBUG ("Received EOF from fd %i. "
"Closing fd and returning error.",
fd);
close (fd);
{
size_t i;
char *ptr;
+ char *saveptr;
i = 0;
ptr = string;
- while ((fields[i] = strtok (ptr, " \t")) != NULL)
+ saveptr = NULL;
+ while ((fields[i] = strtok_r (ptr, " \t", &saveptr)) != NULL)
{
ptr = NULL;
i++;
char *fields[16];
int fields_num;
char *ptr;
+ char *saveptr;
int last_is_file = 1;
+ int path_is_absolute = 0;
int len;
int i;
*/
if (file_orig[len - 1] == '/')
last_is_file = 0;
+ if (file_orig[0] == '/')
+ path_is_absolute = 1;
/*
- * Create a copy for `strtok' to destroy
+ * Create a copy for `strtok_r' to destroy
*/
strncpy (file_copy, file_orig, 512);
file_copy[511] = '\0';
* remove leading and trailing slashes..
*/
ptr = file_copy;
+ saveptr = NULL;
fields_num = 0;
- while ((fields[fields_num] = strtok (ptr, "/")) != NULL)
+ while ((fields[fields_num] = strtok_r (ptr, "/", &saveptr)) != NULL)
{
ptr = NULL;
fields_num++;
*/
if (fields[i][0] == '.')
{
- syslog (LOG_ERR, "Cowardly refusing to create a directory that begins with a `.' (dot): `%s'", file_orig);
+ ERROR ("Cowardly refusing to create a directory that begins with a `.' (dot): `%s'", file_orig);
return (-2);
}
/*
* Join the components together again
*/
- if (strjoin (dir, dir_len, fields, i + 1, "/") < 0)
+ dir[0] = '/';
+ if (strjoin (dir + path_is_absolute, dir_len - path_is_absolute,
+ fields, i + 1, "/") < 0)
{
- syslog (LOG_ERR, "strjoin failed: `%s', component #%i", file_orig, i);
+ ERROR ("strjoin failed: `%s', component #%i", file_orig, i);
return (-1);
}
{
if (mkdir (dir, 0755) == -1)
{
- syslog (LOG_ERR, "mkdir (%s): %s", dir, strerror (errno));
+ char errbuf[1024];
+ ERROR ("mkdir (%s): %s", dir,
+ sstrerror (errno,
+ errbuf, sizeof (errbuf)));
return (-1);
}
}
else
{
- syslog (LOG_ERR, "stat (%s): %s", dir, strerror (errno));
+ char errbuf[1024];
+ ERROR ("stat (%s): %s", dir,
+ sstrerror (errno, errbuf,
+ sizeof (errbuf)));
return (-1);
}
}
else if (!S_ISDIR (statbuf.st_mode))
{
- syslog (LOG_ERR, "stat (%s): Not a directory!", dir);
+ ERROR ("stat (%s): Not a directory!", dir);
return (-1);
}
}
{
if ((*ksp_ptr = kstat_lookup (kc, module, instance, name)) == NULL)
{
- syslog (LOG_ERR, "Cound not find kstat %s", ident);
+ ERROR ("Cound not find kstat %s", ident);
return (-1);
}
if ((*ksp_ptr)->ks_type != KSTAT_TYPE_NAMED)
{
- syslog (LOG_WARNING, "kstat %s has wrong type", ident);
+ WARNING ("kstat %s has wrong type", ident);
*ksp_ptr = NULL;
return (-1);
}
if (kstat_read (kc, *ksp_ptr, NULL) == -1)
{
- syslog (LOG_WARNING, "kstat %s could not be read", ident);
+ WARNING ("kstat %s could not be read", ident);
return (-1);
}
if ((*ksp_ptr)->ks_type != KSTAT_TYPE_NAMED)
{
- syslog (LOG_WARNING, "kstat %s has wrong type", ident);
+ WARNING ("kstat %s has wrong type", ident);
return (-1);
}
else if (kn->data_type == KSTAT_DATA_UINT64)
retval = (long long) kn->value.ui64; /* XXX: Might overflow! */
else
- syslog (LOG_WARNING, "get_kstat_value: Not a numeric value: %s", name);
+ WARNING ("get_kstat_value: Not a numeric value: %s", name);
return (retval);
}
#else
return (((unsigned long long) ntohl (n)) << 32) + ntohl (n >> 32);
#endif
-}
+} /* unsigned long long ntohll */
unsigned long long htonll (unsigned long long n)
{
#else
return (((unsigned long long) htonl (n)) << 32) + htonl (n >> 32);
#endif
-}
+} /* unsigned long long htonll */
+
+int format_name (char *ret, int ret_len,
+ const char *hostname,
+ const char *plugin, const char *plugin_instance,
+ const char *type, const char *type_instance)
+{
+ int status;
+
+ assert (plugin != NULL);
+ assert (type != NULL);
+
+ if ((plugin_instance == NULL) || (strlen (plugin_instance) == 0))
+ {
+ if ((type_instance == NULL) || (strlen (type_instance) == 0))
+ status = snprintf (ret, ret_len, "%s/%s/%s",
+ hostname, plugin, type);
+ else
+ status = snprintf (ret, ret_len, "%s/%s/%s-%s",
+ hostname, plugin, type,
+ type_instance);
+ }
+ else
+ {
+ if ((type_instance == NULL) || (strlen (type_instance) == 0))
+ status = snprintf (ret, ret_len, "%s/%s-%s/%s",
+ hostname, plugin, plugin_instance,
+ type);
+ else
+ status = snprintf (ret, ret_len, "%s/%s-%s/%s-%s",
+ hostname, plugin, plugin_instance,
+ type, type_instance);
+ }
+
+ if ((status < 1) || (status >= ret_len))
+ return (-1);
+ return (0);
+} /* int format_name */