From 222b5695e01f507a1a79f71cd9c9951de1a728e8 Mon Sep 17 00:00:00 2001 From: Mark Spencer <markster@digium.com> Date: Sat, 18 Jun 2005 11:54:38 +0000 Subject: [PATCH] Fix up utils nonsense git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5932 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- include/asterisk/utils.h | 49 ++++++++++++++++++++++++++++++++++++++++ utils.c | 17 ++++++++++---- 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/include/asterisk/utils.h b/include/asterisk/utils.h index 06805e82d0..13ced53d21 100755 --- a/include/asterisk/utils.h +++ b/include/asterisk/utils.h @@ -20,6 +20,7 @@ #include <arpa/inet.h> /* we want to override inet_ntoa */ #include <netdb.h> #include <limits.h> +#include <string.h> #include "asterisk/lock.h" @@ -135,21 +136,59 @@ struct ast_hostent { \param str the input string \return a pointer to the first non-whitespace character */ +#ifdef LOW_MEMORY char *ast_skip_blanks(char *str); +#else +static inline char *ast_skip_blanks(char *str) +{ + while (*str && *str < 33) + str++; + return str; +} +#endif /*! \brief Trims trailing whitespace characters from a string. \param str the input string \return a pointer to the NULL following the string */ +#ifdef LOW_MEMORY char *ast_trim_blanks(char *str); +#else +static inline char *ast_trim_blanks(char *str) +{ + char *work = str; + + if (work) { + work += strlen(work) - 1; + /* It's tempting to only want to erase after we exit this loop, + but since ast_trim_blanks *could* receive a constant string + (which we presumably wouldn't have to touch), we shouldn't + actually set anything unless we must, and it's easier just + to set each position to \0 than to keep track of a variable + for it */ + while ((work >= str) && *work < 33) + *(work--) = '\0'; + } + return str; +} +#endif /*! \brief Gets a pointer to first whitespace character in a string. \param str the input string \return a pointer to the first whitespace character */ +#ifdef LOW_MEMORY char *ast_skip_nonblanks(char *str); +#else +static inline char *ast_skip_nonblanks(char *str) +{ + while (*str && *str > 32) + str++; + return str; +} +#endif /*! \brief Strip leading/trailing whitespace from a string. @@ -160,7 +199,17 @@ char *ast_skip_nonblanks(char *str); characters from the input string, and returns a pointer to the resulting string. The string is modified in place. */ +#ifdef LOW_MEMORY char *ast_strip(char *s); +#else +static inline char *ast_strip(char *s) +{ + s = ast_skip_blanks(s); + if (s) + ast_trim_blanks(s); + return s; +} +#endif /*! \brief Strip leading/trailing whitespace and quotes from a string. diff --git a/utils.c b/utils.c index 776853816a..d8bd34f21b 100755 --- a/utils.c +++ b/utils.c @@ -37,6 +37,7 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$") static char base64[64]; static char b2a[256]; +#ifdef LOW_MEMORY char *ast_skip_blanks(char *str) { while (*str && *str < 33) @@ -48,13 +49,18 @@ char *ast_trim_blanks(char *str) { char *work = str; - if (work && !ast_strlen_zero(work)) { + if (work) { work += strlen(work) - 1; - while ((work >= str) && *work && *work < 33) - work--; - *(++work) = '\0'; /* terminate string */ + /* It's tempting to only want to erase after we exit this loop, + but since ast_trim_blanks *could* receive a constant string + (which we presumably wouldn't have to touch), we shouldn't + actually set anything unless we must, and it's easier just + to set each position to \0 than to keep track of a variable + for it */ + while ((work >= str) && *work < 33) + *(work--) = '\0'; } - return work; + return str; } char *ast_skip_nonblanks(char *str) @@ -71,6 +77,7 @@ char *ast_strip(char *s) ast_trim_blanks(s); return s; } +#endif char *ast_strip_quoted(char *s, const char *beg_quotes, const char *end_quotes) { -- GitLab