On 9/27/05, Joe Orton <[EMAIL PROTECTED]> wrote:
> On Tue, Sep 27, 2005 at 10:48:56AM -0400, Jeff Trawick wrote:
> > On 9/27/05, Joe Orton <[EMAIL PROTECTED]> wrote:
> > > On Tue, Sep 27, 2005 at 01:49:29PM +0100, Joe Orton wrote:
> > > > On Tue, Sep 27, 2005 at 07:55:14AM -0400, Jeff Trawick wrote:
> > > > > This chdir && rmdir operation fails with EBUSY on AIX and HP-UX.  (I
> > > > > see it work on Linux; haven't tested other boxes.)  Is there another
> > > > > way to accomplish the test?
> > >
> > > Can you test whether the trunk code handles this OK?  If so I'll
> > > backport it everywhere.
> >
> > ouch, can't get trunk to build on AIX at the moment*; I'll try to test
> > the trunk testdir.c change with 0.9.x on AIX later toda
>
> Ahhhrrrm, just more stuff I borked :) That is a non-threaded build?  I
> can see how that is broken.

it is a threaded build; but READDIR_IS_THREAD_SAFE is defined

whether or not we actually use readdir64() needs to be separated from
whether or not the function is defined

some of the usage of readdir64 (e.g., in struct apr_dir_t) is based on
simply whether or not the function exists

other usage (such as actually calling it) is based on this combination:

#if APR_HAS_THREADS && defined(_POSIX_THREAD_SAFE_FUNCTIONS) \
                    && !defined(READDIR_IS_THREAD_SAFE)
#ifdef HAVE_READDIR64_R

quick hack:

#if APR_HAS_THREADS && defined(_POSIX_THREAD_SAFE_FUNCTIONS) \
                    && !defined(READDIR_IS_THREAD_SAFE) \
                    && defined(HAVE_READDIR64_R)
#define USE_READDIR64_R 1
#else
#define USE_READDIR64_R 0
#endif

struct apr_dir_t {
    apr_pool_t *pool;
    char *dirname;
    DIR *dirstruct;
#if USE_READDIR64_r
    struct dirent64 *entry;
#else
    struct dirent *entry;
#endif
};

then check USE_READDIR64_R in dir.c

Reply via email to