X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Futils%2Fcommon%2Fcommon.c;h=2711c9ddf2cf517e7c97c85f7920b3530551e36f;hp=d15f9b7c771c708d5e30b00f90d253ffc1e58e08;hb=1b5a6b8698a4c42f2024b49099acb510fc4bc529;hpb=ff8b75e1820552a8bbd1832544451723cbde768b diff --git a/src/utils/common/common.c b/src/utils/common/common.c index d15f9b7c..2711c9dd 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,6 +89,34 @@ char *sstrncpy(char *dest, const char *src, size_t n) { return dest; } /* char *sstrncpy */ +/* 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); + + int ret = vsnprintf(str, sz, format, ap); + + va_end(ap); + + return ret; +} /* int ssnprintf */ + +/* ssnprintf2 returns zero on success, one if truncation occurred + and a negative integer on error. */ +int ssnprintf2(char *str, size_t sz, const char *format, ...) { + va_list ap; + va_start(ap, format); + + int ret = vsnprintf(str, sz, format, ap); + + va_end(ap); + + if (ret < 0) { + return ret; + } + return (size_t)ret >= sz; +} /* int ssnprintf2 */ + char *ssnprintf_alloc(char const *format, ...) /* {{{ */ { char static_buffer[1024] = ""; @@ -165,7 +193,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 { @@ -175,17 +203,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 */ @@ -721,9 +751,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 @@ -752,8 +781,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 @@ -1439,13 +1468,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 */