Fixed BACnet basic file object to have dynamic name, mime-type, path. (#835)
This commit is contained in:
@@ -33,10 +33,10 @@
|
|||||||
#define FILE_RECORD_SIZE MAX_OCTET_STRING_BYTES
|
#define FILE_RECORD_SIZE MAX_OCTET_STRING_BYTES
|
||||||
#endif
|
#endif
|
||||||
struct object_data {
|
struct object_data {
|
||||||
const char *Object_Name;
|
char *Object_Name;
|
||||||
char *Pathname;
|
char *Pathname;
|
||||||
BACNET_DATE_TIME Modification_Date;
|
|
||||||
char *File_Type;
|
char *File_Type;
|
||||||
|
BACNET_DATE_TIME Modification_Date;
|
||||||
bool File_Access_Stream : 1;
|
bool File_Access_Stream : 1;
|
||||||
bool Read_Only : 1;
|
bool Read_Only : 1;
|
||||||
bool Archive : 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);
|
pObject = Keylist_Data(Object_List, object_instance);
|
||||||
if (pObject) {
|
if (pObject) {
|
||||||
if (pObject->Pathname) {
|
free(pObject->Pathname);
|
||||||
free(pObject->Pathname);
|
|
||||||
}
|
|
||||||
pObject->Pathname = bacfile_strdup(pathname);
|
pObject->Pathname = bacfile_strdup(pathname);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -154,9 +152,11 @@ uint32_t bacfile_pathname_instance(const char *pathname)
|
|||||||
count = Keylist_Count(Object_List);
|
count = Keylist_Count(Object_List);
|
||||||
while (count) {
|
while (count) {
|
||||||
pObject = Keylist_Data_Index(Object_List, index);
|
pObject = Keylist_Data_Index(Object_List, index);
|
||||||
if (strcmp(pathname, pObject->Pathname) == 0) {
|
if (pObject->Pathname) {
|
||||||
Keylist_Index_Key(Object_List, index, &key);
|
if (strcmp(pathname, pObject->Pathname) == 0) {
|
||||||
break;
|
Keylist_Index_Key(Object_List, index, &key);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
count--;
|
count--;
|
||||||
index++;
|
index++;
|
||||||
@@ -205,7 +205,7 @@ bool bacfile_object_name(
|
|||||||
*
|
*
|
||||||
* @return true if object-name was set
|
* @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 */
|
bool status = false; /* return value */
|
||||||
struct object_data *pObject;
|
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);
|
pObject = Keylist_Data(Object_List, object_instance);
|
||||||
if (pObject) {
|
if (pObject) {
|
||||||
status = true;
|
status = true;
|
||||||
pObject->Object_Name = new_name;
|
free(pObject->Object_Name);
|
||||||
|
pObject->Object_Name = bacfile_strdup(new_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
return status;
|
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);
|
pObject = Keylist_Data(Object_List, object_instance);
|
||||||
if (pObject) {
|
if (pObject) {
|
||||||
if (pObject->File_Type) {
|
free(pObject->File_Type);
|
||||||
if (strcmp(pObject->File_Type, mime_type) != 0) {
|
pObject->File_Type = bacfile_strdup(mime_type);
|
||||||
free(pObject->File_Type);
|
|
||||||
pObject->File_Type = bacfile_strdup(mime_type);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
pObject->File_Type = bacfile_strdup(mime_type);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1019,6 +1014,7 @@ uint32_t bacfile_create(uint32_t object_instance)
|
|||||||
if (pObject) {
|
if (pObject) {
|
||||||
pObject->Object_Name = NULL;
|
pObject->Object_Name = NULL;
|
||||||
pObject->Pathname = NULL;
|
pObject->Pathname = NULL;
|
||||||
|
pObject->File_Type = NULL;
|
||||||
/* April Fool's Day */
|
/* April Fool's Day */
|
||||||
datetime_set_values(
|
datetime_set_values(
|
||||||
&pObject->Modification_Date, 2006, 4, 1, 7, 0, 3, 1);
|
&pObject->Modification_Date, 2006, 4, 1, 7, 0, 3, 1);
|
||||||
@@ -1069,6 +1065,9 @@ void bacfile_cleanup(void)
|
|||||||
do {
|
do {
|
||||||
pObject = Keylist_Data_Pop(Object_List);
|
pObject = Keylist_Data_Pop(Object_List);
|
||||||
if (pObject) {
|
if (pObject) {
|
||||||
|
free(pObject->Pathname);
|
||||||
|
free(pObject->File_Type);
|
||||||
|
free(pObject->Object_Name);
|
||||||
free(pObject);
|
free(pObject);
|
||||||
}
|
}
|
||||||
} while (pObject);
|
} while (pObject);
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ BACNET_STACK_EXPORT
|
|||||||
bool bacfile_object_name(
|
bool bacfile_object_name(
|
||||||
uint32_t object_instance, BACNET_CHARACTER_STRING *object_name);
|
uint32_t object_instance, BACNET_CHARACTER_STRING *object_name);
|
||||||
BACNET_STACK_EXPORT
|
BACNET_STACK_EXPORT
|
||||||
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);
|
||||||
BACNET_STACK_EXPORT
|
BACNET_STACK_EXPORT
|
||||||
const char *bacfile_name_ansi(uint32_t object_instance);
|
const char *bacfile_name_ansi(uint32_t object_instance);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user