Index: ext/standard/filestat.c =================================================================== RCS file: /repository/php-src/ext/standard/filestat.c,v retrieving revision 1.135 diff -u -r1.135 filestat.c --- ext/standard/filestat.c 21 Feb 2005 09:08:54 -0000 1.135 +++ ext/standard/filestat.c 12 Jun 2005 12:50:36 -0000 @@ -543,6 +543,7 @@ #define IS_LINK_OPERATION(__t) ((__t) == FS_TYPE || (__t) == FS_IS_LINK || (__t) == FS_LSTAT) #define IS_EXISTS_CHECK(__t) ((__t) == FS_EXISTS || (__t) == FS_IS_W || (__t) == FS_IS_R || (__t) == FS_IS_X || (__t) == FS_IS_FILE || (__t) == FS_IS_DIR || (__t) == FS_IS_LINK) #define IS_ABLE_CHECK(__t) ((__t) == FS_IS_R || (__t) == FS_IS_W || (__t) == FS_IS_X) +#define IS_ACCESS_CHECK(__t) (IS_ABLE_CHECK(type) || (__t) == FS_EXISTS) /* {{{ php_stat */ @@ -552,6 +553,7 @@ *stat_size, *stat_atime, *stat_mtime, *stat_ctime, *stat_blksize, *stat_blocks; struct stat *stat_sb; php_stream_statbuf ssb; + char * local_path; int flags = 0, rmask=S_IROTH, wmask=S_IWOTH, xmask=S_IXOTH; /* access rights defaults to other */ char *stat_sb_names[13]={"dev", "ino", "mode", "nlink", "uid", "gid", "rdev", "size", "atime", "mtime", "ctime", "blksize", "blocks"}; @@ -560,6 +562,22 @@ RETURN_FALSE; } +#ifndef NETWARE + if (IS_ACCESS_CHECK(type) && + !php_stream_locate_url_wrapper(filename, &local_path, STREAM_LOCATE_WRAPPERS_ONLY TSRMLS_CC)) { + switch(type) { + case FS_EXISTS: + RETURN_BOOL(access(local_path, F_OK) == 0); + case FS_IS_W: + RETURN_BOOL(access(local_path, W_OK) == 0); + case FS_IS_X: + RETURN_BOOL(access(local_path, X_OK) == 0); + case FS_IS_R: + RETURN_BOOL(access(local_path, R_OK) == 0); + } + } +#endif + if (IS_LINK_OPERATION(type)) { flags |= PHP_STREAM_URL_STAT_LINK; }