apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Branko ─îibej <br...@xbc.nu>
Subject Re: [PATCH] apr_dir_read doesn't return requested information
Date Wed, 18 Dec 2002 04:42:55 GMT
William A. Rowe, Jr. wrote:

>I'm sorry... this patch dir not come through to dev@apr for me today
>(although I watched for it...) but it's simply WRONG.
>
>
>
>At 07:04 PM 12/17/2002, =?UTF-8?B?QnJhbmtvIMSMaWJlag==?= wrote:
>  
>
>>>--- apr/file_io/unix/dir.c     15 Dec 2002 05:17:51 -0000      1.69
>>>+++ apr/file_io/unix/dir.c     17 Dec 2002 00:49:35 -0000
>>>@@ -218,10 +218,10 @@
>>>        return ret;
>>>    }
>>>
>>>-#ifdef DIRENT_INODE
>>>+#ifndef DIRENT_INODE
>>>    wanted &= ~APR_FINFO_INODE;
>>>#endif
>>>      
>>>
>
>Old logic; if we have an INODE from dirent, we don't care that we 
>want an INODE from stat() because we already have the INODE.
>
>New Logic: if we don't have an INODE, we won't ask for an INODE
>from stat().
>
>I'm sorry, but that's just broken.
>'
>Please revert and (re)post the original description of the problem.
>
>If you pass APR_FINFO_TYPE | APR_FINFO_INDOE | APR_FINFO_NAME
>that is *ALL* you are promised... we do NOT stat for info you don't ask for.
>
>Bill
>

Here's the original report:

>Philip Martin <philip@codematters.co.uk> writes:
>
>  
>
>>> Eeek!
>>> 
>>> I've just upgraded to apache/apr/apr-util to HEAD and now I can
>>> reproduce this.
>>> 
>>> $ svnadmin create repo
>>> $ svn mkdir file://`pwd`/repo/foo
>>> $ svn co file://`pwd`/repo wc
>>> $ svn up wc
>>> ../svn/subversion/libsvn_wc/adm_crawler.c:315: (apr_err=155000, src_err=0)
>>> svn: Obstructed update
>>> svn: The entry 'bar' is no longer a directory,
>>> which prevents proper updates.
>>> Please remove this entry and try updating again.
>>    
>>
>
>Looks like a recent apr change causes apr_dir_read to fail to return
>all the requested information.  I don't know if this is complete from
>an apr point of view, but it's sufficient to get Subversion working on
>my glibc 2.2.5 Linux machine.
>
>
>Index: apr/file_io/unix/dir.c
>===================================================================
>RCS file: /home/cvspublic/apr/file_io/unix/dir.c,v
>retrieving revision 1.69
>diff -u -r1.69 dir.c
>--- apr/file_io/unix/dir.c	15 Dec 2002 05:17:51 -0000	1.69
>+++ apr/file_io/unix/dir.c	17 Dec 2002 00:49:35 -0000
>@@ -218,10 +218,10 @@
>         return ret;
>     }
> 
>-#ifdef DIRENT_INODE
>+#ifndef DIRENT_INODE
>     wanted &= ~APR_FINFO_INODE;
> #endif
>-#ifdef DIRENT_TYPE
>+#ifndef DIRENT_TYPE
>     wanted &= ~APR_FINFO_TYPE;
> #endif
> 
> -- Philip Martin
>

Obviously, the type at least did not make it into the fle info. Looking
at this code again, the patch may indeed be wrong; but I find it really,
really hard to follow that code. In fact, I can't understand it at all.
If you can enlighten me about what's happening there, I may be able to
come up with a better patch.

I reverted my change, but be aware that apr_dir_read is currently
broken. It simply does not work on Linux with a redent glibc, it also
doesn't work in Solaris 7 (at least for me), etc. etc. It must be fixed.

-- 
Brane ─îibej   <brane@xbc.nu>   http://www.xbc.nu/brane/

Mime
  • Unnamed multipart/related (inline, None, 0 bytes)
View raw message