Moved ltrim, rtrim, and trim string functions into the bacstr library. (#1159)
This commit is contained in:
+3
-2
@@ -17,8 +17,9 @@ The git repositories are hosted at the following sites:
|
|||||||
### Security
|
### Security
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
* Added BACnet library itoa, ltoa, ultoa, dtoa, and utoa ASCII
|
* Added library specific ltrim, rtrim, and trim string functions. (#1159)
|
||||||
functions for ease of printing formatted values. (#1157)
|
* Added library specific itoa, ltoa, ultoa, dtoa, utoa, and general
|
||||||
|
print format with ASCII return functions. (#1157)
|
||||||
* Added library specific string-to functions similar to stdlib.
|
* Added library specific string-to functions similar to stdlib.
|
||||||
Added library specific string-to functions for BACnet primitives. (#1151)
|
Added library specific string-to functions for BACnet primitives. (#1151)
|
||||||
|
|
||||||
|
|||||||
+4
-38
@@ -4120,40 +4120,6 @@ bool bacapp_print_value(
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef BACAPP_PRINT_ENABLED
|
#ifdef BACAPP_PRINT_ENABLED
|
||||||
static char *ltrim(char *str, const char *trimmedchars)
|
|
||||||
{
|
|
||||||
if (str[0] == 0) {
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
while (strchr(trimmedchars, *str)) {
|
|
||||||
str++;
|
|
||||||
}
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
static char *rtrim(char *str, const char *trimmedchars)
|
|
||||||
{
|
|
||||||
char *end;
|
|
||||||
|
|
||||||
if (str[0] == 0) {
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
end = str + strlen(str) - 1;
|
|
||||||
while (strchr(trimmedchars, *end)) {
|
|
||||||
*end = 0;
|
|
||||||
if (end == str) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
end--;
|
|
||||||
}
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
|
|
||||||
static char *trim(char *str, const char *trimmedchars)
|
|
||||||
{
|
|
||||||
return ltrim(rtrim(str, trimmedchars), trimmedchars);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(BACAPP_WEEKLY_SCHEDULE)
|
#if defined(BACAPP_WEEKLY_SCHEDULE)
|
||||||
static bool
|
static bool
|
||||||
parse_weeklyschedule(char *str, BACNET_APPLICATION_DATA_VALUE *value)
|
parse_weeklyschedule(char *str, BACNET_APPLICATION_DATA_VALUE *value)
|
||||||
@@ -4183,7 +4149,7 @@ parse_weeklyschedule(char *str, BACNET_APPLICATION_DATA_VALUE *value)
|
|||||||
|
|
||||||
/* Parse the inner tag */
|
/* Parse the inner tag */
|
||||||
chunk = strtok(str, ";");
|
chunk = strtok(str, ";");
|
||||||
chunk = ltrim(chunk, "(");
|
chunk = bacnet_ltrim(chunk, "(");
|
||||||
if (false ==
|
if (false ==
|
||||||
bacapp_parse_application_data(
|
bacapp_parse_application_data(
|
||||||
BACNET_APPLICATION_TAG_UNSIGNED_INT, chunk, &dummy_value)) {
|
BACNET_APPLICATION_TAG_UNSIGNED_INT, chunk, &dummy_value)) {
|
||||||
@@ -4208,7 +4174,7 @@ parse_weeklyschedule(char *str, BACNET_APPLICATION_DATA_VALUE *value)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Extract the inner list of time-values */
|
/* Extract the inner list of time-values */
|
||||||
chunk = rtrim(ltrim(chunk, "([ "), " ])");
|
chunk = bacnet_rtrim(bacnet_ltrim(chunk, "([ "), " ])");
|
||||||
|
|
||||||
/* The list can be empty */
|
/* The list can be empty */
|
||||||
if (chunk[0] != 0) {
|
if (chunk[0] != 0) {
|
||||||
@@ -4221,7 +4187,7 @@ parse_weeklyschedule(char *str, BACNET_APPLICATION_DATA_VALUE *value)
|
|||||||
*comma = 0;
|
*comma = 0;
|
||||||
}
|
}
|
||||||
/* trim the time-value pair and find the delimiter space */
|
/* trim the time-value pair and find the delimiter space */
|
||||||
chunk = trim(chunk, " ");
|
chunk = bacnet_trim(chunk, " ");
|
||||||
space = strchr(chunk, ' ');
|
space = strchr(chunk, ' ');
|
||||||
if (!space) {
|
if (!space) {
|
||||||
/* malformed time-value pair */
|
/* malformed time-value pair */
|
||||||
@@ -4233,7 +4199,7 @@ parse_weeklyschedule(char *str, BACNET_APPLICATION_DATA_VALUE *value)
|
|||||||
t = chunk;
|
t = chunk;
|
||||||
/* value starts one byte after the space, and there can be */
|
/* value starts one byte after the space, and there can be */
|
||||||
/* multiple spaces */
|
/* multiple spaces */
|
||||||
chunk = ltrim(space + 1, " ");
|
chunk = bacnet_ltrim(space + 1, " ");
|
||||||
v = chunk;
|
v = chunk;
|
||||||
|
|
||||||
/* Parse time */
|
/* Parse time */
|
||||||
|
|||||||
@@ -1857,3 +1857,55 @@ char *bacnet_ultoa(unsigned long value, char *buffer, size_t size)
|
|||||||
{
|
{
|
||||||
return bacnet_sprintf_to_ascii(buffer, size, "%lu", value);
|
return bacnet_sprintf_to_ascii(buffer, size, "%lu", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief trim characters from the left side of a string
|
||||||
|
* @param str - string to trim
|
||||||
|
* @param trimmedchars - characters to trim from the string
|
||||||
|
* @return the trimmed string
|
||||||
|
*/
|
||||||
|
char *bacnet_ltrim(char *str, const char *trimmedchars)
|
||||||
|
{
|
||||||
|
if (str[0] == 0) {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
while (strchr(trimmedchars, *str)) {
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief trim characters from the right side of a string
|
||||||
|
* @param str - string to trim
|
||||||
|
* @param trimmedchars - characters to trim from the string
|
||||||
|
* @return the trimmed string
|
||||||
|
*/
|
||||||
|
char *bacnet_rtrim(char *str, const char *trimmedchars)
|
||||||
|
{
|
||||||
|
char *end;
|
||||||
|
|
||||||
|
if (str[0] == 0) {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
end = str + strlen(str) - 1;
|
||||||
|
while (strchr(trimmedchars, *end)) {
|
||||||
|
*end = 0;
|
||||||
|
if (end == str) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
end--;
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief trim characters from the right side and left side of a string
|
||||||
|
* @param str - string to trim
|
||||||
|
* @param trimmedchars - characters to trim from the string
|
||||||
|
* @return the trimmed string
|
||||||
|
*/
|
||||||
|
char *bacnet_trim(char *str, const char *trimmedchars)
|
||||||
|
{
|
||||||
|
return bacnet_ltrim(bacnet_rtrim(str, trimmedchars), trimmedchars);
|
||||||
|
}
|
||||||
|
|||||||
@@ -219,6 +219,13 @@ BACNET_STACK_EXPORT
|
|||||||
char *
|
char *
|
||||||
bacnet_sprintf_to_ascii(char *buffer, size_t count, const char *format, ...);
|
bacnet_sprintf_to_ascii(char *buffer, size_t count, const char *format, ...);
|
||||||
|
|
||||||
|
BACNET_STACK_EXPORT
|
||||||
|
char *bacnet_ltrim(char *str, const char *trimmedchars);
|
||||||
|
BACNET_STACK_EXPORT
|
||||||
|
char *bacnet_rtrim(char *str, const char *trimmedchars);
|
||||||
|
BACNET_STACK_EXPORT
|
||||||
|
char *bacnet_trim(char *str, const char *trimmedchars);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|||||||
Reference in New Issue
Block a user