From fb6f72ade68d8be7dfc37ce662fe77ad904de3db Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Fri, 20 Nov 2020 19:22:05 +0100 Subject: [PATCH 01/32] common/common.c: common/common.c: snprintfcat(): sort out the messy return types (avoid implicit cast in verification assert) --- common/common.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/common.c b/common/common.c index 3711d90485..353fc225b3 100644 --- a/common/common.c +++ b/common/common.c @@ -329,7 +329,7 @@ int snprintfcat(char *dst, size_t size, const char *fmt, ...) */ assert(ret >= 0); #ifdef INT_MAX - assert ((unsigned long long)len < ((unsigned long long)INT_MAX - ret)); + assert ((unsigned long long)len < ((unsigned long long)INT_MAX - (unsigned long long)ret)); #endif return (int)len + ret; } From 05699fb83f9b96093ec621236f8fc4834609565b Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Fri, 20 Nov 2020 19:43:16 +0100 Subject: [PATCH 02/32] common/common.c: common/common.c: snprintfcat(): replace asserts by negative returns (and errno where applicable) --- common/common.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/common/common.c b/common/common.c index 353fc225b3..d48dacdcfd 100644 --- a/common/common.c +++ b/common/common.c @@ -21,6 +21,7 @@ #include #include +#include #include #include #include @@ -301,7 +302,11 @@ int snprintfcat(char *dst, size_t size, const char *fmt, ...) int ret; size--; - assert(len <= size); + if (len > size) { + /* Do not truncate existing string */ + errno = ERANGE; + return -1; + } va_start(ap, fmt); #ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_FORMAT_NONLITERAL @@ -327,9 +332,14 @@ int snprintfcat(char *dst, size_t size, const char *fmt, ...) * In theory it can overflow a 64-vs-32 bit range, or signed-vs-unsigned. * In practice we hope to not have gigabytes-long config strings. */ - assert(ret >= 0); + if (ret < 0) { + return ret; + } #ifdef INT_MAX - assert ((unsigned long long)len < ((unsigned long long)INT_MAX - (unsigned long long)ret)); + if ( ( (unsigned long long)len + (unsigned long long)ret ) >= (unsigned long long)INT_MAX ) { + errno = ERANGE; + return -1; + } #endif return (int)len + ret; } From d5ca5381ad39802a62b29575ea0c13e9e85face0 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Fri, 20 Nov 2020 19:45:31 +0100 Subject: [PATCH 03/32] common/str.c: str_to_{u,}short{,_strict}() routines: explicit cast from temporary variable to return-value type --- common/str.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/common/str.c b/common/str.c index 092efcf427..8b58495583 100644 --- a/common/str.c +++ b/common/str.c @@ -252,7 +252,7 @@ int str_to_short(const char *string, short *number, const int base) return 0; } - *number = num; + *number = (short)num; return 1; } @@ -273,7 +273,7 @@ int str_to_short_strict(const char *string, short *number, const int base) return 0; } - *number = num; + *number = (short)num; return 1; } @@ -291,7 +291,7 @@ int str_to_ushort(const char *string, unsigned short *number, const int base) return 0; } - *number = num; + *number = (unsigned short)num; return 1; } @@ -309,7 +309,7 @@ int str_to_ushort_strict(const char *string, unsigned short *number, const int b return 0; } - *number = num; + *number = (unsigned short)num; return 1; } From e704c187f3d02616ff43c830a0333ba4815e5933 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Fri, 20 Nov 2020 19:49:01 +0100 Subject: [PATCH 04/32] common/upsconf.c: conf_args(): fix numargs type --- common/upsconf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/upsconf.c b/common/upsconf.c index 80c2de091c..9c6ebbd1f4 100644 --- a/common/upsconf.c +++ b/common/upsconf.c @@ -29,7 +29,7 @@ static char *ups_section; /* handle arguments separated by parseconf */ -static void conf_args(int numargs, char **arg) +static void conf_args(size_t numargs, char **arg) { if (numargs < 1) return; From 531e2dc7a4753c6bab153f1bc4becff653c48cf5 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 15:42:23 +0100 Subject: [PATCH 05/32] drivers/liebert-esp2.c: fix indentation --- drivers/liebert-esp2.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/liebert-esp2.c b/drivers/liebert-esp2.c index 7ed89db822..b1469ae396 100644 --- a/drivers/liebert-esp2.c +++ b/drivers/liebert-esp2.c @@ -517,10 +517,10 @@ void upsdrv_shutdown(void) char reply[8]; if(!(do_command(cmd_setOutOffMode, reply, 8) != -1) && - (do_command(cmd_setOutOffDelay, reply, 8) != -1) && - (do_command(cmd_sysLoadKey, reply, 6) != -1) && - (do_command(cmd_shutdown, reply, 8) != -1)) - upslogx(LOG_ERR, "Failed to shutdown UPS"); + (do_command(cmd_setOutOffDelay, reply, 8) != -1) && + (do_command(cmd_sysLoadKey, reply, 6) != -1) && + (do_command(cmd_shutdown, reply, 8) != -1)) + upslogx(LOG_ERR, "Failed to shutdown UPS"); } static int instcmd(const char *cmdname, const char *extra) From 8e58a2a9d3e9b96ffad5d5268ee11056576b69f7 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 16:42:32 +0100 Subject: [PATCH 06/32] common/strerror.c: do not warn about unreachable code in the web of ifdef built blocks --- common/strerror.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/common/strerror.c b/common/strerror.c index b5cecb9673..e00f208aba 100644 --- a/common/strerror.c +++ b/common/strerror.c @@ -11,6 +11,16 @@ char *strerror(int errnum) { static char buf[32]; +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_UNREACHABLE_CODE +#pragma GCC diagnostic push +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_UNREACHABLE_CODE_BREAK +#pragma GCC diagnostic ignored "-Wunreachable-code-break" +#endif +#ifdef HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_UNREACHABLE_CODE +#pragma GCC diagnostic ignored "-Wunreachable-code" +#endif + switch (errnum) { #if defined (EPERM) case EPERM: @@ -498,6 +508,11 @@ char *strerror(int errnum) /* Fallback: just print the error number */ snprintf(buf, sizeof(buf), "Error %d", errnum); return buf; + +#ifdef HAVE_PRAGMAS_FOR_GCC_DIAGNOSTIC_IGNORED_UNREACHABLE_CODE +#pragma GCC diagnostic pop +#endif + } #endif /* HAVE_STRERROR */ From f84a847f9793d534975983b62044dba17ab7a745 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 16:44:26 +0100 Subject: [PATCH 07/32] drivers/bcmxcp.c: do not "break" just after "return" --- drivers/bcmxcp.c | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/drivers/bcmxcp.c b/drivers/bcmxcp.c index 1095544d98..afff7b1020 100644 --- a/drivers/bcmxcp.c +++ b/drivers/bcmxcp.c @@ -2064,9 +2064,6 @@ static int instcmd(const char *cmdname, const char *extra) snprintf(success_msg, sizeof(success_msg)-1, "Outlet %d is %s",outlet_num, (cmdname[NUT_OUTLET_POSITION+8] == 'n')?"On":"Off"); return decode_instcmd_exec(res, (unsigned char)answer[0], cmdname, success_msg); - - - } upslogx(LOG_NOTICE, "instcmd: unknown command [%s]", cmdname); @@ -2087,39 +2084,32 @@ static int decode_instcmd_exec(const int res, const unsigned char exec_status, c upslogx(LOG_NOTICE, "[%s] %s", cmdname, success_msg); upsdrv_comm_good(); return STAT_INSTCMD_HANDLED; - break; } case BCMXCP_RETURN_ACCEPTED_PARAMETER_ADJUST: { upslogx(LOG_NOTICE, "[%s] Parameter adjusted", cmdname); upslogx(LOG_NOTICE, "[%s] %s", cmdname, success_msg); upsdrv_comm_good(); return STAT_INSTCMD_HANDLED; - break; } case BCMXCP_RETURN_BUSY: { upslogx(LOG_NOTICE, "[%s] Busy or disbled by front panel", cmdname); return STAT_INSTCMD_FAILED; - break; } case BCMXCP_RETURN_UNRECOGNISED: { upslogx(LOG_NOTICE, "[%s] Unrecognised command byte or corrupt checksum", cmdname); return STAT_INSTCMD_FAILED; - break; } case BCMXCP_RETURN_INVALID_PARAMETER: { upslogx(LOG_NOTICE, "[%s] Invalid parameter", cmdname); return STAT_INSTCMD_INVALID; - break; } case BCMXCP_RETURN_PARAMETER_OUT_OF_RANGE: { upslogx(LOG_NOTICE, "[%s] Parameter out of range", cmdname); return STAT_INSTCMD_INVALID; - break; } default: { upslogx(LOG_NOTICE, "[%s] Not supported", cmdname); return STAT_INSTCMD_INVALID; - break; } } } @@ -2430,39 +2420,32 @@ static int decode_setvar_exec(const int res, const unsigned char exec_status, co upslogx(LOG_NOTICE, "[%s] %s", cmdname, success_msg); upsdrv_comm_good(); return STAT_SET_HANDLED; - break; } case BCMXCP_RETURN_ACCEPTED_PARAMETER_ADJUST: { upslogx(LOG_NOTICE, "[%s] Parameter adjusted", cmdname); upslogx(LOG_NOTICE, "[%s] %s", cmdname, success_msg); upsdrv_comm_good(); return STAT_SET_HANDLED; - break; } case BCMXCP_RETURN_BUSY: { upslogx(LOG_NOTICE, "[%s] Busy or disbled by front panel", cmdname); return STAT_SET_FAILED; - break; } case BCMXCP_RETURN_UNRECOGNISED: { upslogx(LOG_NOTICE, "[%s] Unrecognised command byte or corrupt checksum", cmdname); return STAT_SET_FAILED; - break; } case BCMXCP_RETURN_INVALID_PARAMETER: { upslogx(LOG_NOTICE, "[%s] Invalid parameter", cmdname); return STAT_SET_INVALID; - break; } case BCMXCP_RETURN_PARAMETER_OUT_OF_RANGE: { upslogx(LOG_NOTICE, "[%s] Parameter out of range", cmdname); return STAT_SET_INVALID; - break; } default: { upslogx(LOG_NOTICE, "[%s] Not supported", cmdname); return STAT_SET_INVALID; - break; } } } From e6b602afb985a8496940038bf2381c3edd5503c5 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 16:46:04 +0100 Subject: [PATCH 08/32] drivers/bestfcom.c: do not "break" just after "fatalx()" --- drivers/bestfcom.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/bestfcom.c b/drivers/bestfcom.c index c19f727045..35e28a3c7e 100644 --- a/drivers/bestfcom.c +++ b/drivers/bestfcom.c @@ -637,7 +637,6 @@ static void upsdrv_init_nofc(void) break; default: fatalx(EXIT_FAILURE, "Unknown model %s in upsdrv_init_nofc()", rstring); - break; } fc.valid = 1; } From fdd20b44a4e80c2137f41668219925616fd1ee17 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 16:47:59 +0100 Subject: [PATCH 09/32] drivers/nutdrv_qx.c: wrap unreachable exit() added due to earlier compiler warnings with "ifndef HAVE___ATTRIBUTE__NORETURN" to avoid opposite warnings now --- drivers/nutdrv_qx.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/nutdrv_qx.c b/drivers/nutdrv_qx.c index 55ed3c1e5e..f8c959c4c7 100644 --- a/drivers/nutdrv_qx.c +++ b/drivers/nutdrv_qx.c @@ -2149,11 +2149,29 @@ static int qx_command(const char *cmd, char *buf, size_t buflen) { case -EBUSY: /* Device or resource busy */ fatal_with_errno(EXIT_FAILURE, "Got disconnected by another driver"); +#ifndef HAVE___ATTRIBUTE__NORETURN +# if (defined HAVE_PRAGMA_GCC_DIAGNOSTIC_PUSH_POP) && (defined HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_UNREACHABLE_CODE) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunreachable-code" +# endif exit(EXIT_FAILURE); /* Should not get here in practice, but compiler is afraid we can fall through */ +# if (defined HAVE_PRAGMA_GCC_DIAGNOSTIC_PUSH_POP) && (defined HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_UNREACHABLE_CODE) +# pragma GCC diagnostic pop +# endif +#endif case -EPERM: /* Operation not permitted */ fatal_with_errno(EXIT_FAILURE, "Permissions problem"); +#ifndef HAVE___ATTRIBUTE__NORETURN +# if (defined HAVE_PRAGMA_GCC_DIAGNOSTIC_PUSH_POP) && (defined HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_UNREACHABLE_CODE) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wunreachable-code" +# endif exit(EXIT_FAILURE); /* Should not get here in practice, but compiler is afraid we can fall through */ +# if (defined HAVE_PRAGMA_GCC_DIAGNOSTIC_PUSH_POP) && (defined HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_UNREACHABLE_CODE) +# pragma GCC diagnostic pop +# endif +#endif case -EPIPE: /* Broken pipe */ if (usb_clear_halt(udev, 0x81) == 0) { From 902ac737da7924a6b695e0e4d25e5a0955560e3f Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Thu, 26 Nov 2020 15:37:42 +0100 Subject: [PATCH 10/32] drivers/nutdrv_atcl_usb.c: copy-paste typo fix about unreachable code --- drivers/nutdrv_atcl_usb.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/nutdrv_atcl_usb.c b/drivers/nutdrv_atcl_usb.c index 3fc8700a9f..bb76f506e1 100644 --- a/drivers/nutdrv_atcl_usb.c +++ b/drivers/nutdrv_atcl_usb.c @@ -321,8 +321,7 @@ static int usb_device_open(usb_dev_handle **handlep, USBDevice_t *device, USBDev case -1: fatal_with_errno(EXIT_FAILURE, "matcher"); #ifndef HAVE___ATTRIBUTE__NORETURN -# if (defined HAVE_PRAGMA_GCC_DIAGNOSTIC_PUSH_POP) && (defined HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_UNR -EACHABLE_CODE) +# if (defined HAVE_PRAGMA_GCC_DIAGNOSTIC_PUSH_POP) && (defined HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_UNREACHABLE_CODE) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wunreachable-code" # endif From 04d78208286309bcca846219e5911dc15a7958a0 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Thu, 26 Nov 2020 15:39:25 +0100 Subject: [PATCH 11/32] drivers/libusb.c: copy-paste typo fix about unreachable code --- drivers/libusb.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/libusb.c b/drivers/libusb.c index 600951547f..acb642cbe5 100644 --- a/drivers/libusb.c +++ b/drivers/libusb.c @@ -252,8 +252,7 @@ static int libusb_open(usb_dev_handle **udevp, USBDevice_t *curDevice, USBDevice } else if (ret==-1) { fatal_with_errno(EXIT_FAILURE, "matcher"); #ifndef HAVE___ATTRIBUTE__NORETURN -# if (defined HAVE_PRAGMA_GCC_DIAGNOSTIC_PUSH_POP) && (defined HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_UNR -EACHABLE_CODE) +# if (defined HAVE_PRAGMA_GCC_DIAGNOSTIC_PUSH_POP) && (defined HAVE_PRAGMA_GCC_DIAGNOSTIC_IGNORED_UNREACHABLE_CODE) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wunreachable-code" # endif From 3560afb8b7b97124ce246a0269a08544fcf591ae Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 17:36:24 +0100 Subject: [PATCH 12/32] drivers/libshut.c: satisfy pedantic macro parser (defined vs. used value) --- drivers/libshut.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/libshut.c b/drivers/libshut.c index 65ffd5f568..c723466771 100644 --- a/drivers/libshut.c +++ b/drivers/libshut.c @@ -274,7 +274,7 @@ static int shut_control_msg(int upsfd, int requesttype, int request, int value, #define BYTESWAP(in) (((in & 0xFF) << 8) + ((in & 0xFF00) >> 8)) static void align_request(struct shut_ctrltransfer_s *ctrl) { -#if WORDS_BIGENDIAN +#if (defined (WORDS_BIGENDIAN)) && (WORDS_BIGENDIAN) /* Sparc/Mips/... are big endian, USB/SHUT little endian */ (*ctrl).wValue = BYTESWAP((*ctrl).wValue); (*ctrl).wIndex = BYTESWAP((*ctrl).wIndex); From fef6988bbb40c53030d9c09edb581692a5800441 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 19:00:11 +0100 Subject: [PATCH 13/32] drivers/hidparser.c: satisfy pedantic macro parser (defined vs. used value) --- drivers/hidparser.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/hidparser.c b/drivers/hidparser.c index c6f124ca02..ca36927098 100644 --- a/drivers/hidparser.c +++ b/drivers/hidparser.c @@ -157,7 +157,7 @@ static int HIDParse(HIDParser_t *pParser, HIDData_t *pData) if (pParser->Count == 0) { pParser->Item = pParser->ReportDesc[pParser->Pos++]; pParser->Value = 0; -#if WORDS_BIGENDIAN +#if (defined (WORDS_BIGENDIAN)) && (WORDS_BIGENDIAN) { int i; unsigned long valTmp = 0; From ae5854e71dc5f78952e9b702a970149b0c4839b4 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 17:28:56 +0100 Subject: [PATCH 14/32] drivers/al175.c: align method docs with param names --- drivers/al175.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/al175.c b/drivers/al175.c index a705a42542..0e3275001b 100644 --- a/drivers/al175.c +++ b/drivers/al175.c @@ -191,7 +191,7 @@ typedef struct { /** * convert hex string to int * @param head input string - * @param count string length + * @param len string length * @return parsed value (>=0) if success, -1 on error */ static long from_hex(const byte_t *head, unsigned len) From f470a1a0cc15010a83ee9bdb88260afa1d5af8bb Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 17:30:33 +0100 Subject: [PATCH 15/32] drivers/netxml-ups.c: align method docs with supported keywords --- drivers/netxml-ups.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/netxml-ups.c b/drivers/netxml-ups.c index 3681abef8d..c331e4caac 100644 --- a/drivers/netxml-ups.c +++ b/drivers/netxml-ups.c @@ -175,7 +175,7 @@ static object_entry_t *set_object_add( /** * \brief SET_OBJECT: RAW POST mode implementation * - * \brief req SET_OBJECT request + * \param req SET_OBJECT request * * \return Response to the request */ @@ -185,7 +185,7 @@ static object_query_t *set_object_raw(object_query_t *req); /** * \brief SET_OBJECT: FORM POST mode implementation * - * \brief req SET_OBJECT request + * \param req SET_OBJECT request * * \return \c NULL (FORM POST mode resp. is ignored by specification) */ @@ -195,7 +195,7 @@ static object_query_t *set_object_form(object_query_t *req); /** * \brief SET_OBJECT: implementation * - * \brief req SET_OBJECT request + * \param req SET_OBJECT request * * \return Response to the request */ @@ -1238,8 +1238,8 @@ static object_entry_t *set_object_add( * \param buff Buffer * \param entry SET_OBJECT request entry * - * \retval OBJECT_OK on success - * \retval OBJECT_ERROR otherwise + * \return OBJECT_OK on success + * \return OBJECT_ERROR otherwise */ static object_query_status_t set_object_serialise_entries(ne_buffer *buff, object_entry_t *entry) { object_query_status_t status = OBJECT_OK; From a350f739f4fed07ea9487dccc0c536cb41bf15ab Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 19:02:43 +0100 Subject: [PATCH 16/32] drivers/netxml-ups.c: align method docs with param names --- drivers/netxml-ups.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/netxml-ups.c b/drivers/netxml-ups.c index c331e4caac..39bbff37aa 100644 --- a/drivers/netxml-ups.c +++ b/drivers/netxml-ups.c @@ -1069,7 +1069,7 @@ static void set_object_req_destroy(set_object_req_t *req) { /** * \brief SET_OBJECT response list entry destructor * - * \param req SET_OBJECT response list entry + * \param resp SET_OBJECT response list entry */ static void set_object_resp_destroy(set_object_resp_t *resp) { assert(NULL != resp); @@ -1580,9 +1580,9 @@ static object_query_t *set_object_deserialise_raw(ne_buffer *buff) { * * The function creates HTTP request, sends it and reads-out the response. * - * \param[in] session HTTP session + * \param[in] argsession HTTP session * \param[in] method Request method - * \param[in] uri Request URI + * \param[in] arguri Request URI * \param[in] ct Request content type (optional, \c NULL accepted) * \param[in] req_body Request body (optional, \c NULL is accepted) * \param[out] resp_body Response body (optional, \c NULL is accepted) From 355920fc5e7ff80210bba6641182f88daab27ed8 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 22:12:42 +0100 Subject: [PATCH 17/32] tools/nut-scanner/scan_snmp.c: mark up NUT_UNUSED_VARIABLEs --- tools/nut-scanner/scan_snmp.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tools/nut-scanner/scan_snmp.c b/tools/nut-scanner/scan_snmp.c index ba8dcc4916..2056a3774a 100644 --- a/tools/nut-scanner/scan_snmp.c +++ b/tools/nut-scanner/scan_snmp.c @@ -757,10 +757,12 @@ nutscan_device_t * nutscan_scan_snmp(const char * start_ip, const char * stop_ip return result; } #else /* WITH_SNMP */ -nutscan_device_t * nutscan_scan_snmp(const char * start_ip, const char * stop_ip,long usec_timeout, nutscan_snmp_t * sec) +nutscan_device_t * nutscan_scan_snmp(const char * start_ip, const char * stop_ip, long usec_timeout, nutscan_snmp_t * sec) { + NUT_UNUSED_VARIABLE(start_ip); + NUT_UNUSED_VARIABLE(stop_ip); + NUT_UNUSED_VARIABLE(usec_timeout); + NUT_UNUSED_VARIABLE(sec); return NULL; } #endif /* WITH_SNMP */ - - From 0e252db209d2cb61262a12142a5788198dffb595 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 22:14:11 +0100 Subject: [PATCH 18/32] tools/nut-scanner/scan_xml_http.c: mark up NUT_UNUSED_VARIABLEs --- tools/nut-scanner/scan_xml_http.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/nut-scanner/scan_xml_http.c b/tools/nut-scanner/scan_xml_http.c index b04e73bb26..3cc56e9727 100644 --- a/tools/nut-scanner/scan_xml_http.c +++ b/tools/nut-scanner/scan_xml_http.c @@ -449,6 +449,10 @@ nutscan_device_t * nutscan_scan_xml_http_range(const char * start_ip, const char #else /* WITH_NEON */ nutscan_device_t * nutscan_scan_xml_http_range(const char * start_ip, const char * end_ip, long usec_timeout, nutscan_xml_t * sec) { + NUT_UNUSED_VARIABLE(start_ip); + NUT_UNUSED_VARIABLE(stop_ip); + NUT_UNUSED_VARIABLE(usec_timeout); + NUT_UNUSED_VARIABLE(sec); return NULL; } #endif /* WITH_NEON */ From 37aef38990e9a954bd851e8cad3156e2154531a8 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 22:14:21 +0100 Subject: [PATCH 19/32] tools/nut-scanner/scan_ipmi.c: mark up NUT_UNUSED_VARIABLEs --- tools/nut-scanner/scan_ipmi.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/nut-scanner/scan_ipmi.c b/tools/nut-scanner/scan_ipmi.c index f7baab0cc3..f567643501 100644 --- a/tools/nut-scanner/scan_ipmi.c +++ b/tools/nut-scanner/scan_ipmi.c @@ -610,6 +610,10 @@ nutscan_device_t * nutscan_scan_ipmi(const char * start_ip, const char * stop_ip /* stub function */ nutscan_device_t * nutscan_scan_ipmi(const char * startIP, const char * stopIP, nutscan_ipmi_t * sec) { + NUT_UNUSED_VARIABLE(startIP); + NUT_UNUSED_VARIABLE(stopIP); + NUT_UNUSED_VARIABLE(sec); + return NULL; } #endif /* WITH_IPMI */ From d5f72619cbd193f89fad1cf6f7fd0b09e916e6e1 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 19:39:42 +0100 Subject: [PATCH 20/32] tools/nut-scanner/scan_avahi.c: mark up NUT_UNUSED_VARIABLEs --- tools/nut-scanner/scan_avahi.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/nut-scanner/scan_avahi.c b/tools/nut-scanner/scan_avahi.c index e4d3dd203b..0a1dcee9c6 100644 --- a/tools/nut-scanner/scan_avahi.c +++ b/tools/nut-scanner/scan_avahi.c @@ -532,6 +532,8 @@ nutscan_device_t * nutscan_scan_avahi(long usec_timeout) /* stub function */ nutscan_device_t * nutscan_scan_avahi(long usec_timeout) { + NUT_UNUSED_VARIABLE(usec_timeout); + return NULL; } #endif /* WITH_AVAHI */ From 2a75a17fe8258933a2bbc661cf31234bc2f5c496 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 19:09:46 +0100 Subject: [PATCH 21/32] clients/upsimage.c: annotate lots of routines with noreturn attr --- clients/upsimage.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/clients/upsimage.c b/clients/upsimage.c index 30c6ecc073..54bf49ff78 100644 --- a/clients/upsimage.c +++ b/clients/upsimage.c @@ -210,6 +210,17 @@ static void drawscale( } /* draws the bar style indicator */ +static void drawbar( + int lvllo, int lvlhi, /* min and max numbers on the scale */ + int step, int step5, int step10, /* steps for minor, submajor and major dashes */ + int redlo1, int redhi1, /* first red zone start and end */ + int redlo2, int redhi2, /* second red zone start and end */ + int grnlo, int grnhi, /* green zone start and end */ + double value, /* UPS variable value to draw */ + const char *format /* printf style format to be used when rendering summary text */ +) + __attribute__((noreturn)); + static void drawbar( int lvllo, int lvlhi, /* min and max numbers on the scale */ int step, int step5, int step10, /* steps for minor, submajor and major dashes */ @@ -272,6 +283,9 @@ static void drawbar( } /* draws the error image */ +static void noimage(const char *fmt, ...) + __attribute__((noreturn)); + static void noimage(const char *fmt, ...) { gdImagePtr im; @@ -314,6 +328,10 @@ static void noimage(const char *fmt, ...) UPS variable can be determined. deviation < 0 means that values below nom should be grey instead of green */ +static void drawgeneralbar(double var, int min, int nom, int max, + int deviation, const char *format) + __attribute__((noreturn)); + static void drawgeneralbar(double var, int min, int nom, int max, int deviation, const char *format) { @@ -373,6 +391,10 @@ static void drawgeneralbar(double var, int min, int nom, int max, } /* draws input and output voltage bar style indicators */ +static void draw_utility(double var, int min, int nom, int max, + int deviation, const char *format) + __attribute__((noreturn)); + static void draw_utility(double var, int min, int nom, int max, int deviation, const char *format) { @@ -416,6 +438,10 @@ static void draw_utility(double var, int min, int nom, int max, } /* draws battery.percent bar style indicator */ +static void draw_battpct(double var, int min, int nom, + int max, int deviation, const char *format) + __attribute__((noreturn)); + static void draw_battpct(double var, int min, int nom, int max, int deviation, const char *format) { @@ -431,6 +457,10 @@ static void draw_battpct(double var, int min, int nom, } /* draws battery.voltage bar style indicator */ +static void draw_battvolt(double var, int min, int nom, int max, + int deviation, const char *format) + __attribute__((noreturn)); + static void draw_battvolt(double var, int min, int nom, int max, int deviation, const char *format) { @@ -477,6 +507,11 @@ static void draw_battvolt(double var, int min, int nom, int max, } /* draws ups.load bar style indicator */ +static void draw_upsload(double var, int min, + int nom, int max, + int deviation, const char *format) + __attribute__((noreturn)); + static void draw_upsload(double var, int min, int nom, int max, int deviation, const char *format) @@ -490,6 +525,10 @@ static void draw_upsload(double var, int min, } /* draws temperature bar style indicator */ +static void draw_temperature(double var, int min, int nom, int max, + int deviation, const char *format) + __attribute__((noreturn)); + static void draw_temperature(double var, int min, int nom, int max, int deviation, const char *format) { @@ -502,6 +541,10 @@ static void draw_temperature(double var, int min, int nom, int max, } /* draws humidity bar style indicator */ +static void draw_humidity(double var, int min, int nom, int max, + int deviation, const char *format) + __attribute__((noreturn)); + static void draw_humidity(double var, int min, int nom, int max, int deviation, const char *format) { From d129231d7b56ea4a29356845510459b6a4468983 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 19:16:51 +0100 Subject: [PATCH 22/32] clients/upsimage.c: wrap unreachable exit() added due to earlier compiler warnings with "ifndef HAVE___ATTRIBUTE__NORETURN" to avoid opposite warnings now --- clients/upsimage.c | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/clients/upsimage.c b/clients/upsimage.c index 54bf49ff78..eb5ba6c15f 100644 --- a/clients/upsimage.c +++ b/clients/upsimage.c @@ -321,6 +321,12 @@ static void noimage(const char *fmt, ...) drawimage(im); + /* NOTE: Earlier code called noimage() and then exit(EXIT_FAILURE); + * to signal an error via process exit code. Now that drawimage() + * always ends with exit(EXIT_SUCCESS) - which might make webserver + * feel good - the command-line use if any suffers no error returns. + */ + /* NOTREACHED */ } @@ -600,13 +606,17 @@ int main(int argc, char **argv) if (upscli_splitname(monhost, &upsname, &hostname, &port) != 0) { noimage("Invalid UPS definition (upsname[@hostname[:port]])\n"); - exit(EXIT_FAILURE); +#ifndef HAVE___ATTRIBUTE__NORETURN + exit(EXIT_FAILURE); /* Should not get here in practice, but compiler is afraid we can fall through */ +#endif } if (upscli_connect(&ups, hostname, port, 0) < 0) { noimage("Can't connect to server:\n%s\n", upscli_strerror(&ups)); - exit(EXIT_FAILURE); +#ifndef HAVE___ATTRIBUTE__NORETURN + exit(EXIT_FAILURE); /* Should not get here in practice, but compiler is afraid we can fall through */ +#endif } for (i = 0; imgvar[i].name; i++) @@ -616,7 +626,9 @@ int main(int argc, char **argv) registered with this variable */ if (!imgvar[i].drawfunc) { noimage("Draw function N/A"); - exit(EXIT_FAILURE); +#ifndef HAVE___ATTRIBUTE__NORETURN + exit(EXIT_FAILURE); /* Should not get here in practice, but compiler is afraid we can fall through */ +#endif } /* get the variable value */ @@ -627,7 +639,9 @@ int main(int argc, char **argv) snprintf(str, sizeof(str), "%s N/A", imgvar[i].name); noimage(str); - exit(EXIT_FAILURE); +#ifndef HAVE___ATTRIBUTE__NORETURN + exit(EXIT_FAILURE); /* Should not get here in practice, but compiler is afraid we can fall through */ +#endif } /* when getting minimum, nominal and maximum values, @@ -680,7 +694,9 @@ int main(int argc, char **argv) } noimage("Unknown display"); +#ifndef HAVE___ATTRIBUTE__NORETURN exit(EXIT_FAILURE); +#endif } imgvar_t imgvar[] = { From a875f84ede652c301148b5ba5c8e3bc91239a475 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 19:20:30 +0100 Subject: [PATCH 23/32] clients/upsmon.c: annotate forceshutdown() with noreturn attr --- clients/upsmon.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/clients/upsmon.c b/clients/upsmon.c index 4d1d883afd..c8aed27507 100644 --- a/clients/upsmon.c +++ b/clients/upsmon.c @@ -617,6 +617,9 @@ static void slavesync(void) } } +static void forceshutdown(void) + __attribute__((noreturn)); + static void forceshutdown(void) { utype_t *ups; From bb58bfda2b08445ab275c430b041681bde00aa85 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 19:21:33 +0100 Subject: [PATCH 24/32] drivers/al175.c: annotate upsdrv_shutdown() with noreturn attr --- drivers/al175.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/al175.c b/drivers/al175.c index 0e3275001b..56c2e92229 100644 --- a/drivers/al175.c +++ b/drivers/al175.c @@ -1229,6 +1229,9 @@ void upsdrv_updateinfo(void) } +void upsdrv_shutdown(void) + __attribute__((noreturn)); + void upsdrv_shutdown(void) { /* TODO use TOGGLE_PRS_ONOFF for shutdown */ From a6195ab3ec9305fe870a3d28b7d69aa9ea2ea4cc Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 19:31:38 +0100 Subject: [PATCH 25/32] drivers/powercom.c: annotate shutdown*() with noreturn attr --- drivers/powercom.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/powercom.c b/drivers/powercom.c index f74cd618c0..289ab0dad1 100644 --- a/drivers/powercom.c +++ b/drivers/powercom.c @@ -284,6 +284,9 @@ static unsigned int OPTImodels[] = {0,0,0,575,0,0,0,0,0,0,0,0,0,0,0,0}; * local used functions */ +static void shutdown_halt(void) + __attribute__((noreturn)); + static void shutdown_halt(void) { ser_send_char (upsfd, SHUTDOWN); @@ -294,6 +297,9 @@ static void shutdown_halt(void) exit (0); } +static void shutdown_ret(void) + __attribute__((noreturn)); + static void shutdown_ret(void) { ser_send_char (upsfd, RESTART); From c5add0c0095f01e4788fa62fe4100cb56468abfa Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 19:36:17 +0100 Subject: [PATCH 26/32] drivers/riello_usb.c: annotate shutdown*() with noreturn attr --- drivers/riello_usb.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/riello_usb.c b/drivers/riello_usb.c index 48ff03a956..97b699c05d 100644 --- a/drivers/riello_usb.c +++ b/drivers/riello_usb.c @@ -952,6 +952,9 @@ void upsdrv_initinfo(void) upsh.instcmd = riello_instcmd; } +void upsdrv_shutdown(void) + __attribute__((noreturn)); + void upsdrv_shutdown(void) { /* tell the UPS to shut down, then return - DO NOT SLEEP HERE */ From 595a79fa7f2aa0897ae6f71b62d2ac0ae4cbafe6 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 19:51:04 +0100 Subject: [PATCH 27/32] drivers/powercom.c: annotate upsdrv_shutdown() with noreturn attr --- drivers/powercom.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/powercom.c b/drivers/powercom.c index 289ab0dad1..37ac3f7d59 100644 --- a/drivers/powercom.c +++ b/drivers/powercom.c @@ -825,6 +825,9 @@ void upsdrv_updateinfo(void) } /* shutdown UPS */ +void upsdrv_shutdown(void) + __attribute__((noreturn)); + void upsdrv_shutdown(void) { /* power down the attached load immediately */ From bbdea1682536226514a562a566810444923bd4c8 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 19:53:56 +0100 Subject: [PATCH 28/32] drivers/powerman-pdu.c: annotate upsdrv_shutdown() with noreturn attr --- drivers/powerman-pdu.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/powerman-pdu.c b/drivers/powerman-pdu.c index 80c6a8b8f6..087ac71854 100644 --- a/drivers/powerman-pdu.c +++ b/drivers/powerman-pdu.c @@ -133,6 +133,9 @@ void upsdrv_initinfo(void) /* FIXME: no need for setvar (ex for outlet.n.delay.*)!? */ } +void upsdrv_shutdown(void) + __attribute__((noreturn)); + void upsdrv_shutdown(void) { /* FIXME: shutdown all outlets? */ From 9043ede8846e8b77c0637bd9e192d7f392527357 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 22:27:57 +0100 Subject: [PATCH 29/32] drivers/powercom.c: wrap unreachable exit() added due to earlier compiler warnings with "ifndef HAVE___ATTRIBUTE__NORETURN" to avoid opposite warnings now --- drivers/powercom.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/powercom.c b/drivers/powercom.c index 37ac3f7d59..86c6c2372d 100644 --- a/drivers/powercom.c +++ b/drivers/powercom.c @@ -320,12 +320,19 @@ static int instcmd (const char *cmdname, const char *extra) return STAT_INSTCMD_HANDLED; } if (!strcasecmp(cmdname, "shutdown.return")) { + /* NOTE: In this context, "return" is UPS behavior after the + * wall-power gets restored. The routine exits the driver anyway. + */ shutdown_ret(); +#ifndef HAVE___ATTRIBUTE__NORETURN return STAT_INSTCMD_HANDLED; +#endif } if (!strcasecmp(cmdname, "shutdown.stayoff")) { shutdown_halt(); +#ifndef HAVE___ATTRIBUTE__NORETURN return STAT_INSTCMD_HANDLED; +#endif } upslogx(LOG_NOTICE, "instcmd: unknown command [%s] [%s]", cmdname, extra); From 3d7ce46da29af2591d4800b037e72eb682ff903d Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 22:30:14 +0100 Subject: [PATCH 30/32] drivers/netxml-ups.c: netxml_alarm_subscribe(): explicitly cast range-limited int conversions --- drivers/netxml-ups.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/netxml-ups.c b/drivers/netxml-ups.c index 39bbff37aa..256d4a6aca 100644 --- a/drivers/netxml-ups.c +++ b/drivers/netxml-ups.c @@ -799,8 +799,8 @@ static int netxml_alarm_subscribe(const char *page) } /* Range of valid values constrained above */ - port = tmp_port; - secret = tmp_secret; + port = (int)tmp_port; + secret = (int)tmp_secret; } From 839a7e421b9b2b0f9e55c405d86f9a85818292be Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 19:24:57 +0100 Subject: [PATCH 31/32] drivers/al175.c: declare function(void) prototypes explicitly --- drivers/al175.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/al175.c b/drivers/al175.c index 56c2e92229..a617b919eb 100644 --- a/drivers/al175.c +++ b/drivers/al175.c @@ -1000,23 +1000,23 @@ typedef int VV_t; /* voltage */ #define ACT int /* Declare to keep compiler happy even if some routines below are not used currently */ -ACT TOGGLE_PRS_ONOFF (); -ACT CANCEL_BOOST (); -ACT STOP_BATTERY_TEST (); +ACT TOGGLE_PRS_ONOFF (void); +ACT CANCEL_BOOST (void); +ACT STOP_BATTERY_TEST (void); ACT START_BATTERY_TEST (VV_t EndVolt, unsigned Minutes); ACT SET_FLOAT_VOLTAGE (VV_t v); ACT SET_BOOST_VOLTAGE (VV_t v); ACT SET_HIGH_BATTERY_LIMIT (VV_t Vhigh); ACT SET_LOW_BATTERY_LIMIT (VV_t Vlow); ACT SET_DISCONNECT_LEVEL_AND_DELAY (VV_t level, mm_t delay); -ACT RESET_ALARMS (); -ACT CHANGE_COMM_PROTOCOL (); +ACT RESET_ALARMS (void); +ACT CHANGE_COMM_PROTOCOL (void); ACT SET_VOLTAGE_AT_ZERO_T (VV_t v); ACT SET_SLOPE_AT_ZERO_T (VV_t mv_per_degree); ACT SET_MAX_TCOMP_VOLTAGE (VV_t v); ACT SET_MIN_TCOMP_VOLTAGE (VV_t v); ACT SWITCH_TEMP_COMP (int on); -ACT SWITCH_SYM_ALARM (); +ACT SWITCH_SYM_ALARM (void); /* Implement */ ACT TOGGLE_PRS_ONOFF () { return al175_do(0x81, 0x80 Z3); } From 91403768a92ad92d0785d172f8250909aa5e971e Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Nov 2020 22:10:40 +0100 Subject: [PATCH 32/32] tools/nut-scanner/scan_snmp.c: do not wrap variable definitions into parentheses like function pointers --- tools/nut-scanner/scan_snmp.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/nut-scanner/scan_snmp.c b/tools/nut-scanner/scan_snmp.c index 2056a3774a..e14721c017 100644 --- a/tools/nut-scanner/scan_snmp.c +++ b/tools/nut-scanner/scan_snmp.c @@ -99,11 +99,11 @@ static int (*nut_generate_Ku)(const oid * hashtype, u_int hashtype_len, unsigned char * P, size_t pplen, unsigned char * Ku, size_t * kulen); static char* (*nut_snmp_out_toggle_options)(char *options); static const char * (*nut_snmp_api_errstring) (int snmp_errnumber); -static int (*nut_snmp_errno); -static oid (*nut_usmAESPrivProtocol); -static oid (*nut_usmHMACMD5AuthProtocol); -static oid (*nut_usmHMACSHA1AuthProtocol); -static oid (*nut_usmDESPrivProtocol); +static int *nut_snmp_errno; +static oid *nut_usmAESPrivProtocol; +static oid *nut_usmHMACMD5AuthProtocol; +static oid *nut_usmHMACSHA1AuthProtocol; +static oid *nut_usmDESPrivProtocol; /* return 0 on error; visible externally */ int nutscan_load_snmp_library(const char *libname_path);