Fix up utils nonsense
authorMark Spencer <markster@digium.com>
Sat, 18 Jun 2005 11:54:38 +0000 (11:54 +0000)
committerMark Spencer <markster@digium.com>
Sat, 18 Jun 2005 11:54:38 +0000 (11:54 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5932 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/utils.h
utils.c

index 06805e8..13ced53 100755 (executable)
@@ -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 7768538..d8bd34f 100755 (executable)
--- 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)
 {