X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Fdaemon%2Fcommon.h;h=db1b4650fc212258257be6631e32fc83d391e597;hp=2a0b9ee7f79a1da33ff1b4aba741280495ca91a8;hb=06a86a60a7dabc685bdbd81ce3d36ea5f7e2c2d4;hpb=f1b6145ce2bf1bc5061c4aafcf63e90bdc6b8b5c diff --git a/src/daemon/common.h b/src/daemon/common.h index 2a0b9ee7..db1b4650 100644 --- a/src/daemon/common.h +++ b/src/daemon/common.h @@ -66,9 +66,6 @@ typedef struct value_to_rate_state_s value_to_rate_state_t; char *sstrncpy(char *dest, const char *src, size_t n); -__attribute__((format(printf, 3, 4))) int ssnprintf(char *dest, size_t n, - const char *format, ...); - __attribute__((format(printf, 1, 2))) char *ssnprintf_alloc(char const *format, ...); @@ -76,14 +73,20 @@ char *sstrdup(const char *s); void *smalloc(size_t size); char *sstrerror(int errnum, char *buf, size_t buflen); +#ifndef ERRBUF_SIZE +#define ERRBUF_SIZE 256 +#endif + +#define STRERROR(e) sstrerror((e), (char[ERRBUF_SIZE]){0}, ERRBUF_SIZE) +#define STRERRNO STRERROR(errno) + /* * NAME * sread * * DESCRIPTION * Reads exactly `n' bytes or fails. Syntax and other behavior is analogous - * to `read(2)'. If EOF is received the file descriptor is closed and an - * error is returned. + * to `read(2)'. * * PARAMETERS * `fd' File descriptor to write to. @@ -94,7 +97,7 @@ char *sstrerror(int errnum, char *buf, size_t buflen); * Zero upon success or non-zero if an error occurred. `errno' is set in this * case. */ -ssize_t sread(int fd, void *buf, size_t count); +int sread(int fd, void *buf, size_t count); /* * NAME @@ -113,7 +116,7 @@ ssize_t sread(int fd, void *buf, size_t count); * Zero upon success or non-zero if an error occurred. `errno' is set in this * case. */ -ssize_t swrite(int fd, const void *buf, size_t count); +int swrite(int fd, const void *buf, size_t count); /* * NAME @@ -145,10 +148,12 @@ int strsplit(char *string, char **fields, size_t size); * is equivalent to the Perl built-in `join'. * * PARAMETERS - * `dst' Buffer where the result is stored. + * `dst' Buffer where the result is stored. Can be NULL if you need to + * determine the required buffer size only. * `dst_len' Length of the destination buffer. No more than this many * bytes will be written to the memory pointed to by `dst', - * including the trailing null-byte. + * including the trailing null-byte. Must be zero if dst is + * NULL. * `fields' Array of strings to be joined. * `fields_num' Number of elements in the `fields' array. * `sep' String to be inserted between any two elements of `fields'. @@ -156,9 +161,10 @@ int strsplit(char *string, char **fields, size_t size); * Instead of passing "" (empty string) one can pass NULL. * * RETURN VALUE - * Returns the number of characters in `dst', NOT including the trailing - * null-byte. If an error occurred (empty array or `dst' too small) a value - * smaller than zero will be returned. + * Returns the number of characters in the resulting string, excluding a + * tailing null byte. If this value is greater than or equal to "dst_len", the + * result in "dst" is truncated (but still null terminated). On error a + * negative value is returned. */ int strjoin(char *dst, size_t dst_len, char **fields, size_t fields_num, const char *sep); @@ -283,6 +289,9 @@ int timeval_cmp(struct timeval tv0, struct timeval tv1, struct timeval *delta); int check_create_dir(const char *file_orig); #ifdef HAVE_LIBKSTAT +#if HAVE_KSTAT_H +#include +#endif int get_kstat(kstat_t **ksp_ptr, char *module, int instance, char *name); long long get_kstat_value(kstat_t *ksp, char *name); #endif @@ -310,15 +319,21 @@ int format_name(char *ret, int ret_len, const char *hostname, format_name(ret, ret_len, (vl)->host, (vl)->plugin, (vl)->plugin_instance, \ (vl)->type, (vl)->type_instance) int format_values(char *ret, size_t ret_len, const data_set_t *ds, - const value_list_t *vl, _Bool store_rates); + const value_list_t *vl, bool store_rates); int parse_identifier(char *str, char **ret_host, char **ret_plugin, char **ret_plugin_instance, char **ret_type, - char **ret_type_instance); + char **ret_type_instance, char *default_host); int parse_identifier_vl(const char *str, value_list_t *vl); int parse_value(const char *value, value_t *ret_value, int ds_type); int parse_values(char *buffer, value_list_t *vl, const data_set_t *ds); +/* parse_value_file reads "path" and parses its content as an integer or + * floating point, depending on "ds_type". On success, the value is stored in + * "ret_value" and zero is returned. On failure, a non-zero value is returned. + */ +int parse_value_file(char const *path, value_t *ret_value, int ds_type); + #if !HAVE_GETPWNAM_R int getpwnam_r(const char *name, struct passwd *pwbuf, char *buf, size_t buflen, struct passwd **pwbufp); @@ -371,12 +386,10 @@ int strtogauge(const char *string, gauge_t *ret_value); int strarray_add(char ***ret_array, size_t *ret_array_len, char const *str); void strarray_free(char **array, size_t array_len); -#ifdef HAVE_SYS_CAPABILITY_H /** Check if the current process benefits from the capability passed in * argument. Returns zero if it does, less than zero if it doesn't or on error. * See capabilities(7) for the list of possible capabilities. * */ int check_capability(int arg); -#endif /* HAVE_SYS_CAPABILITY_H */ #endif /* COMMON_H */