> Author: cmpilato

> URL: http://svn.apache.org/viewvc?rev=1398983&view=rev
> Log:
> Reintegrate into trunk the 'http-dynamic-prop-namespaces' branch
> (using a simple 'svn merge BRANCH-URL' with a trunk@HEAD client!).

> Modified: subversion/trunk/subversion/mod_dav_svn/deadprops.c
> +static dav_prop_name *
> +propname_to_davname(const char *propname, [...]
> +{     [...]
> +      colon = strrchr((char *)propname, ':');

deadprops.c:134:26: cast discards '__attribute__((const))' qualifier from 
pointer target type

Why cast away 'const'?  Standard strrchr() accepts const.

Ugh... What's happening is 'httpd.h' is messing with the standard lib functions:

In /usr/include/apache2/httpd.h:
[[[
  /* The C library has functions that allow const to be silently dropped ...
     these macros detect the drop in maintainer mode, but use the native
     methods for normal builds  [...] */
AP_DECLARE(char *) ap_strrchr(char *s, int c);
AP_DECLARE(const char *) ap_strrchr_c(const char *s, int c);

#ifdef AP_DEBUG
#  undef strrchr
#  define strrchr(s, c)  ap_strrchr(s,c)
#else
#  define ap_strrchr(s, c)       strrchr(s, c)
#  define ap_strrchr_c(s, c)     strrchr(s, c)
#endif
]]]

I'm doing an AP_DEBUG build.  If I remove the explicit cast, I see a different 
warning:

deadprops.c:134:7: warning: passing argument 1 of 'ap_strrchr' discards 'const' 
qualifier from pointer target type

So neither way works cleanly for me.

But that's an artifact of a badly designed HTTPD header -- it has no business 
forcing third-party users of HTTPD code to follow their chosen rules for stdlib 
functions.

We shouldn't have the explicit cast.

- Julian

Reply via email to