X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Futils%2Fcommon%2Fcommon.c;h=2cebc0d5f067f4627114bcf962e33936b6d41c93;hb=f43a473fd8ffa483bd7d74579a22886ab2df9101;hp=e986da813ad79d85da3cc5f5def0d18430af95fc;hpb=8f6aa6970bf787e6a11e095322af3338ec781d78;p=collectd.git diff --git a/src/utils/common/common.c b/src/utils/common/common.c index e986da81..2cebc0d5 100644 --- a/src/utils/common/common.c +++ b/src/utils/common/common.c @@ -25,7 +25,7 @@ * Niki W. Waibel * Sebastian Harl * Michał Mirosław -**/ + **/ #include "collectd.h" @@ -89,8 +89,7 @@ char *sstrncpy(char *dest, const char *src, size_t n) { return dest; } /* char *sstrncpy */ -/* ssnprintf returns zero on success, one if truncation occurred - and a negative integer onerror. */ +/* ssnprintf returns result from vsnprintf conistent with snprintf */ int ssnprintf(char *str, size_t sz, const char *format, ...) { va_list ap; va_start(ap, format); @@ -99,10 +98,7 @@ int ssnprintf(char *str, size_t sz, const char *format, ...) { va_end(ap); - if (ret < 0) { - return ret; - } - return (size_t)ret >= sz; + return ret; } /* int ssnprintf */ char *ssnprintf_alloc(char const *format, ...) /* {{{ */ @@ -181,7 +177,7 @@ char *sstrerror(int errnum, char *buf, size_t buflen) { pthread_mutex_unlock(&strerror_r_lock); } -/* #endif !HAVE_STRERROR_R */ + /* #endif !HAVE_STRERROR_R */ #elif STRERROR_R_CHAR_P { @@ -191,17 +187,19 @@ char *sstrerror(int errnum, char *buf, size_t buflen) { if ((temp != NULL) && (temp != buf) && (temp[0] != '\0')) sstrncpy(buf, temp, buflen); else - sstrncpy(buf, "strerror_r did not return " - "an error message", + sstrncpy(buf, + "strerror_r did not return " + "an error message", buflen); } } -/* #endif STRERROR_R_CHAR_P */ + /* #endif STRERROR_R_CHAR_P */ #else if (strerror_r(errnum, buf, buflen) != 0) { - snprintf(buf, buflen, "Error #%i; " - "Additionally, strerror_r failed.", + snprintf(buf, buflen, + "Error #%i; " + "Additionally, strerror_r failed.", errnum); } #endif /* STRERROR_R_CHAR_P */ @@ -737,9 +735,8 @@ long long get_kstat_value(kstat_t *ksp, char *name) { else if (kn->data_type == KSTAT_DATA_UINT32) retval = (long long)kn->value.ui32; else if (kn->data_type == KSTAT_DATA_INT64) - retval = - (long long)kn->value.i64; /* According to ANSI C99 `long long' must hold - at least 64 bits */ + retval = (long long)kn->value.i64; /* According to ANSI C99 `long long' must + hold at least 64 bits */ else if (kn->data_type == KSTAT_DATA_UINT64) retval = (long long)kn->value.ui64; /* XXX: Might overflow! */ else @@ -768,8 +765,8 @@ unsigned long long htonll(unsigned long long n) { #endif /* HAVE_HTONLL */ #if FP_LAYOUT_NEED_NOTHING -/* Well, we need nothing.. */ -/* #endif FP_LAYOUT_NEED_NOTHING */ + /* Well, we need nothing.. */ + /* #endif FP_LAYOUT_NEED_NOTHING */ #elif FP_LAYOUT_NEED_ENDIANFLIP || FP_LAYOUT_NEED_INTSWAP #if FP_LAYOUT_NEED_ENDIANFLIP @@ -1266,7 +1263,7 @@ int walk_directory(const char *dir, dirwalk_callback_f callback, return 0; } -ssize_t read_file_contents(const char *filename, char *buf, size_t bufsize) { +ssize_t read_file_contents(const char *filename, void *buf, size_t bufsize) { FILE *fh; ssize_t ret; @@ -1284,6 +1281,16 @@ ssize_t read_file_contents(const char *filename, char *buf, size_t bufsize) { return ret; } +ssize_t read_text_file_contents(const char *filename, char *buf, + size_t bufsize) { + ssize_t ret = read_file_contents(filename, buf, bufsize - 1); + if (ret < 0) + return ret; + + buf[ret] = '\0'; + return ret + 1; +} + counter_t counter_diff(counter_t old_value, counter_t new_value) { counter_t diff; @@ -1455,13 +1462,13 @@ int service_name_to_port_number(const char *service_name) { service_number = (int)ntohs(sa->sin6_port); } - if ((service_number > 0) && (service_number <= 65535)) + if (service_number > 0) break; } freeaddrinfo(ai_list); - if ((service_number > 0) && (service_number <= 65535)) + if (service_number > 0) return service_number; return -1; } /* int service_name_to_port_number */