helly Sat Mar 3 20:41:12 2007 UTC
Added files:
/php-src/main/streams glob_wrapper.c php_stream_glob_wrapper.h
Modified files:
/php-src configure.in
/php-src/main php_streams.h
/php-src/main/streams plain_wrapper.c
/php-src/ext/standard basic_functions.c
Log:
- Add glob stream wrapper
http://cvs.php.net/viewvc.cgi/php-src/configure.in?r1=1.623&r2=1.624&diff_format=u
Index: php-src/configure.in
diff -u php-src/configure.in:1.623 php-src/configure.in:1.624
--- php-src/configure.in:1.623 Tue Feb 20 20:10:53 2007
+++ php-src/configure.in Sat Mar 3 20:41:11 2007
@@ -1,4 +1,4 @@
- ## $Id: configure.in,v 1.623 2007/02/20 20:10:53 tony2001 Exp $ -*- autoconf
-*-
+ ## $Id: configure.in,v 1.624 2007/03/03 20:41:11 helly Exp $ -*- autoconf -*-
dnl ## Process this file with autoconf to produce a configure script.
divert(1)
@@ -1229,7 +1229,7 @@
PHP_ADD_SOURCES(main/streams, streams.c cast.c memory.c filter.c \
plain_wrapper.c userspace.c transports.c xp_socket.c mmap.c \
- unicode_filter.c )
+ unicode_filter.c glob_wrapper.c)
PHP_ADD_SOURCES(/main, internal_functions.c,, sapi)
http://cvs.php.net/viewvc.cgi/php-src/main/php_streams.h?r1=1.125&r2=1.126&diff_format=u
Index: php-src/main/php_streams.h
diff -u php-src/main/php_streams.h:1.125 php-src/main/php_streams.h:1.126
--- php-src/main/php_streams.h:1.125 Wed Feb 21 21:56:45 2007
+++ php-src/main/php_streams.h Sat Mar 3 20:41:11 2007
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_streams.h,v 1.125 2007/02/21 21:56:45 tony2001 Exp $ */
+/* $Id: php_streams.h,v 1.126 2007/03/03 20:41:11 helly Exp $ */
#ifndef PHP_STREAMS_H
#define PHP_STREAMS_H
@@ -545,6 +545,7 @@
#include "streams/php_stream_transport.h"
#include "streams/php_stream_plain_wrapper.h"
+#include "streams/php_stream_glob_wrapper.h"
#include "streams/php_stream_userspace.h"
#include "streams/php_stream_mmap.h"
@@ -614,6 +615,9 @@
/* get (or create) a persistent version of the stream */
#define STREAM_OPEN_PERSISTENT 2048
+/* use glob stream for directory open in plain files stream */
+#define STREAM_USE_GLOB_DIR_OPEN 4096
+
/* Antique - no longer has meaning */
#define IGNORE_URL_WIN 0
http://cvs.php.net/viewvc.cgi/php-src/main/streams/plain_wrapper.c?r1=1.82&r2=1.83&diff_format=u
Index: php-src/main/streams/plain_wrapper.c
diff -u php-src/main/streams/plain_wrapper.c:1.82
php-src/main/streams/plain_wrapper.c:1.83
--- php-src/main/streams/plain_wrapper.c:1.82 Fri Feb 23 23:08:40 2007
+++ php-src/main/streams/plain_wrapper.c Sat Mar 3 20:41:12 2007
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: plain_wrapper.c,v 1.82 2007/02/23 23:08:40 pollita Exp $ */
+/* $Id: plain_wrapper.c,v 1.83 2007/03/03 20:41:12 helly Exp $ */
#include "php.h"
#include "php_globals.h"
@@ -836,6 +836,10 @@
DIR *dir = NULL;
php_stream *stream = NULL;
+ if (options & STREAM_USE_GLOB_DIR_OPEN) {
+ return
php_glob_stream_wrapper.wops->dir_opener(&php_glob_stream_wrapper, path, mode,
options, opened_path, context STREAMS_REL_CC TSRMLS_CC);
+ }
+
if (((options & STREAM_DISABLE_OPEN_BASEDIR) == 0) &&
php_check_open_basedir(path TSRMLS_CC)) {
return NULL;
}
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/basic_functions.c?r1=1.849&r2=1.850&diff_format=u
Index: php-src/ext/standard/basic_functions.c
diff -u php-src/ext/standard/basic_functions.c:1.849
php-src/ext/standard/basic_functions.c:1.850
--- php-src/ext/standard/basic_functions.c:1.849 Thu Feb 22 08:23:44 2007
+++ php-src/ext/standard/basic_functions.c Sat Mar 3 20:41:12 2007
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: basic_functions.c,v 1.849 2007/02/22 08:23:44 dmitry Exp $ */
+/* $Id: basic_functions.c,v 1.850 2007/03/03 20:41:12 helly Exp $ */
#include "php.h"
#include "php_streams.h"
@@ -4064,6 +4064,7 @@
php_register_url_stream_wrapper("php", &php_stream_php_wrapper
TSRMLS_CC);
php_register_url_stream_wrapper("file", &php_plain_files_wrapper
TSRMLS_CC);
+ php_register_url_stream_wrapper("glob", &php_glob_stream_wrapper
TSRMLS_CC);
php_register_url_stream_wrapper("data", &php_stream_rfc2397_wrapper
TSRMLS_CC);
#ifndef PHP_CURL_URL_WRAPPERS
php_register_url_stream_wrapper("http", &php_stream_http_wrapper
TSRMLS_CC);
http://cvs.php.net/viewvc.cgi/php-src/main/streams/glob_wrapper.c?view=markup&rev=1.1
Index: php-src/main/streams/glob_wrapper.c
+++ php-src/main/streams/glob_wrapper.c
/*
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2007 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| [EMAIL PROTECTED] so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Authors: Marcus Boerger <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
/* $Id: glob_wrapper.c,v 1.1 2007/03/03 20:41:12 helly Exp $ */
#include "php.h"
#include "php_streams_int.h"
#ifdef HAVE_GLOB
# ifndef PHP_WIN32
# include <glob.h>
# else
# include "win32/glob.h"
# endif
#endif
#ifndef GLOB_ONLYDIR
#define GLOB_ONLYDIR (1<<30)
#define GLOB_FLAGMASK (~GLOB_ONLYDIR)
#else
#define GLOB_FLAGMASK (~0)
#endif
typedef struct {
glob_t glob;
size_t index;
int flags;
char *path;
size_t path_len;
} glob_s_t;
PHPAPI char* _php_glob_stream_get_path(php_stream *stream, int copy, int *plen
STREAMS_DC TSRMLS_DC) /* {{{ */
{
glob_s_t *pglob = (glob_s_t *)stream->abstract;
if (pglob && pglob->path) {
if (plen) {
*plen = pglob->path_len;
}
if (copy) {
return estrndup(pglob->path, pglob->path_len);
} else {
return pglob->path;
}
} else {
if (plen) {
*plen = 0;
}
return NULL;
}
}
/* }}} */
static void php_glob_stream_path_split(glob_s_t *pglob, char *path, int
get_path, char **p_file TSRMLS_DC) /* {{{ */
{
char *pos, *gpath = path;
if ((pos = strrchr(path, '/')) != NULL) {
path = pos+1;
}
#if defined(PHP_WIN32) || defined(NETWARE)
if ((pos = strrchr(path, '\\')) != NULL) {
if (pos != NULL) {
path = pos+1;
}
#endif
*p_file = path;
if (get_path) {
if (pglob->path) {
efree(pglob->path);
}
pglob->path_len = path - gpath;
pglob->path = estrndup(gpath, pglob->path_len);
}
}
/* }}} */
static size_t php_glob_stream_read(php_stream *stream, char *buf, size_t count
TSRMLS_DC) /* {{{ */
{
glob_s_t *pglob = (glob_s_t *)stream->abstract;
php_stream_dirent *ent = (php_stream_dirent*)buf;
char *path;
/* avoid problems if someone mis-uses the stream */
if (count == sizeof(php_stream_dirent) && pglob) {
if (pglob->index < pglob->glob.gl_pathc) {
php_glob_stream_path_split(pglob,
pglob->glob.gl_pathv[pglob->index++], pglob->flags & GLOB_APPEND, &path
TSRMLS_CC);
PHP_STRLCPY(ent->d_name, path, sizeof(ent->d_name),
strlen(path));
return sizeof(php_stream_dirent);
}
pglob->index = pglob->glob.gl_pathc;
if (pglob->path) {
efree(pglob->path);
pglob->path = NULL;
}
}
return 0;
}
/* }}} */
static int php_glob_stream_close(php_stream *stream, int close_handle
TSRMLS_DC) /* {{{ */
{
glob_s_t *pglob = (glob_s_t *)stream->abstract;
if (pglob) {
pglob->index = 0;
globfree(&pglob->glob);
if (pglob->path) {
efree(pglob->path);
}
}
efree(stream->abstract);
return 0;
}
/* {{{ */
static int php_glob_stream_rewind(php_stream *stream, off_t offset, int whence,
off_t *newoffs TSRMLS_DC) /* {{{ */
{
glob_s_t *pglob = (glob_s_t *)stream->abstract;
if (pglob) {
pglob->index = 0;
if (pglob->path) {
efree(pglob->path);
pglob->path = NULL;
}
}
return 0;
}
/* }}} */
static php_stream_ops php_glob_stream_ops = {
NULL, php_glob_stream_read,
php_glob_stream_close, NULL,
"glob",
php_glob_stream_rewind,
NULL, /* cast */
NULL, /* stat */
NULL /* set_option */
};
/* {{{ php_glob_stream_opener */
static php_stream *php_glob_stream_opener(php_stream_wrapper *wrapper, char
*path, char *mode,
int options, char **opened_path, php_stream_context *context
STREAMS_DC TSRMLS_DC)
{
glob_s_t *pglob;
int ret;
char *tmp;
if (((options & STREAM_DISABLE_OPEN_BASEDIR) == 0) &&
php_check_open_basedir(path TSRMLS_CC)) {
return NULL;
}
if (!strncmp(path, "glob://", sizeof("glob://")-1)) {
path += sizeof("glob://")-1;
if (opened_path) {
*opened_path = estrdup(path);
}
}
pglob = ecalloc(sizeof(*pglob), 1);
if (0 != (ret = glob(path, pglob->flags & GLOB_FLAGMASK, NULL,
&pglob->glob))) {
#ifdef GLOB_NOMATCH
if (GLOB_NOMATCH != ret)
#endif
{
efree(pglob);
return NULL;
}
}
#ifdef GLOB_APPEND
if ((pglob->flags & GLOB_APPEND) == 0)
#endif
{
if (pglob->glob.gl_pathc) {
php_glob_stream_path_split(pglob,
pglob->glob.gl_pathv[0], 1, &tmp TSRMLS_CC);
} else {
php_glob_stream_path_split(pglob, path, 1, &tmp
TSRMLS_CC);
}
}
return php_stream_alloc(&php_glob_stream_ops, pglob, 0, mode);
}
/* }}} */
static php_stream_wrapper_ops php_glob_stream_wrapper_ops = {
NULL,
NULL,
NULL,
NULL,
php_glob_stream_opener,
"glob",
NULL,
NULL,
NULL,
NULL
};
php_stream_wrapper php_glob_stream_wrapper = {
&php_glob_stream_wrapper_ops,
NULL,
0
};
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
* vim600: noet sw=4 ts=4 fdm=marker
* vim<600: noet sw=4 ts=4
*/
http://cvs.php.net/viewvc.cgi/php-src/main/streams/php_stream_glob_wrapper.h?view=markup&rev=1.1
Index: php-src/main/streams/php_stream_glob_wrapper.h
+++ php-src/main/streams/php_stream_glob_wrapper.h
/*
+----------------------------------------------------------------------+
| PHP Version 5 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2007 The PHP Group |
+----------------------------------------------------------------------+
| This source file is subject to version 3.01 of the PHP license, |
| that is bundled with this package in the file LICENSE, and is |
| available through the world-wide-web at the following url: |
| http://www.php.net/license/3_01.txt |
| If you did not receive a copy of the PHP license and are unable to |
| obtain it through the world-wide-web, please send a note to |
| [EMAIL PROTECTED] so we can mail you a copy immediately. |
+----------------------------------------------------------------------+
| Author: Marcus Boerger <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
/* $Id: php_stream_glob_wrapper.h,v 1.1 2007/03/03 20:41:12 helly Exp $ */
PHPAPI extern php_stream_wrapper php_glob_stream_wrapper;
BEGIN_EXTERN_C()
PHPAPI char* _php_glob_stream_get_path(php_stream *stream, int copy, int *plen
STREAMS_DC TSRMLS_DC);
#define php_glob_stream_get_path(stream, copy, plen)
_php_glob_stream_get_path((stream), (copy), (plen) STREAMS_CC TSRMLS_CC)
END_EXTERN_C()
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
* vim600: sw=4 ts=4 fdm=marker
* vim<600: sw=4 ts=4
*/
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php