From 45ed68e8b86d6ae6543eb5f253cbec15c382d0b1 Mon Sep 17 00:00:00 2001 From: Steve Karg Date: Mon, 9 Feb 2026 16:01:06 -0600 Subject: [PATCH] Added bacfile_read_offset() API to read offsets into a file during a restore after a backup. --- src/bacnet/basic/object/bacfile.c | 26 ++++++++++++++++++++++++++ src/bacnet/basic/object/bacfile.h | 6 ++++++ 2 files changed, 32 insertions(+) diff --git a/src/bacnet/basic/object/bacfile.c b/src/bacnet/basic/object/bacfile.c index 5df46830..eec4f903 100644 --- a/src/bacnet/basic/object/bacfile.c +++ b/src/bacnet/basic/object/bacfile.c @@ -550,6 +550,32 @@ bacfile_read(uint32_t object_instance, uint8_t *buffer, uint32_t buffer_size) return (uint32_t)file_size; } +/** + * @brief Read the entire file into a buffer + * @param object_instance - object-instance number of the object + * @param offset - offset in bytes from the beginning of the file + * @param buffer - data store from the file + * @param buffer_size - in bytes + * @return number of bytes read, or 0 if not successful + */ +uint32_t bacfile_read_offset( + uint32_t object_instance, + int32_t offset, + uint8_t *buffer, + uint32_t buffer_size) +{ + const char *pathname = NULL; + long file_size = 0; + + pathname = bacfile_pathname(object_instance); + if (pathname) { + file_size = bacfile_read_stream_data_callback( + pathname, offset, buffer, buffer_size); + } + + return (uint32_t)file_size; +} + /** * @brief Write the entire file from a buffer * @param object_instance - object-instance number of the object diff --git a/src/bacnet/basic/object/bacfile.h b/src/bacnet/basic/object/bacfile.h index abc677c3..18627e6e 100644 --- a/src/bacnet/basic/object/bacfile.h +++ b/src/bacnet/basic/object/bacfile.h @@ -119,6 +119,12 @@ BACNET_STACK_EXPORT uint32_t bacfile_read(uint32_t object_instance, uint8_t *buffer, uint32_t buffer_size); BACNET_STACK_EXPORT +uint32_t bacfile_read_offset( + uint32_t object_instance, + int32_t offset, + uint8_t *buffer, + uint32_t buffer_size); +BACNET_STACK_EXPORT uint32_t bacfile_write( uint32_t object_instance, const uint8_t *buffer, uint32_t buffer_size); BACNET_STACK_EXPORT