It seems that apr_cstr_*() functions added in r1726928 are missing
APR_DECLARE() which is needed for correct linking on Windows. Attached
patch fixes this.

-- 
Ivan Zhakov
Index: include/apr_cstr.h
===================================================================
--- include/apr_cstr.h  (revision 1764352)
+++ include/apr_cstr.h  (working copy)
@@ -78,10 +78,10 @@
  *
  * @since New in 1.6
  */
-apr_array_header_t * apr_cstr_split(const char *input,
-                                    const char *sep_chars,
-                                    int chop_whitespace,
-                                    apr_pool_t *pool);
+APR_DECLARE(apr_array_header_t *) apr_cstr_split(const char *input,
+                                                 const char *sep_chars,
+                                                 int chop_whitespace,
+                                                 apr_pool_t *pool);
 
 /** Like apr_cstr_split(), but append to existing @a array instead of
  * creating a new one.  Allocate the copied substrings in @a pool
@@ -89,11 +89,11 @@
  *
  * @since New in 1.6
  */
-void apr_cstr_split_append(apr_array_header_t *array,
-                           const char *input,
-                           const char *sep_chars,
-                           int chop_whitespace,
-                           apr_pool_t *pool);
+APR_DECLARE(void) apr_cstr_split_append(apr_array_header_t *array,
+                                        const char *input,
+                                        const char *sep_chars,
+                                        int chop_whitespace,
+                                        apr_pool_t *pool);
 
 
 /** Return @c TRUE iff @a str matches any of the elements of @a list, a list
@@ -101,13 +101,15 @@
  *
  * @since New in 1.6
  */
-int apr_cstr_match_glob_list(const char *str, const apr_array_header_t *list);
+APR_DECLARE(int) apr_cstr_match_glob_list(const char *str,
+                                          const apr_array_header_t *list);
 
 /** Return @c TRUE iff @a str exactly matches any of the elements of @a list.
  *
  * @since New in 1.6
  */
-int apr_cstr_match_list(const char *str, const apr_array_header_t *list);
+APR_DECLARE(int) apr_cstr_match_list(const char *str,
+                                     const apr_array_header_t *list);
 
 /**
  * Get the next token from @a *str interpreting any char from @a sep as a
@@ -120,7 +122,7 @@
  *
  * @since New in 1.6.
  */
-char * apr_cstr_tokenize(const char *sep, char **str);
+APR_DECLARE(char *) apr_cstr_tokenize(const char *sep, char **str);
 
 /**
  * Return the number of line breaks in @a msg, allowing any kind of newline
@@ -128,7 +130,7 @@
  *
  * @since New in 1.6.
  */
-int apr_cstr_count_newlines(const char *msg);
+APR_DECLARE(int) apr_cstr_count_newlines(const char *msg);
 
 #if 0 /* XXX: stringbuf logic is not present in APR */
 /**
@@ -139,9 +141,9 @@
  *
  * @since New in 1.6.
  */
-char * apr_cstr_join(const apr_array_header_t *strings,
-                     const char *separator,
-                     apr_pool_t *pool);
+APR_DECLARE(char *) apr_cstr_join(const apr_array_header_t *strings,
+                                  const char *separator,
+                                  apr_pool_t *pool);
 #endif
 
 /**
@@ -156,7 +158,7 @@
  *
  * @since New in 1.6.
  */
-int apr_cstr_casecmp(const char *str1, const char *str2);
+APR_DECLARE(int) apr_cstr_casecmp(const char *str1, const char *str2);
 
 /**
  * Perform a case-insensitive comparison of two strings @a atr1 and @a atr2,
@@ -170,7 +172,9 @@
  *
  * @since New in 1.6.
  */
-int apr_cstr_casecmpn(const char *str1, const char *str2, apr_size_t n);
+APR_DECLARE(int) apr_cstr_casecmpn(const char *str1,
+                                   const char *str2,
+                                   apr_size_t n);
 
 /**
  * Parse the C string @a str into a 64 bit number, and return it in @a *n.
@@ -191,9 +195,10 @@
  *
  * @since New in 1.6.
  */
-apr_status_t apr_cstr_strtoi64(apr_int64_t *n, const char *str,
-                               apr_int64_t minval, apr_int64_t maxval,
-                               int base);
+APR_DECLARE(apr_status_t) apr_cstr_strtoi64(apr_int64_t *n, const char *str,
+                                            apr_int64_t minval,
+                                            apr_int64_t maxval,
+                                            int base);
 
 /**
  * Parse the C string @a str into a 64 bit number, and return it in @a *n.
@@ -204,7 +209,7 @@
  *
  * @since New in 1.6.
  */
-apr_status_t apr_cstr_atoi64(apr_int64_t *n, const char *str);
+APR_DECLARE(apr_status_t) apr_cstr_atoi64(apr_int64_t *n, const char *str);
 
 /**
  * Parse the C string @a str into a 32 bit number, and return it in @a *n.
@@ -215,7 +220,7 @@
  *
  * @since New in 1.6.
  */
-apr_status_t apr_cstr_atoi(int *n, const char *str);
+APR_DECLARE(apr_status_t) apr_cstr_atoi(int *n, const char *str);
 
 /**
  * Parse the C string @a str into an unsigned 64 bit number, and return
@@ -239,9 +244,10 @@
  *
  * @since New in 1.6.
  */
-apr_status_t apr_cstr_strtoui64(apr_uint64_t *n, const char *str,
-                                apr_uint64_t minval, apr_uint64_t maxval,
-                                int base);
+APR_DECLARE(apr_status_t) apr_cstr_strtoui64(apr_uint64_t *n, const char *str,
+                                             apr_uint64_t minval,
+                                             apr_uint64_t maxval,
+                                             int base);
 
 /**
  * Parse the C string @a str into an unsigned 64 bit number, and return
@@ -253,7 +259,7 @@
  *
  * @since New in 1.6.
  */
-apr_status_t apr_cstr_atoui64(apr_uint64_t *n, const char *str);
+APR_DECLARE(apr_status_t) apr_cstr_atoui64(apr_uint64_t *n, const char *str);
 
 /**
  * Parse the C string @a str into an unsigned 32 bit number, and return
@@ -265,7 +271,7 @@
  *
  * @since New in 1.6.
  */
-apr_status_t apr_cstr_atoui(unsigned int *n, const char *str);
+APR_DECLARE(apr_status_t) apr_cstr_atoui(unsigned int *n, const char *str);
 
 /**
  * Skip the common prefix @a prefix from the C string @a str, and return
@@ -274,7 +280,8 @@
  *
  * @since New in 1.6.
  */
-const char * apr_cstr_skip_prefix(const char *str, const char *prefix);
+APR_DECLARE(const char *) apr_cstr_skip_prefix(const char *str,
+                                               const char *prefix);
 
 /** @} */
 
Index: strings/apr_cstr.c
===================================================================
--- strings/apr_cstr.c  (revision 1764352)
+++ strings/apr_cstr.c  (working copy)
@@ -27,11 +27,11 @@
 #include "apr_want.h"
 #include "apr_cstr.h"
 
-void apr_cstr_split_append(apr_array_header_t *array,
-                           const char *input,
-                           const char *sep_chars,
-                           int chop_whitespace,
-                           apr_pool_t *pool)
+APR_DECLARE(void) apr_cstr_split_append(apr_array_header_t *array,
+                                        const char *input,
+                                        const char *sep_chars,
+                                        int chop_whitespace,
+                                        apr_pool_t *pool)
 {
   char *pats;
   char *p;
@@ -64,10 +64,10 @@
 }
 
 
-apr_array_header_t * apr_cstr_split(const char *input,
-                                    const char *sep_chars,
-                                    int chop_whitespace,
-                                    apr_pool_t *pool)
+APR_DECLARE(apr_array_header_t *) apr_cstr_split(const char *input,
+                                                 const char *sep_chars,
+                                                 int chop_whitespace,
+                                                 apr_pool_t *pool)
 {
   apr_array_header_t *a = apr_array_make(pool, 5, sizeof(input));
   apr_cstr_split_append(a, input, sep_chars, chop_whitespace, pool);
@@ -75,8 +75,8 @@
 }
 
 
-int apr_cstr_match_glob_list(const char *str,
-                             const apr_array_header_t *list)
+APR_DECLARE(int) apr_cstr_match_glob_list(const char *str,
+                                          const apr_array_header_t *list)
 {
   int i;
 
@@ -91,7 +91,8 @@
   return FALSE;
 }
 
-int apr_cstr_match_list(const char *str, const apr_array_header_t *list)
+APR_DECLARE(int) apr_cstr_match_list(const char *str,
+                                     const apr_array_header_t *list)
 {
   int i;
 
@@ -106,7 +107,7 @@
   return FALSE;
 }
 
-char * apr_cstr_tokenize(const char *sep, char **str)
+APR_DECLARE(char *) apr_cstr_tokenize(const char *sep, char **str)
 {
     char *token;
     char *next;
@@ -146,7 +147,7 @@
     return token;
 }
 
-int apr_cstr_count_newlines(const char *msg)
+APR_DECLARE(int) apr_cstr_count_newlines(const char *msg)
 {
   int count = 0;
   const char *p;
@@ -171,9 +172,9 @@
 }
 
 #if 0 /* XXX: stringbuf logic is not present in APR */
-char * apr_cstr_join(const apr_array_header_t *strings,
-                     const char *separator,
-                     apr_pool_t *pool)
+APR_DECLARE(char *) apr_cstr_join(const apr_array_header_t *strings,
+                                  const char *separator,
+                                  apr_pool_t *pool)
 {
   svn_stringbuf_t *new_str = svn_stringbuf_create_empty(pool);
   size_t sep_len = strlen(separator);
@@ -279,7 +280,7 @@
 };
 #endif
 
-int apr_cstr_casecmp(const char *s1, const char *s2)
+APR_DECLARE(int) apr_cstr_casecmp(const char *s1, const char *s2)
 {
     const unsigned char *str1 = (const unsigned char *)s1;
     const unsigned char *str2 = (const unsigned char *)s2;
@@ -296,7 +297,8 @@
     }
 }
 
-int apr_cstr_casecmpn(const char *s1, const char *s2, apr_size_t n)
+APR_DECLARE(int) apr_cstr_casecmpn(const char *s1, const char *s2,
+                                   apr_size_t n)
 {
     const unsigned char *str1 = (const unsigned char *)s1;
     const unsigned char *str2 = (const unsigned char *)s2;
@@ -314,9 +316,11 @@
     return 0;
 }
 
-apr_status_t apr_cstr_strtoui64(apr_uint64_t *n, const char *str,
-                                apr_uint64_t minval, apr_uint64_t maxval,
-                                int base)
+APR_DECLARE(apr_status_t) apr_cstr_strtoui64(apr_uint64_t *n,
+                                             const char *str,
+                                             apr_uint64_t minval,
+                                             apr_uint64_t maxval,
+                                             int base)
 {
   apr_int64_t val;
   char *endptr;
@@ -336,12 +340,12 @@
   return APR_SUCCESS;
 }
 
-apr_status_t apr_cstr_atoui64(apr_uint64_t *n, const char *str)
+APR_DECLARE(apr_status_t) apr_cstr_atoui64(apr_uint64_t *n, const char *str)
 {
   return apr_cstr_strtoui64(n, str, 0, APR_UINT64_MAX, 10);
 }
 
-apr_status_t apr_cstr_atoui(unsigned int *n, const char *str)
+APR_DECLARE(apr_status_t) apr_cstr_atoui(unsigned int *n, const char *str)
 {
   apr_uint64_t val;
   apr_status_t rv = apr_cstr_strtoui64(&val, str, 0, APR_UINT32_MAX, 10);
@@ -350,9 +354,11 @@
   return rv;
 }
 
-apr_status_t apr_cstr_strtoi64(apr_int64_t *n, const char *str,
-                               apr_int64_t minval, apr_int64_t maxval,
-                               int base)
+APR_DECLARE(apr_status_t) apr_cstr_strtoi64(apr_int64_t *n,
+                                            const char *str,
+                                            apr_int64_t minval,
+                                            apr_int64_t maxval,
+                                            int base)
 {
   apr_int64_t val;
   char *endptr;
@@ -370,12 +376,12 @@
   return APR_SUCCESS;
 }
 
-apr_status_t apr_cstr_atoi64(apr_int64_t *n, const char *str)
+APR_DECLARE(apr_status_t) apr_cstr_atoi64(apr_int64_t *n, const char *str)
 {
   return apr_cstr_strtoi64(n, str, APR_INT64_MIN, APR_INT64_MAX, 10);
 }
 
-apr_status_t apr_cstr_atoi(int *n, const char *str)
+APR_DECLARE(apr_status_t) apr_cstr_atoi(int *n, const char *str)
 {
   apr_int64_t val;
   apr_status_t rv;
@@ -386,7 +392,7 @@
   return rv;
 }
 
-const char *
+APR_DECLARE(const char *)
 apr_cstr_skip_prefix(const char *str, const char *prefix)
 {
   apr_size_t len = strlen(prefix);

Reply via email to