Fixed BACnet basic file object to have dynamic name, mime-type, path. (#835)

This commit is contained in:
Steve Karg
2024-10-29 13:30:03 -05:00
committed by GitHub
parent a38cc531d2
commit 089caf7e4b
2 changed files with 18 additions and 19 deletions
+17 -18
View File
@@ -33,10 +33,10 @@
#define FILE_RECORD_SIZE MAX_OCTET_STRING_BYTES
#endif
struct object_data {
const char *Object_Name;
char *Object_Name;
char *Pathname;
BACNET_DATE_TIME Modification_Date;
char *File_Type;
BACNET_DATE_TIME Modification_Date;
bool File_Access_Stream : 1;
bool Read_Only : 1;
bool Archive : 1;
@@ -131,9 +131,7 @@ void bacfile_pathname_set(uint32_t object_instance, const char *pathname)
pObject = Keylist_Data(Object_List, object_instance);
if (pObject) {
if (pObject->Pathname) {
free(pObject->Pathname);
}
free(pObject->Pathname);
pObject->Pathname = bacfile_strdup(pathname);
}
}
@@ -154,9 +152,11 @@ uint32_t bacfile_pathname_instance(const char *pathname)
count = Keylist_Count(Object_List);
while (count) {
pObject = Keylist_Data_Index(Object_List, index);
if (strcmp(pathname, pObject->Pathname) == 0) {
Keylist_Index_Key(Object_List, index, &key);
break;
if (pObject->Pathname) {
if (strcmp(pathname, pObject->Pathname) == 0) {
Keylist_Index_Key(Object_List, index, &key);
break;
}
}
count--;
index++;
@@ -205,7 +205,7 @@ bool bacfile_object_name(
*
* @return true if object-name was set
*/
bool bacfile_object_name_set(uint32_t object_instance, char *new_name)
bool bacfile_object_name_set(uint32_t object_instance, const char *new_name)
{
bool status = false; /* return value */
struct object_data *pObject;
@@ -213,7 +213,8 @@ bool bacfile_object_name_set(uint32_t object_instance, char *new_name)
pObject = Keylist_Data(Object_List, object_instance);
if (pObject) {
status = true;
pObject->Object_Name = new_name;
free(pObject->Object_Name);
pObject->Object_Name = bacfile_strdup(new_name);
}
return status;
@@ -438,14 +439,8 @@ void bacfile_file_type_set(uint32_t object_instance, const char *mime_type)
pObject = Keylist_Data(Object_List, object_instance);
if (pObject) {
if (pObject->File_Type) {
if (strcmp(pObject->File_Type, mime_type) != 0) {
free(pObject->File_Type);
pObject->File_Type = bacfile_strdup(mime_type);
}
} else {
pObject->File_Type = bacfile_strdup(mime_type);
}
free(pObject->File_Type);
pObject->File_Type = bacfile_strdup(mime_type);
}
}
@@ -1019,6 +1014,7 @@ uint32_t bacfile_create(uint32_t object_instance)
if (pObject) {
pObject->Object_Name = NULL;
pObject->Pathname = NULL;
pObject->File_Type = NULL;
/* April Fool's Day */
datetime_set_values(
&pObject->Modification_Date, 2006, 4, 1, 7, 0, 3, 1);
@@ -1069,6 +1065,9 @@ void bacfile_cleanup(void)
do {
pObject = Keylist_Data_Pop(Object_List);
if (pObject) {
free(pObject->Pathname);
free(pObject->File_Type);
free(pObject->Object_Name);
free(pObject);
}
} while (pObject);