shane Sun Oct 19 16:04:34 2003 EDT
Modified files:
/php-src/ext/standard basic_functions.c php_fopen_wrappers.h
/php-src/main/streams plain_wrapper.c
Log:
make file uri's work with streams
Index: php-src/ext/standard/basic_functions.c
diff -u php-src/ext/standard/basic_functions.c:1.632
php-src/ext/standard/basic_functions.c:1.633
--- php-src/ext/standard/basic_functions.c:1.632 Tue Oct 14 20:18:53 2003
+++ php-src/ext/standard/basic_functions.c Sun Oct 19 16:04:32 2003
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: basic_functions.c,v 1.632 2003/10/15 00:18:53 wez Exp $ */
+/* $Id: basic_functions.c,v 1.633 2003/10/19 20:04:32 shane Exp $ */
#include "php.h"
#include "php_streams.h"
@@ -1147,6 +1147,7 @@
PHP_MINIT(imagetypes)(INIT_FUNC_ARGS_PASSTHRU);
php_register_url_stream_wrapper("php", &php_stream_php_wrapper TSRMLS_CC);
+ php_register_url_stream_wrapper("file", &php_plain_files_wrapper TSRMLS_CC);
#ifndef PHP_CURL_URL_WRAPPERS
php_register_url_stream_wrapper("http", &php_stream_http_wrapper TSRMLS_CC);
php_register_url_stream_wrapper("ftp", &php_stream_ftp_wrapper TSRMLS_CC);
Index: php-src/ext/standard/php_fopen_wrappers.h
diff -u php-src/ext/standard/php_fopen_wrappers.h:1.18
php-src/ext/standard/php_fopen_wrappers.h:1.19
--- php-src/ext/standard/php_fopen_wrappers.h:1.18 Tue Jun 10 16:03:38 2003
+++ php-src/ext/standard/php_fopen_wrappers.h Sun Oct 19 16:04:32 2003
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_fopen_wrappers.h,v 1.18 2003/06/10 20:03:38 imajes Exp $ */
+/* $Id: php_fopen_wrappers.h,v 1.19 2003/10/19 20:04:32 shane Exp $ */
#ifndef PHP_FOPEN_WRAPPERS_H
#define PHP_FOPEN_WRAPPERS_H
@@ -28,5 +28,6 @@
extern PHPAPI php_stream_wrapper php_stream_http_wrapper;
extern PHPAPI php_stream_wrapper php_stream_ftp_wrapper;
extern php_stream_wrapper php_stream_php_wrapper;
+extern php_stream_wrapper php_plain_files_wrapper;
#endif
Index: php-src/main/streams/plain_wrapper.c
diff -u php-src/main/streams/plain_wrapper.c:1.23
php-src/main/streams/plain_wrapper.c:1.24
--- php-src/main/streams/plain_wrapper.c:1.23 Wed Oct 8 06:55:51 2003
+++ php-src/main/streams/plain_wrapper.c Sun Oct 19 16:04:33 2003
@@ -16,12 +16,13 @@
+----------------------------------------------------------------------+
*/
-/* $Id: plain_wrapper.c,v 1.23 2003/10/08 10:55:51 wez Exp $ */
+/* $Id: plain_wrapper.c,v 1.24 2003/10/19 20:04:33 shane Exp $ */
#include "php.h"
#include "php_globals.h"
#include "php_network.h"
#include "php_open_temporary_file.h"
+#include "ext/standard/url.h"
#include "ext/standard/file.h"
#include "ext/standard/flock_compat.h"
#include <stddef.h>
@@ -86,13 +87,18 @@
PHPAPI php_stream *_php_stream_fopen(const char *filename, const char *mode, char
**opened_path, int options STREAMS_DC TSRMLS_DC)
{
char *realpath = NULL;
+ php_url *url = NULL;
struct stat st;
int open_flags;
int fd;
- php_stream *ret;
+ php_stream *ret = NULL;
int persistent = options & STREAM_OPEN_PERSISTENT;
char *persistent_id = NULL;
+ if(!filename) {
+ return NULL;
+ }
+
if (FAILURE == php_stream_parse_fopen_modes(mode, &open_flags)) {
if (options & REPORT_ERRORS) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "`%s' is not a
valid mode for fopen", mode);
@@ -100,8 +106,13 @@
return NULL;
}
+ if (!strncasecmp(filename, "file", 4)) {
+ url = php_url_parse((char *)filename);
+ filename = url->path;
+ }
+
if ((realpath = expand_filepath(filename, NULL TSRMLS_CC)) == NULL) {
- return NULL;
+ goto stream_fopen_done;
}
if (persistent) {
@@ -112,14 +123,10 @@
*opened_path = realpath;
realpath = NULL;
}
- if (realpath) {
- efree(realpath);
- }
/* fall through */
case PHP_STREAM_PERSISTENT_FAILURE:
- efree(persistent_id);;
- return ret;
+ goto stream_fopen_done;
}
}
@@ -143,22 +150,22 @@
*opened_path = realpath;
realpath = NULL;
}
- if (realpath) {
- efree(realpath);
- }
- if (persistent_id) {
- efree(persistent_id);
- }
- return ret;
+ goto stream_fopen_done;
}
err:
close(fd);
}
- efree(realpath);
+stream_fopen_done:
+ if (realpath) {
+ efree(realpath);
+ }
+ if (url) {
+ efree(url);
+ }
if (persistent_id) {
efree(persistent_id);
}
- return NULL;
+ return ret;
}
/* }}} */
@@ -959,6 +966,7 @@
{
/* code ripped off from fopen_wrappers.c */
char *pathbuf, *ptr, *end;
+ php_url *url = NULL;
char *exec_fname;
char trypath[MAXPATHLEN];
struct stat sb;
@@ -975,6 +983,11 @@
return NULL;
}
+ if (!strncasecmp(filename, "file", 4)) {
+ url = php_url_parse((char *)filename);
+ filename = url->path;
+ }
+
filename_length = strlen(filename);
/* Relative path open */
@@ -990,13 +1003,16 @@
if (((options & STREAM_DISABLE_OPEN_BASEDIR) == 0) &&
php_check_open_basedir(filename TSRMLS_CC)) {
- return NULL;
+ stream = NULL;
+ goto stream_done;
}
if (PG(safe_mode) && (!php_checkuid(filename, mode,
CHECKUID_CHECK_MODE_PARAM))) {
- return NULL;
+ stream = NULL;
+ goto stream_done;
}
- return php_stream_fopen_rel(filename, mode, opened_path, options);
+ stream = php_stream_fopen_rel(filename, mode, opened_path, options);
+ goto stream_done;
}
/*
@@ -1010,17 +1026,23 @@
if (IS_ABSOLUTE_PATH(filename, filename_length)) {
if (((options & STREAM_DISABLE_OPEN_BASEDIR) == 0) &&
php_check_open_basedir(filename TSRMLS_CC)) {
- return NULL;
+ stream = NULL;
+ goto stream_done;
}
- if ((php_check_safe_mode_include_dir(filename TSRMLS_CC)) == 0)
+ if ((php_check_safe_mode_include_dir(filename TSRMLS_CC)) == 0) {
/* filename is in safe_mode_include_dir (or subdir) */
- return php_stream_fopen_rel(filename, mode, opened_path,
options);
+ stream = php_stream_fopen_rel(filename, mode, opened_path,
options);
+ goto stream_done;
+ }
- if (PG(safe_mode) && (!php_checkuid(filename, mode,
CHECKUID_CHECK_MODE_PARAM)))
- return NULL;
+ if (PG(safe_mode) && (!php_checkuid(filename, mode,
CHECKUID_CHECK_MODE_PARAM))) {
+ stream = NULL;
+ goto stream_done;
+ }
- return php_stream_fopen_rel(filename, mode, opened_path, options);
+ stream = php_stream_fopen_rel(filename, mode, opened_path, options);
+ goto stream_done;
}
#ifdef PHP_WIN32
@@ -1036,29 +1058,36 @@
free(cwd);
if (((options & STREAM_DISABLE_OPEN_BASEDIR) == 0) &&
php_check_open_basedir(trypath TSRMLS_CC)) {
- return NULL;
+ stream = NULL;
+ goto stream_done;
}
if ((php_check_safe_mode_include_dir(trypath TSRMLS_CC)) == 0) {
- return php_stream_fopen_rel(trypath, mode, opened_path,
options);
+ stream = php_stream_fopen_rel(trypath, mode, opened_path,
options);
+ goto stream_done;
}
if (PG(safe_mode) && (!php_checkuid(trypath, mode,
CHECKUID_CHECK_MODE_PARAM))) {
- return NULL;
+ stream = NULL;
+ goto stream_done;
}
- return php_stream_fopen_rel(trypath, mode, opened_path, options);
+ stream = php_stream_fopen_rel(trypath, mode, opened_path, options);
+ goto stream_done;
}
#endif
if (!path || (path && !*path)) {
if (((options & STREAM_DISABLE_OPEN_BASEDIR) == 0) &&
php_check_open_basedir(path TSRMLS_CC)) {
- return NULL;
+ stream = NULL;
+ goto stream_done;
}
if (PG(safe_mode) && (!php_checkuid(filename, mode,
CHECKUID_CHECK_MODE_PARAM))) {
- return NULL;
+ stream = NULL;
+ goto stream_done;
}
- return php_stream_fopen_rel(filename, mode, opened_path, options);
+ stream = php_stream_fopen_rel(filename, mode, opened_path, options);
+ goto stream_done;
}
/* check in provided path */
@@ -1117,12 +1146,18 @@
stream = php_stream_fopen_rel(trypath, mode, opened_path, options);
if (stream) {
stream_done:
+ if (url) {
+ efree(url);
+ }
efree(pathbuf);
return stream;
}
ptr = end;
} /* end provided path */
+ if (url) {
+ efree(url);
+ }
efree(pathbuf);
return NULL;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php