On Tue, Apr 24, 2001 at 10:50:36AM +0200, Andi Gutmans wrote:
> It definitely seems as if the logic in the code (filestat.c) is kind of
> screwed up.
> If no one has time to look at it I can try and take a look at it later on.
>
> Andi
>
> At 01:35 AM 4/24/2001 -0500, J. Jones wrote:
> >Forgive me for my ignorance, but I've noticed some unwanted behavior
> >(IMO, at least) with the is_link() function. Given the simple code..
> >
> > if ( is_link ("/tmp/this_is_a_symlink") )
> > print ("Success\n");
> >
> >and the file..
> > lrwxrwxrwx 1 root root 5 Apr 23 21:19 /tmp/this_is_a_symlink -> /bin/
> >the above obviously prints 'Success\n'.
> >
> >However, if I BREAK the symlink, with something like the following..
> > lrwxrwxrwx 1 root root 4 Apr 23 21:21 /tmp/this_is_a_symlink -> foo
> >the script fails with..
> >
> >Warning: stat failed for /tmp/this_is_a_symlink (errno=2 - No such file or
> >directory) in ./test.php on line 3.
> >
> >The file /tmp/this_is_a_symlink is still a symlink, so it seems to me that
> >the is_link() function should still return true, whether or not the symlink's
> >target exists. Is there perhaps a function I have yet to discover that
> >provides that behavior, without verifying the link's target?
> >
I grew impatient, and devised a simple (2 line) workaround in filestat.c.
Basically it just required NOT doing a stat() if is_link() was calling
php_stat(). This probably isn't 'the' fix, but it works great for me, and
I know you guys are pretty busy. Attached is my diff against
php-4.0.4pl1's ext/standard/filestat.c.
Thanks for the great language! Keep it up!
J. Jones
--- php-4.0.4pl1/ext/standard/filestat.c Thu Dec 7 13:15:02 2000
+++ php-4.0.4pl1/ext/standard/filestat.c Tue Apr 24 16:43:06 2001
@@ -467,6 +467,7 @@
#if HAVE_SYMLINK
BG(lsb).st_mode = 0; /* mark lstat buf invalid */
#endif
+ if (type != 14) {
if (V_STAT(BG(CurrentStatFile),&BG(sb))==-1) {
if (type != 15 || errno != ENOENT) { /* fileexists() test must
print no error */
php_error(E_NOTICE,"stat failed for %s (errno=%d -
%s)",BG(CurrentStatFile),errno,strerror(errno));
@@ -474,6 +475,7 @@
efree(BG(CurrentStatFile));
BG(CurrentStatFile)=NULL;
RETURN_FALSE;
+ }
}
}
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]