Fixes the CreateObject service list-of-initial-values encoding and decoding by refactoring the data structure to be similar to WriteProperty. The implementation changes from using a linked list of property values to using a flat buffer approach with delayed decoding.
Changes:
* Refactored BACNET_CREATE_OBJECT_DATA structure to use an application_data buffer instead of a linked list for initial values
* Added a new create_object_process() and create_object_initializer_list_process() functions to centralize object creation logic and error reporting
* Updated all device implementations to use the new centralized creation functions
* Enhanced the create-object example application to support command-line specification of initial property values
* Added comprehensive test coverage for the new encoding/decoding and processing functions
* Fixed BACnet file object path name unintended path traversals by optionally restricting path name content with BACNET_FILE_PATH_RESTRICTED define.
* Added POSIX file path name checking for AtomicReadFile and AtomicWriteFile example applications. Prohibits use of relative and absolute file paths when BACNET_FILE_PATH_RESTRICTED is non-zero.
* Fixed tokenizer_string() off-by-one buffer overflow when processing string literals longer than the buffer limit.
* Fixed ubasic potential string buffer overflows by using snprintf instead of sprintf.
* Fixed ubasic label strings to use UBASIC_LABEL_LEN_MAX as buffer limit.
* Fixed ubasic string variables to initialize with zeros.
* Fixed compile errors when UBASIC_DEBUG_STRINGVARIABLES is defined.
* Added ubasic string variables user accessor API and unit testing for ubasic string variables.
* Fixed tokenizer_label() off-by-one buffer overflow when processing string literals longer than the buffer limit.
missing include asm/ioctls.h with error 'TCGETS2' undeclared
The gcc warning "overflow in conversion from 'long unsigned int' to 'int' changes value from '2150388778' to '-2144578518' " can be surrpres wtith a musl patch
https://gist.github.com/stargieg/3dbfe94b5776d9dfb3e14d18ee43aade
from the musl mailing list with discussion on this bug, but no solution.
[PATCH] ioctl: Fix implicit constant conversion overflow
https://www.openwall.com/lists/musl/2024/06/01/1
* fix mstp on macos NS_PER_S is 1s and 0ns
* fix compile on freebsd
* port bsd: add compile warnings and comments
* port bsd: limit pthred prio to OS defined min/max value
e.g. FreeBSD min=0 max=31
* port bsd: fix clangformat
* Fixed lighting-output object blink warn to honor blink-warn-enable.
* Fixed the blink warn logic for a non-zero percent value blink inhibit.
* Fixed the warn relinquish to actually relinquish.
* Refactored BACnetShedLevel encoding, decoding, and printing into separate file. Added unit testing.
* Added API to load control object for shed-level, start-time, duty-window, full-duty-baseline, and enable.
* Fixed bacapp sprintf for shed level and host-n-port found in scan build.
* Refactored the object-id to and from 32-bit value so channel-value could re-use the same API.
* Expanded the BACnetChannelValue coercion function to include all the coercions, no coercions, and invalid datatypes described in Table 12-63 of the Channel object. Expanded unit testing code coverage for BACnetChannelValue.
* Updated documentation for encode functions to accurately describe return values (0 on error instead of BACNET_STATUS_ERROR)
* Expanded property support, removed INPUT object types, added fallback encoding for non-coerced data types, and updated error handling in ReadProperty of present-value to check for 0 instead of BACNET_STATUS_ERROR.
* Expanded the validation tests and increased test code coverage.
* Enhanced string comparison functions and update indtext API usage
- Added library specific case-sensitive and case-insensitive string comparison functions that mimic strcmp.
- Updated indtext_by_string and indtext_by_istring to use the new comparison functions.
- Improved documentation for return values in indtext functions.
- Expanded test data in main.c for comprehensive testing when beginning of string matches another string.
* Added bacnet_str functions for parsing various numeric strings.
* Renamed BACnet string API to be clearer when no stdlib function exists.
* Fixed incompatible types - from 'BACNET_UNSIGNED_INTEGER *' to 'unsigned long *' warning
* Changed bacnet-str-to functions to use ERANGE for error detection.
* Refactored some apps to use common string parsing for BACnet data types.
* Refactor bacapp_parse_application_data to use bacnet_string_to_unsigned for better clarity
* Added strtol for BACnetEventType.
* Added BACnetRecipient and BACnetAddressBinding encoding, decoding, ASCII conversion, comparison, and copy functions.
* Added library specific string manipulation utilities including strcmp, strncmp, stptok, and snprintf with offset functions.
* Added test/README about verification and validation testing.