apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jeff Trawick <traw...@attglobal.net>
Subject minor API issues
Date Sun, 13 Jun 2004 15:33:12 GMT
some look like easy cleanups for platform folks to look at more closely; others 
are just accepted incompatibilities with our general philosophy (e.g., instead 
of defining apr_strcasecmp() we ensure that Unix-ish strcasecmp() is available 
everywhere)

1) possible future binary compatibility concern

apr_proc_t has this optional field which could be always defined in case other 
platforms want to implement it later without breaking binary compatibility

#if APR_HAS_PROC_INVOKED || defined(DOXYGEN)
     /** Diagnositics/debugging string of the command invoked for
      *  this process [only present if APR_HAS_PROC_INVOKED is true]
      * @remark Only enabled on Win32 by default.
      * @bug This should either always or never be present in release
      * builds - since it breaks binary compatibility.  We may enable
      * it always in APR 1.0 yet leave it undefined in most cases.
      */
     char *invoked;
#endif

2) places where we define symbols normally defined by the system or other 
applications/libraries (not in our namespace)

potentially we can clash with application or other libraries which try to make 
similar compensation; generally when some feature foo isn't available 
everywhere we create apr_foo feature to stand in its place, and implement 
apr_foo based on system foo or our own logic as appropriate

apr_signal.h defines SIG_DFL, SIG_IGN, and SIG_ERR under some circumstances

apr_network_io.h defines struct in_addr

apr.h on Unix can define WEXITSTATUS and WTERMSIG; why not private if we really
                         need it??

apr_general.h defines TRUE and FALSE   (water under the bridge I suppose)

apr_general.h and code in apr makes sure there is strcasecmp() and 
strncasecmp() and memcpy() and memchr()   (water under the bridge I suppose)

apr.hw defines
/* XXX These simply don't belong here, perhaps in apr_portable.h
  * based on some APR_HAVE_PID/GID/UID?
  */
typedef  int         pid_t;         (water under the bridge I suppose)
typedef  int         uid_t;         <- not part of our API, is it?
typedef  int         gid_t;         <- not part of our API, is it?

apr.hw has this stuff too:

/* Appears in later flavors, not the originals. */
#ifndef in_addr6
#define  in6_addr    in_addr6
#endif

#ifndef WS2TCPIP_INLINE            <- WTH??
6:09 PM 11/16/2003#define IN6_IS_ADDR_V4MAPPED(a) \
     (   (*(const apr_uint64_t *)(const void *)(&(a)->s6_addr[0]) == 0) \
      && (*(const apr_uint32_t *)(const void *)(&(a)->s6_addr[8]) == 
ntohl(0x0000ffff)))
#endif

/* Nasty Win32 .h ommissions we really need */
#define STDIN_FILENO  0        <- can this stuff be moved to private .h?
#define STDOUT_FILENO 1        <- what code on Win32 uses this anyway
#define STDERR_FILENO 2        <- can't we just yank it?

apr.hnw has
#define READDIR_IS_THREAD_SAFE          1     <- I guess Netware uses
                         <- file_io/unix/dir.c which uses this?
                         <- move to private .h?

#define ENUM_BITFIELD(e,n,w)  signed int n : w  <- not referenced anywhere?

3) other symbols not in our namespace

apr_lib.h defines HUGE_STRING_LEN


Mime
View raw message