From c8671d54f719bbb616a4a125f2324640822f44c7 Mon Sep 17 00:00:00 2001 From: Steve Karg Date: Wed, 17 Aug 2022 23:23:26 -0500 Subject: [PATCH] Fix warnings found by splint (#324) * Fix warnings found by splint * Ignore Win32 Builder warnings about possible data loss for integers. * Fix Windows build warnings Co-authored-by: Steve Karg --- .gitignore | 6 +++--- CMakeLists.txt | 2 ++ apps/ack-alarm/main.c | 8 +++++--- apps/readprop/main.c | 14 +++++++++----- apps/readpropm/main.c | 4 +++- apps/readrange/main.c | 14 +++++++++----- apps/server-client/main.c | 6 ++++-- apps/ucov/main.c | 10 ++++++---- apps/whohas/main.c | 7 +++++-- apps/writeprop/main.c | 8 ++++++-- apps/writepropm/main.c | 6 ++++-- src/bacnet/basic/client/bac-data.c | 4 ++-- src/bacnet/basic/object/command.c | 4 +++- src/bacnet/basic/sys/color_rgb.c | 16 ++++++++-------- src/bacnet/event.c | 21 ++++++++++----------- 15 files changed, 79 insertions(+), 51 deletions(-) diff --git a/.gitignore b/.gitignore index e97c60e1..a8abf78f 100644 --- a/.gitignore +++ b/.gitignore @@ -61,10 +61,10 @@ bin/ Backup* BACnet_BDT_table address_cache -/build/* -/_build/* +**/build/* +**/_build/* CMakeLists.txt.user -/out/* +**/out/* Obj/ Release/ apps/piface/libmcp23s17/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 8fc0c716..ee3c29a0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -502,6 +502,8 @@ elseif(WIN32) $<$:ws2_32> $<$:iphlpapi>) + add_definitions("/W3 /D_CRT_SECURE_NO_WARNINGS /wd4244 /wd4018 /wd4267") + target_sources(${PROJECT_NAME} PRIVATE ports/win32/bacport.h $<$:ports/win32/bip6.c> diff --git a/apps/ack-alarm/main.c b/apps/ack-alarm/main.c index 9e0a73e1..c43eb540 100644 --- a/apps/ack-alarm/main.c +++ b/apps/ack-alarm/main.c @@ -235,6 +235,7 @@ int main(int argc, char *argv[]) time_t timeout_seconds = 0; bool found = false; long dnet = -1; + unsigned object_type = 0; BACNET_MAC_ADDRESS mac = { 0 }; BACNET_MAC_ADDRESS adr = { 0 }; BACNET_ADDRESS dest = { 0 }; @@ -289,8 +290,8 @@ int main(int argc, char *argv[]) target_args++; } else if (target_args == 2) { /* event-object-type */ - if (bactext_object_type_strtol(argv[argi], - &data.eventObjectIdentifier.type)) { + if (bactext_object_type_strtol(argv[argi], &object_type)) { + data.eventObjectIdentifier.type = object_type; target_args++; } else { fprintf(stderr, "event-object-type=%s invalid\n", @@ -305,7 +306,8 @@ int main(int argc, char *argv[]) } else if (target_args == 4) { /* event-state-acked */ if (bactext_event_state_strtol(argv[argi], - &data.eventStateAcked)) { + &object_type)) { + data.eventStateAcked = object_type; target_args++; } else { fprintf(stderr, "event-state=%s invalid\n", diff --git a/apps/readprop/main.c b/apps/readprop/main.c index a4da832e..09abd7b3 100644 --- a/apps/readprop/main.c +++ b/apps/readprop/main.c @@ -252,6 +252,8 @@ int main(int argc, char *argv[]) BACNET_ADDRESS dest = { 0 }; bool specific_address = false; int argi = 0; + unsigned object_type = 0; + unsigned object_property = 0; unsigned int target_args = 0; char *filename = NULL; @@ -296,20 +298,22 @@ int main(int argc, char *argv[]) target_args++; } else if (target_args == 1) { if (bactext_object_type_strtol( - argv[argi], &Target_Object_Type) == false) { + argv[argi], &object_type) == false) { fprintf(stderr, "object-type=%s invalid\n", argv[argi]); return 1; } + Target_Object_Type = object_type; target_args++; } else if (target_args == 2) { Target_Object_Instance = strtol(argv[argi], NULL, 0); target_args++; } else if (target_args == 3) { if (bactext_property_strtol( - argv[argi], &Target_Object_Property) == false) { + argv[argi], &object_property) == false) { fprintf(stderr, "property=%s invalid\n", argv[argi]); return 1; } + Target_Object_Property = object_property; target_args++; } else if (target_args == 4) { Target_Object_Index = strtol(argv[argi], NULL, 0); @@ -399,7 +403,7 @@ int main(int argc, char *argv[]) } if (Error_Detected) { break; -} + } /* wait until the device is bound, or timeout and quit */ if (!found) { found = address_bind_request( @@ -441,9 +445,9 @@ int main(int argc, char *argv[]) /* keep track of time for next check */ last_seconds = current_seconds; } - if (Error_Detected) { return 1; -} + } + return 0; } diff --git a/apps/readpropm/main.c b/apps/readpropm/main.c index e7d3b143..0229b067 100644 --- a/apps/readpropm/main.c +++ b/apps/readpropm/main.c @@ -359,6 +359,7 @@ int main(int argc, char *argv[]) int scan_count = 0; int argi = 0; long dnet = -1; + unsigned object_type = 0; BACNET_MAC_ADDRESS mac = { 0 }; BACNET_MAC_ADDRESS adr = { 0 }; bool specific_address = false; @@ -425,12 +426,13 @@ int main(int argc, char *argv[]) atexit(cleanup); } status = bactext_object_type_strtol( - argv[argi], &rpm_object->object_type); + argv[argi], &object_type); if (status == false) { fprintf(stderr, "Error: object-type=%s invalid\n", argv[argi]); return 1; } + rpm_object->object_type = object_type; if (rpm_object->object_type >= MAX_BACNET_OBJECT_TYPE) { fprintf(stderr, "object-type=%u - it must be less than %u\n", diff --git a/apps/readrange/main.c b/apps/readrange/main.c index e903e449..c57d303b 100644 --- a/apps/readrange/main.c +++ b/apps/readrange/main.c @@ -203,6 +203,8 @@ int main(int argc, char *argv[]) int count = 0; int hour, min, sec, hundredths; int year, month, day, wday; + unsigned object_type = 0; + unsigned object_property = 0; char *filename = NULL; filename = filename_remove_path(argv[0]); @@ -228,15 +230,17 @@ int main(int argc, char *argv[]) } /* decode the command line parameters */ Target_Device_Object_Instance = strtol(argv[1], NULL, 0); - if (bactext_object_type_strtol(argv[2], &Target_Object_Type) == false) { + if (bactext_object_type_strtol(argv[2], &object_type) == false) { fprintf(stderr, "object-type=%s invalid\n", argv[2]); return 1; } + Target_Object_Type = object_type; Target_Object_Instance = strtol(argv[3], NULL, 0); - if (bactext_property_strtol(argv[4], &Target_Object_Property) == false) { + if (bactext_property_strtol(argv[4], &object_property) == false) { fprintf(stderr, "property=%s invalid\n", argv[4]); return 1; } + Target_Object_Property = object_property; Target_Object_Range_Type = strtol(argv[5], NULL, 0); /* some bounds checking */ if (Target_Device_Object_Instance > BACNET_MAX_INSTANCE) { @@ -356,7 +360,7 @@ int main(int argc, char *argv[]) } if (Error_Detected) { break; -} + } /* wait until the device is bound, or timeout and quit */ if (!found) { found = address_bind_request( @@ -396,9 +400,9 @@ int main(int argc, char *argv[]) /* keep track of time for next check */ last_seconds = current_seconds; } - if (Error_Detected) { return 1; -} + } + return 0; } diff --git a/apps/server-client/main.c b/apps/server-client/main.c index 3d2d8eb4..17ffb7a8 100644 --- a/apps/server-client/main.c +++ b/apps/server-client/main.c @@ -91,6 +91,7 @@ int main(int argc, char *argv[]) struct mstimer print_value_timer = { 0 }; float float_value = 0.0; bool bool_value = false; + unsigned object_type = 0; uint32_t unsigned_value = 0; /* data from the command line */ unsigned long print_seconds = 10; @@ -132,11 +133,12 @@ int main(int argc, char *argv[]) target_device_object_instance = strtol(argv[argi], NULL, 0); target_args++; } else if (target_args == 1) { - if (bactext_object_type_strtol( - argv[argi], &target_object_type) == false) { + if (bactext_object_type_strtol(argv[argi], &object_type) == + false) { fprintf(stderr, "object-type=%s invalid\n", argv[argi]); return 1; } + target_object_type = object_type; target_args++; } else if (target_args == 2) { target_object_instance = strtol(argv[argi], NULL, 0); diff --git a/apps/ucov/main.c b/apps/ucov/main.c index 7caa4ae0..160afd89 100644 --- a/apps/ucov/main.c +++ b/apps/ucov/main.c @@ -73,7 +73,8 @@ int main(int argc, char *argv[]) BACNET_COV_DATA cov_data; BACNET_PROPERTY_VALUE value_list; uint8_t tag; - unsigned int uint; + unsigned object_type = 0; + unsigned object_property = 0; if (argc < 7) { /* note: priority 16 and 0 should produce the same end results... */ @@ -173,20 +174,21 @@ int main(int argc, char *argv[]) /* decode the command line parameters */ cov_data.subscriberProcessIdentifier = strtol(argv[1], NULL, 0); cov_data.initiatingDeviceIdentifier = strtol(argv[2], NULL, 0); - if (bactext_object_type_strtol(argv[3], &uint) == false) { + if (bactext_object_type_strtol(argv[3], &object_type) == false) { fprintf(stderr, "error: object-type=%s invalid\n", argv[3]); return 1; } - cov_data.monitoredObjectIdentifier.type = (uint16_t)uint; + cov_data.monitoredObjectIdentifier.type = (uint16_t)object_type; cov_data.monitoredObjectIdentifier.instance = strtol(argv[4], NULL, 0); cov_data.timeRemaining = strtol(argv[5], NULL, 0); cov_data.listOfValues = &value_list; value_list.next = NULL; - if (bactext_property_strtol(argv[6], &value_list.propertyIdentifier) == + if (bactext_property_strtol(argv[6], &object_property) == false) { fprintf(stderr, "property=%s invalid\n", argv[6]); return 1; } + value_list.propertyIdentifier = object_property; tag = strtol(argv[7], NULL, 0); value_string = argv[8]; /* optional priority */ diff --git a/apps/whohas/main.c b/apps/whohas/main.c index 9ed386f2..a5068345 100644 --- a/apps/whohas/main.c +++ b/apps/whohas/main.c @@ -135,6 +135,7 @@ int main(int argc, char *argv[]) time_t current_seconds = 0; time_t timeout_seconds = 0; int argi = 0; + unsigned object_type = 0; bool by_name = false; if (argc < 2) { @@ -157,10 +158,11 @@ int main(int argc, char *argv[]) } else if (argc < 4) { /* bacwh 8 1234 */ Target_Object_Instance_Min = Target_Object_Instance_Max = -1; - if (bactext_object_type_strtol(argv[1], &Target_Object_Type) == false) { + if (bactext_object_type_strtol(argv[1], &object_type) == false) { fprintf(stderr, "object-type=%s invalid\n", argv[1]); return 1; } + Target_Object_Type = object_type; Target_Object_Instance = strtol(argv[2], NULL, 0); } else if (argc < 5) { /* bacwh 0 4194303 "name" */ @@ -172,10 +174,11 @@ int main(int argc, char *argv[]) /* bacwh 0 4194303 8 1234 */ Target_Object_Instance_Min = strtol(argv[1], NULL, 0); Target_Object_Instance_Max = strtol(argv[2], NULL, 0); - if (bactext_object_type_strtol(argv[3], &Target_Object_Type) == false) { + if (bactext_object_type_strtol(argv[3], &object_type) == false) { fprintf(stderr, "object-type=%s invalid\n", argv[3]); return 1; } + Target_Object_Type = object_type; Target_Object_Instance = strtol(argv[4], NULL, 0); } else { print_usage(filename_remove_path(argv[0])); diff --git a/apps/writeprop/main.c b/apps/writeprop/main.c index d8ede11a..2e8f3cf8 100644 --- a/apps/writeprop/main.c +++ b/apps/writeprop/main.c @@ -239,6 +239,8 @@ int main(int argc, char *argv[]) uint16_t pdu_len = 0; unsigned timeout = 100; /* milliseconds */ unsigned max_apdu = 0; + unsigned object_type = 0; + unsigned object_property = 0; time_t elapsed_seconds = 0; time_t last_seconds = 0; time_t current_seconds = 0; @@ -275,15 +277,17 @@ int main(int argc, char *argv[]) } /* decode the command line parameters */ Target_Device_Object_Instance = strtol(argv[1], NULL, 0); - if (bactext_object_type_strtol(argv[2], &Target_Object_Type) == false) { + if (bactext_object_type_strtol(argv[2], &object_type) == false) { fprintf(stderr, "object-type=%s invalid\n", argv[2]); return 1; } + Target_Object_Type = object_type; Target_Object_Instance = strtol(argv[3], NULL, 0); - if (bactext_property_strtol(argv[4], &Target_Object_Property) == false) { + if (bactext_property_strtol(argv[4], &object_property) == false) { fprintf(stderr, "property=%s invalid\n", argv[4]); return 1; } + Target_Object_Property = object_property; Target_Object_Property_Priority = (uint8_t)strtol(argv[5], NULL, 0); Target_Object_Property_Index = strtol(argv[6], NULL, 0); if (Target_Object_Property_Index == -1) { diff --git a/apps/writepropm/main.c b/apps/writepropm/main.c index d3b82c40..3f1c9ea8 100644 --- a/apps/writepropm/main.c +++ b/apps/writepropm/main.c @@ -277,6 +277,7 @@ int main(int argc, char *argv[]) bool status = false; BACNET_APPLICATION_TAG property_tag; uint8_t context_tag = 0; + unsigned object_type = 0; unsigned property_id = 0; unsigned property_array_index = 0; int scan_count = 0; @@ -318,12 +319,13 @@ int main(int argc, char *argv[]) arg_sets = 0; while (wpm_object) { tag_value_arg = 2 + (arg_sets * 6); - if (bactext_object_type_strtol( - argv[tag_value_arg], &wpm_object->object_type) == false) { + if (bactext_object_type_strtol(argv[tag_value_arg], &object_type) == + false) { fprintf( stderr, "Error: object-type=%s invalid\n", argv[tag_value_arg]); return 1; } + wpm_object->object_type = object_type; tag_value_arg++; args_remaining--; if (Verbose) { diff --git a/src/bacnet/basic/client/bac-data.c b/src/bacnet/basic/client/bac-data.c index 29671e76..65a9636a 100644 --- a/src/bacnet/basic/client/bac-data.c +++ b/src/bacnet/basic/client/bac-data.c @@ -114,8 +114,8 @@ static void bacnet_data_object_store(int index, { BACNET_DATA_OBJECT *object = NULL; - assert(rp_data); - assert(value); + assert(rp_data != NULL); + assert(value != NULL); if ((index < BACNET_DATA_OBJECT_MAX) && (!value->context_specific)) { object = &Object_Table[index]; switch (rp_data->object_property) { diff --git a/src/bacnet/basic/object/command.c b/src/bacnet/basic/object/command.c index 928f7cc7..cb72b4f1 100644 --- a/src/bacnet/basic/object/command.c +++ b/src/bacnet/basic/object/command.c @@ -164,6 +164,7 @@ int cl_decode_apdu(uint8_t *apdu, int dec_len = 0; uint8_t tag_number = 0; uint32_t len_value_type = 0; + uint32_t enum_value = 0; BACNET_UNSIGNED_INTEGER unsigned_value = 0; if (decode_is_context_tag(&apdu[dec_len], 0)) { @@ -195,10 +196,11 @@ int cl_decode_apdu(uint8_t *apdu, return BACNET_STATUS_REJECT; } len = decode_enumerated( - &apdu[dec_len], len_value_type, &bcl->Property_Identifier); + &apdu[dec_len], len_value_type, &enum_value); if (len < 0) { return BACNET_STATUS_REJECT; } + bcl->Property_Identifier = enum_value; dec_len += len; if (decode_is_context_tag(&apdu[dec_len], 3)) { len = decode_tag_number_and_value( diff --git a/src/bacnet/basic/sys/color_rgb.c b/src/bacnet/basic/sys/color_rgb.c index d40d3936..80e86bbd 100644 --- a/src/bacnet/basic/sys/color_rgb.c +++ b/src/bacnet/basic/sys/color_rgb.c @@ -121,7 +121,7 @@ void color_rgb_from_xy(uint8_t *red, uint8_t *green, uint8_t *blue, float x = x_coordinate; float y = y_coordinate; float z = 1.0f - x - y; - float Y = brightness; + float Y = (float)brightness; Y /= 255.0f; float X = (Y / y) * x; float Z = (Y / y) * z; @@ -448,17 +448,17 @@ void color_rgb_from_temperature( /* Red values below 6600 K are always 255 */ red = 255.0; } else { - red = temperature_kelvin - 60; + red = (float)(temperature_kelvin - 60); red = 329.698727446 * pow(red, -0.1332047592); red = clamp(red, 0.0, 255.0); } /* Calculate Green */ if (temperature_kelvin <= 66) { /* Green values below 6600 K */ - green = temperature_kelvin; + green = (float)temperature_kelvin; green = 99.4708025861 * log(green) - 161.1195681661; } else { - green = temperature_kelvin - 60; + green = (float)(temperature_kelvin - 60); green = 288.1221695283 * pow(green, -0.0755148492); } green = clamp(green, 0.0, 255.0); @@ -470,17 +470,17 @@ void color_rgb_from_temperature( /* Blue values below 1900 K */ blue = 0.0; } else { - blue = temperature_kelvin - 10; + blue = (float)(temperature_kelvin - 10); blue = 138.5177312231 * log(blue) - 305.0447927307; blue = clamp(blue, 0, 255); } if (r) { - *r = red; + *r = (uint8_t)red; } if (g) { - *g = green; + *g = (uint8_t)green; } if (b) { - *b = blue; + *b = (uint8_t)blue; } } diff --git a/src/bacnet/event.c b/src/bacnet/event.c index cfb9352f..d29cb728 100644 --- a/src/bacnet/event.c +++ b/src/bacnet/event.c @@ -786,11 +786,11 @@ int event_notify_decode_service_request( if (-1 == (section_length = decode_enumerated(&apdu[len], len_value, - &data-> - notificationParams.commandFailure. - commandValue.binaryValue))) { + &enum_value))) { return -1; } + data->notificationParams.commandFailure. + commandValue.binaryValue = enum_value; break; case BACNET_APPLICATION_TAG_UNSIGNED_INT: @@ -836,13 +836,12 @@ int event_notify_decode_service_request( switch (tag_number) { case BACNET_APPLICATION_TAG_ENUMERATED: if (-1 == (section_length = - decode_enumerated(&apdu[len], - len_value, - &data-> - notificationParams.commandFailure. - feedbackValue.binaryValue))) { + decode_enumerated(&apdu[len], len_value, + &enum_value))) { return -1; } + data->notificationParams.commandFailure. + feedbackValue.binaryValue = enum_value; break; case BACNET_APPLICATION_TAG_UNSIGNED_INT: @@ -1060,12 +1059,12 @@ int event_notify_decode_service_request( case EVENT_ACCESS_EVENT: if (-1 == (section_length = decode_context_enumerated(&apdu[len], 0, - &data->notificationParams. - accessEvent.accessEvent))) { + &enum_value))) { return -1; } + data->notificationParams.accessEvent.accessEvent = + enum_value; len += section_length; - if (-1 == (section_length = decode_context_bitstring(&apdu[len], 1, &data->notificationParams.