[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

Re: [PATCH] apr_dir_read doesn't return requested information

From: Branko Čibej <brane_at_xbc.nu>
Date: 2002-12-18 05:42:55 CET

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_at_xbc.nu>   http://www.xbc.nu/brane/
Received on Wed Dec 18 05:43:34 2002

This is an archived mail posted to the Subversion Dev mailing list.

This site is subject to the Apache Privacy Policy and the Apache Public Forum Archive Policy.