Corrected wildcard time and date parsing. Bug found by unit test.

This commit is contained in:
skarg
2012-05-12 14:17:00 +00:00
parent e9098c2cfa
commit 287fce78be
+13 -2
View File
@@ -1411,7 +1411,7 @@ bool bacapp_parse_application_data(
break;
case BACNET_APPLICATION_TAG_DATE:
count =
sscanf(argv, "%4d/%2d/%2d:%2d", &year, &month, &day, &wday);
sscanf(argv, "%4d/%3d/%3d:%3d", &year, &month, &day, &wday);
if (count == 3) {
datetime_set_date(&value->type.Date, (uint16_t) year,
(uint8_t) month, (uint8_t) day);
@@ -1426,7 +1426,7 @@ bool bacapp_parse_application_data(
break;
case BACNET_APPLICATION_TAG_TIME:
count =
sscanf(argv, "%2d:%2d:%2d.%2d", &hour, &min, &sec,
sscanf(argv, "%3d:%3d:%3d.%3d", &hour, &min, &sec,
&hundredths);
if (count == 4) {
value->type.Time.hour = (uint8_t) hour;
@@ -2063,6 +2063,17 @@ void testBACnetApplicationData(
ct_test(pTest, value.type.Time.hundredths == 0);
ct_test(pTest, testBACnetApplicationDataValue(&value));
/* Wildcard Values */
status =
bacapp_parse_application_data(BACNET_APPLICATION_TAG_TIME,
"255:255:255.255", &value);
ct_test(pTest, status == true);
ct_test(pTest, value.type.Time.hour == 255);
ct_test(pTest, value.type.Time.min == 255);
ct_test(pTest, value.type.Time.sec == 255);
ct_test(pTest, value.type.Time.hundredths == 255);
ct_test(pTest, testBACnetApplicationDataValue(&value));
status =
bacapp_parse_application_data(BACNET_APPLICATION_TAG_OBJECT_ID,
"0:100", &value);