make inlinable functions only need the function body in one file, and respond properl...
authorKevin P. Fleming <kpfleming@digium.com>
Thu, 23 Jun 2005 23:07:55 +0000 (23:07 +0000)
committerKevin P. Fleming <kpfleming@digium.com>
Thu, 23 Jun 2005 23:07:55 +0000 (23:07 +0000)
make ast_copy_string inlinable, and ast_tvdiff_ms LOW_MEMORY aware

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5992 65c4cc65-6c06-0410-ace0-fbb531ad65f3

include/asterisk/utils.h
utils.c

index 13ced53..854e733 100755 (executable)
@@ -136,10 +136,13 @@ struct ast_hostent {
   \param str the input string
   \return a pointer to the first non-whitespace character
  */
-#ifdef LOW_MEMORY
+#if defined(LOW_MEMORY)
 char *ast_skip_blanks(char *str);
 #else
-static inline char *ast_skip_blanks(char *str)
+static inline
+#endif
+#if !defined(LOW_MEMORY) || defined(AST_API_MODULE)
+char *ast_skip_blanks(char *str)
 {
        while (*str && *str < 33)
                str++;
@@ -152,10 +155,13 @@ static inline char *ast_skip_blanks(char *str)
   \param str the input string
   \return a pointer to the NULL following the string
  */
-#ifdef LOW_MEMORY
+#if defined(LOW_MEMORY)
 char *ast_trim_blanks(char *str);
 #else
-static inline char *ast_trim_blanks(char *str)
+static inline
+#endif
+#if !defined(LOW_MEMORY) || defined(AST_API_MODULE)
+char *ast_trim_blanks(char *str)
 {
        char *work = str;
 
@@ -179,10 +185,13 @@ static inline char *ast_trim_blanks(char *str)
   \param str the input string
   \return a pointer to the first whitespace character
  */
-#ifdef LOW_MEMORY
+#if defined(LOW_MEMORY)
 char *ast_skip_nonblanks(char *str);
 #else
-static inline char *ast_skip_nonblanks(char *str)
+static inline
+#endif
+#if !defined(LOW_MEMORY) || defined(AST_API_MODULE)
+char *ast_skip_nonblanks(char *str)
 {
        while (*str && *str > 32)
                str++;
@@ -199,10 +208,13 @@ static inline 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
+#if defined(LOW_MEMORY)
 char *ast_strip(char *s);
 #else
-static inline char *ast_strip(char *s)
+static inline
+#endif
+#if !defined(LOW_MEMORY) || defined(AST_API_MODULE)
+char *ast_strip(char *s)
 {
        s = ast_skip_blanks(s);
        if (s)
@@ -301,7 +313,23 @@ extern char *ast_strcasestr(const char *, const char *);
   reduced buffer size to this function (unlike \a strncpy), and the buffer does not need
   to be initialized to zeroes prior to calling this function.
 */
+#if defined(LOW_MEMORY)
 void ast_copy_string(char *dst, const char *src, size_t size);
+#else
+static inline
+#endif
+#if !defined(LOW_MEMORY) || defined(AST_API_MODULE)
+void ast_copy_string(char *dst, const char *src, size_t size)
+{
+       while (*src && size) {
+               *dst++ = *src++;
+               size--;
+       }
+       if (__builtin_expect(!size, 0))
+               dst--;
+       *dst = '\0';
+}
+#endif
 
 /*!
   \brief Build a string in a buffer, designed to be called repeatedly
@@ -324,9 +352,17 @@ int ast_build_string(char **buffer, size_t *space, const char *fmt, ...) __attri
  * \param end the end of the time period
  * \return the difference in milliseconds
  */
-static inline int ast_tvdiff_ms(struct timeval *start, struct timeval *end)
+#if defined(LOW_MEMORY)
+int ast_tvdiff_ms(const struct timeval *start, const struct timeval *end);
+#else
+static inline
+#endif
+#if !defined(LOW_MEMORY) || defined(AST_API_MODULE)
+int ast_tvdiff_ms(const struct timeval *start, const struct timeval *end)
 {
        return ((end->tv_sec - start->tv_sec) * 1000) + ((end->tv_usec - start->tv_usec) / 1000);
 }
+#endif
 
+#undef AST_API_MODULE
 #endif /* _ASTERISK_UTILS_H */
diff --git a/utils.c b/utils.c
index d8bd34f..d0ee57d 100755 (executable)
--- a/utils.c
+++ b/utils.c
 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 
 #include "asterisk/lock.h"
-#include "asterisk/utils.h"
 #include "asterisk/io.h"
 #include "asterisk/logger.h"
 #include "asterisk/md5.h"
 
+#define AST_API_MODULE         /* ensure that inlinable API functions will be built in this module if required */
+#include "asterisk/utils.h"
+
 static char base64[64];
 static char b2a[256];
 
-#ifdef LOW_MEMORY
-char *ast_skip_blanks(char *str)
-{
-       while (*str && *str < 33)
-               str++;
-       return str;
-}
-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;
-}
-
-char *ast_skip_nonblanks(char *str)
-{
-       while (*str && *str > 32)
-               str++;
-       return str;
-}
-
-char *ast_strip(char *s)
-{
-       s = ast_skip_blanks(s);
-       if (s)
-               ast_trim_blanks(s);
-       return s;
-} 
-#endif
-
 char *ast_strip_quoted(char *s, const char *beg_quotes, const char *end_quotes)
 {
        char *e;
@@ -473,17 +433,6 @@ int ast_wait_for_input(int fd, int ms)
        return poll(pfd, 1, ms);
 }
 
-void ast_copy_string(char *dst, const char *src, size_t size)
-{
-       while (*src && size) {
-               *dst++ = *src++;
-               size--;
-       }
-       if (__builtin_expect(!size, 0))
-               dst--;
-       *dst = '\0';
-}
-
 int ast_build_string(char **buffer, size_t *space, const char *fmt, ...)
 {
        va_list ap;