hholzgra Thu Jul 3 10:34:02 2003 EDT Modified files: /php-src/ext/standard dir.c Log: PHP glob() will now emulate GLOB_ONLYDIR on non-GNU systems Index: php-src/ext/standard/dir.c diff -u php-src/ext/standard/dir.c:1.121 php-src/ext/standard/dir.c:1.122 --- php-src/ext/standard/dir.c:1.121 Tue Jun 10 16:03:37 2003 +++ php-src/ext/standard/dir.c Thu Jul 3 10:34:02 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: dir.c,v 1.121 2003/06/10 20:03:37 imajes Exp $ */ +/* $Id: dir.c,v 1.122 2003/07/03 14:34:02 hholzgra Exp $ */ /* {{{ includes/startup/misc */ @@ -141,9 +141,6 @@ #ifdef GLOB_BRACE REGISTER_LONG_CONSTANT("GLOB_BRACE", GLOB_BRACE, CONST_CS | CONST_PERSISTENT); #endif -#ifdef GLOB_ONLYDIR - REGISTER_LONG_CONSTANT("GLOB_ONLYDIR", GLOB_ONLYDIR, CONST_CS | CONST_PERSISTENT); -#endif #ifdef GLOB_MARK REGISTER_LONG_CONSTANT("GLOB_MARK", GLOB_MARK, CONST_CS | CONST_PERSISTENT); #endif @@ -156,6 +153,17 @@ #ifdef GLOB_NOESCAPE REGISTER_LONG_CONSTANT("GLOB_NOESCAPE", GLOB_NOESCAPE, CONST_CS | CONST_PERSISTENT); #endif + +#ifndef GLOB_ONLYDIR +#define GLOB_ONLYDIR (1<<30) +#define GLOB_EMULATE_ONLYDIR +#define GLOB_FLAGMASK (~GLOB_ONLYDIR) +#else +#define GLOB_FLAGMASK (~0) +#endif + + REGISTER_LONG_CONSTANT("GLOB_ONLYDIR", GLOB_ONLYDIR, CONST_CS | CONST_PERSISTENT); + #endif return SUCCESS; @@ -386,7 +394,7 @@ #endif globbuf.gl_offs = 0; - if (0 != (ret = glob(pattern, flags, NULL, &globbuf))) { + if (0 != (ret = glob(pattern, flags & GLOB_FLAGMASK, NULL, &globbuf))) { #ifdef GLOB_NOMATCH if (GLOB_NOMATCH == ret) { /* Linux handles no matches as an error condition, but FreeBSD @@ -421,6 +429,19 @@ array_init(return_value); for (n = 0; n < globbuf.gl_pathc; n++) { +#ifdef GLOB_EMULATE_ONLYDIR + if (flags & GLOB_ONLYDIR) { + struct stat s; + + if (0 != stat(globbuf.gl_pathv[n], &s)) { + continue; + } + + if (!S_ISDIR(s.st_mode)) { + continue; + } + } +#endif add_next_index_string(return_value, globbuf.gl_pathv[n]+cwd_skip, 1); }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php