sniper Fri May 30 21:37:46 2003 EDT
Modified files: (Branch: PHP_4_3)
/php4 NEWS
/Zend flex.skl zend.c zend.h zend_compile.h zend_execute.c
zend_globals.h zend_ini_scanner.h zend_ini_scanner.l
zend_language_scanner.h zend_language_scanner.l
/php4/ext/standard basic_functions.c browscap.c
/php4/main main.c php_ini.c php_streams.h streams.c
/php4/sapi/aolserver aolserver.c
/php4/sapi/apache mod_php4.c sapi_apache.c
/php4/sapi/apache2filter sapi_apache2.c
/php4/sapi/apache2handler sapi_apache2.c
/php4/sapi/caudium caudium.c
/php4/sapi/cgi cgi_main.c config9.m4 getopt.c php_getopt.h
/php4/sapi/cli README getopt.c php_cli.c php_getopt.h
/php4/sapi/isapi php4isapi.c
/php4/sapi/phttpd phttpd.c
/php4/sapi/pi3web pi3web_sapi.c
/php4/sapi/roxen roxen.c
/php4/sapi/servlet servlet.c
/php4/sapi/thttpd thttpd.c
/php4/sapi/tux php_tux.c
/php4/sapi/webjames webjames.c
Log:
- Re-added the FD lexer patch.
# Marcus is going to add the long-opts patches back in after this.
Index: php4/NEWS
diff -u php4/NEWS:1.1247.2.228 php4/NEWS:1.1247.2.229
--- php4/NEWS:1.1247.2.228 Fri May 30 20:34:14 2003
+++ php4/NEWS Fri May 30 21:37:43 2003
@@ -1,6 +1,7 @@
PHP 4 NEWS
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
?? Jul 2003, Version 4.3.3
+- Improved the engine to use POSIX/socket IO where feasible. (Sascha)
- Improved NSAPI SAPI module (Uwe Schindler)
. php4_init (magnus.conf): new parameter to set alternate path to php.ini.
(php_ini="/path/to/php.ini")
@@ -9,9 +10,6 @@
(See sapi/nsapi/nsapi-readme.txt for more information)
. Added support for virtual()
. Synced $_SERVER variables to be similar to Apache variables
-- Added long options into CLI & CGI (e.g. --version). (Marcus)
-- Added new command line parameters -B, -F, -R and -E which allow to process
- stdin line by line (See 'php -h' or 'man php' for more). (Marcus)
- Added DBA handler 'inifile' to support ini files. (Marcus)
- Added a "DEBUG" note to 'php -v' output when --enable-debug is used. (Derick)
- Fixed ext/yaz to not log unless yaz.log_file is set. (Adam Dickmeiss)
Index: Zend/flex.skl
diff -u Zend/flex.skl:1.27.4.3 Zend/flex.skl:1.27.4.4
--- Zend/flex.skl:1.27.4.3 Wed May 21 03:53:20 2003
+++ Zend/flex.skl Fri May 30 21:37:43 2003
@@ -1,7 +1,7 @@
/* A Lexical scanner generated by flex */
/* Scanner skeleton version:
- * $Header: /usr/repository/Zend/flex.skl,v 1.27.4.3 2003/05/21 07:53:20 zeev Exp $
+ * $Header: /usr/repository/Zend/flex.skl,v 1.27.4.4 2003/05/31 01:37:43 sniper Exp $
*/
#define FLEX_SCANNER
@@ -9,6 +9,22 @@
#define YY_FLEX_MINOR_VERSION 5
%-
+
+/* for HAVE_* */
+#include "zend.h"
+
+/* for recv */
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+# include <sys/socket.h>
+#endif
+
+/* for read */
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
#include <stdio.h>
%*
@@ -154,7 +170,7 @@
struct yy_buffer_state
{
%-
- FILE *yy_input_file;
+ struct _zend_file_handle *yy_input_file;
%+
istream* yy_input_file;
%*
@@ -178,13 +194,6 @@
*/
int yy_is_our_buffer;
- /* Whether this is an "interactive" input source; if so, and
- * if we're using stdio for input, then we want to use getc()
- * instead of fread(), to make sure we stop fetching input after
- * each newline.
- */
- int yy_is_interactive;
-
/* Whether we're considered to be at the beginning of a line.
* If so, '^' rules will be active on the next match, otherwise
* not.
@@ -238,31 +247,19 @@
#define yy_init SCNG(init)
#define yy_start SCNG(start)
-#ifdef ZTS
-#define TSRMLS_D void ***tsrm_ls
-#define TSRMLS_DC , TSRMLS_D
-#define TSRMLS_C tsrm_ls
-#define TSRMLS_CC , TSRMLS_C
-#else
-#define TSRMLS_D
-#define TSRMLS_DC
-#define TSRMLS_C
-#define TSRMLS_CC
-#endif
-
/* Flag which is used to allow yywrap()'s to do buffer switches
* instead of setting up a fresh yyin. A bit of a hack ...
*/
/* static int yy_did_buffer_switch_on_eof; */
#define yy_did_buffer_switch_on_eof SCNG(_yy_did_buffer_switch_on_eof)
-void yyrestart YY_PROTO(( FILE *input_file TSRMLS_DC ));
+void yyrestart YY_PROTO(( struct _zend_file_handle *input_file TSRMLS_DC ));
void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer TSRMLS_DC ));
void yy_load_buffer_state YY_PROTO(( TSRMLS_D ));
-YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size TSRMLS_DC ));
+YY_BUFFER_STATE yy_create_buffer YY_PROTO(( struct _zend_file_handle *file, int size
TSRMLS_DC ));
void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b TSRMLS_DC ));
-void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file TSRMLS_DC ));
+void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, struct _zend_file_handle *file
TSRMLS_DC ));
void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b TSRMLS_DC ));
#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer TSRMLS_CC )
@@ -282,7 +279,6 @@
{ \
if ( ! yy_current_buffer ) \
yy_current_buffer = yy_create_buffer( SCNG(yy_in), YY_BUF_SIZE
TSRMLS_CC ); \
- yy_current_buffer->yy_is_interactive = is_interactive; \
}
#define yy_set_bol(at_bol) \
@@ -322,11 +318,6 @@
static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
%*
-#undef TSRMLS_D
-#undef TSRMLS_DC
-#undef TSRMLS_C
-#undef TSRMLS_CC
-
/* Done after the current pattern has been matched and before the
* corresponding action - sets up yytext.
*/
@@ -435,19 +426,25 @@
/* Copy whatever the last rule matched to the standard output. */
#ifndef ECHO
-%- Standard (non-C++) definition
-/* This used to be an fputs(), but since the string might contain NUL's,
- * we now use fwrite().
- */
-#define ECHO (void) fwrite( yytext, yyleng, 1, SCNG(yy_out) )
-%+ C++ definition
-#define ECHO LexerOutput( yytext, yyleng )
-%*
+#define ECHO
#endif
/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
* is returned in "result".
*/
+
+#define YY_INPUT(buf,result,max_size) do { \
+ result = yyin->type == ZEND_HANDLE_FD ? \
+ read(yyin->handle.fd, buf, max_size) \
+ : yyin->type == ZEND_HANDLE_FP ? \
+ fread(buf, 1, max_size, yyin->handle.fp) \
+ : yyin->type == ZEND_HANDLE_SOCKET_FD ? \
+ recv(yyin->handle.fd, buf, max_size, 0) \
+ : -1;
\
+ if (result < 0)
\
+ YY_FATAL_ERROR("input in flex scanner failed"); \
+} while (0)
+
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
%% fread()/read() definition of YY_INPUT goes here unless we're doing C++
@@ -524,6 +521,7 @@
if ( ! yy_start )
yy_start = 1; /* first start state */
+#if 0
if ( ! SCNG(yy_in) )
%-
SCNG(yy_in) = stdin;
@@ -537,6 +535,7 @@
%+
SCNG(yy_out) = &cout;
%*
+#endif
if ( ! yy_current_buffer )
yy_current_buffer =
@@ -1111,10 +1110,10 @@
%-
#ifdef YY_USE_PROTOS
-void yyrestart( FILE *input_file TSRMLS_DC )
+void yyrestart( struct _zend_file_handle *input_file TSRMLS_DC )
#else
void yyrestart( input_file TSRMLS_CC )
-FILE *input_file;
+struct _zend_file_handle *input_file;
#endif
%+
void yyFlexLexer::yyrestart( istream* input_file TSRMLS_DC )
@@ -1187,10 +1186,10 @@
%-
#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_create_buffer( FILE *file, int size TSRMLS_DC )
+YY_BUFFER_STATE yy_create_buffer( struct _zend_file_handle *file, int size TSRMLS_DC )
#else
YY_BUFFER_STATE yy_create_buffer( file, size TSRMLS_CC )
-FILE *file;
+struct _zend_file_handle *file;
int size;
#ifdef ZTS
void ***tsrm_ls;
@@ -1253,23 +1252,21 @@
%-
#ifndef YY_ALWAYS_INTERACTIVE
#ifndef YY_NEVER_INTERACTIVE
-extern int isatty YY_PROTO(( int ));
#endif
#endif
#ifdef YY_USE_PROTOS
-void yy_init_buffer( YY_BUFFER_STATE b, FILE *file TSRMLS_DC )
+void yy_init_buffer( YY_BUFFER_STATE b, struct _zend_file_handle *file TSRMLS_DC )
#else
void yy_init_buffer( b, file TSRMLS_CC )
YY_BUFFER_STATE b;
-FILE *file;
+struct _zend_file_handle *file;
#ifdef ZTS
void ***tsrm_ls;
#endif
#endif
%+
-extern "C" int isatty YY_PROTO(( int ));
void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, istream* file TSRMLS_DC )
%*
@@ -1280,17 +1277,7 @@
b->yy_fill_buffer = 1;
%-
-#if YY_ALWAYS_INTERACTIVE
- b->yy_is_interactive = 1;
-#else
-#if YY_NEVER_INTERACTIVE
- b->yy_is_interactive = 0;
-#else
- b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
-#endif
-#endif
%+
- b->yy_is_interactive = (file == (istream *) &cin) ? 1 : 0;
%*
}
@@ -1363,7 +1350,6 @@
b->yy_is_our_buffer = 0;
b->yy_input_file = 0;
b->yy_n_chars = b->yy_buf_size;
- b->yy_is_interactive = 0;
b->yy_at_bol = 1;
b->yy_fill_buffer = 0;
b->yy_buffer_status = YY_BUFFER_NEW;
Index: Zend/zend.c
diff -u Zend/zend.c:1.162.2.5 Zend/zend.c:1.162.2.6
--- Zend/zend.c:1.162.2.5 Wed May 21 03:53:20 2003
+++ Zend/zend.c Fri May 30 21:37:43 2003
@@ -48,6 +48,7 @@
ZEND_API int (*zend_printf)(const char *format, ...);
ZEND_API zend_write_func_t zend_write;
ZEND_API FILE *(*zend_fopen)(const char *filename, char **opened_path);
+ZEND_API zend_bool (*zend_open)(const char *filename, zend_file_handle *);
ZEND_API void (*zend_block_interruptions)(void);
ZEND_API void (*zend_unblock_interruptions)(void);
ZEND_API void (*zend_ticks_function)(int ticks);
@@ -255,6 +256,18 @@
}
+static zend_bool zend_open_wrapper(const char *filename, zend_file_handle *fh)
+{
+ fh->handle.fp = zend_fopen(filename, &fh->opened_path);
+
+ if (fh->handle.fp) {
+ fh->type = ZEND_HANDLE_FP;
+ return SUCCESS;
+ }
+ return FAILURE;
+}
+
+
static FILE *zend_fopen_wrapper(const char *filename, char **opened_path)
{
if (opened_path) {
@@ -432,6 +445,10 @@
zend_fopen = utility_functions->fopen_function;
if (!zend_fopen) {
zend_fopen = zend_fopen_wrapper;
+ }
+ zend_open = utility_functions->open_function;
+ if (!zend_open) {
+ zend_open = zend_open_wrapper;
}
zend_message_dispatcher_p = utility_functions->message_handler;
zend_block_interruptions = utility_functions->block_interruptions;
Index: Zend/zend.h
diff -u Zend/zend.h:1.164.2.7 Zend/zend.h:1.164.2.8
--- Zend/zend.h:1.164.2.7 Wed May 21 03:53:20 2003
+++ Zend/zend.h Fri May 30 21:37:43 2003
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend.h,v 1.164.2.7 2003/05/21 07:53:20 zeev Exp $ */
+/* $Id: zend.h,v 1.164.2.8 2003/05/31 01:37:43 sniper Exp $ */
#ifndef ZEND_H
#define ZEND_H
@@ -279,6 +279,7 @@
int (*handle_property_set)(zend_property_reference *property_reference, zval
*value);
};
+struct _zend_file_handle;
typedef struct _zend_utility_functions {
@@ -292,6 +293,7 @@
int (*get_configuration_directive)(char *name, uint name_length, zval
*contents);
void (*ticks_function)(int ticks);
void (*on_timeout)(int seconds TSRMLS_DC);
+ zend_bool (*open_function)(const char *filename, struct _zend_file_handle *);
} zend_utility_functions;
@@ -417,6 +419,7 @@
extern ZEND_API int (*zend_printf)(const char *format, ...);
extern ZEND_API zend_write_func_t zend_write;
extern ZEND_API FILE *(*zend_fopen)(const char *filename, char **opened_path);
+extern ZEND_API zend_bool (*zend_open)(const char *filename, struct _zend_file_handle
*fh);
extern ZEND_API void (*zend_block_interruptions)(void);
extern ZEND_API void (*zend_unblock_interruptions)(void);
extern ZEND_API void (*zend_ticks_function)(int ticks);
Index: Zend/zend_compile.h
diff -u Zend/zend_compile.h:1.144.4.4 Zend/zend_compile.h:1.144.4.5
--- Zend/zend_compile.h:1.144.4.4 Wed May 21 03:53:20 2003
+++ Zend/zend_compile.h Fri May 30 21:37:43 2003
@@ -175,7 +175,7 @@
zend_bool free_filename;
} zend_file_handle;
-
+#define ZEND_IS_VALID_FILE_HANDLE(hn) ((((hn)->type == ZEND_HANDLE_FD || (hn)->type
== ZEND_HANDLE_SOCKET_FD) && (hn)->handle.fd >= 0) || ((hn)->type == ZEND_HANDLE_FP &&
(hn)->handle.fp != NULL))
#define IS_CONST (1<<0)
#define IS_TMP_VAR (1<<1)
@@ -568,6 +568,7 @@
#define ZEND_HANDLE_FP 2
#define ZEND_HANDLE_STDIOSTREAM 3
#define ZEND_HANDLE_FSTREAM 4
+#define ZEND_HANDLE_SOCKET_FD 5
#define ZEND_DECLARE_CLASS 1
#define ZEND_DECLARE_FUNCTION 2
Index: Zend/zend_execute.c
diff -u Zend/zend_execute.c:1.316.2.10 Zend/zend_execute.c:1.316.2.11
--- Zend/zend_execute.c:1.316.2.10 Wed May 21 03:53:20 2003
+++ Zend/zend_execute.c Fri May 30 21:37:43 2003
@@ -2101,38 +2101,32 @@
switch (EX(opline)->op2.u.constant.value.lval)
{
case ZEND_INCLUDE_ONCE:
case ZEND_REQUIRE_ONCE: {
- char *opened_path=NULL;
int dummy = 1;
- zend_file_handle
file_handle;
+ zend_file_handle
file_handle = {0};
- file_handle.handle.fp
= zend_fopen(inc_filename->value.str.val, &opened_path);
- file_handle.type =
ZEND_HANDLE_FP;
- file_handle.filename =
inc_filename->value.str.val;
-
file_handle.opened_path = opened_path;
-
file_handle.free_filename = 0;
+ if
(zend_open(inc_filename->value.str.val, &file_handle) == SUCCESS
+ &&
ZEND_IS_VALID_FILE_HANDLE(&file_handle)) {
- if
(file_handle.handle.fp) {
- if(
!opened_path ) {
-
opened_path = file_handle.opened_path = estrndup(inc_filename->value.str.val,
inc_filename->value.str.len);
+
file_handle.filename = inc_filename->value.str.val;
+
file_handle.free_filename = 0;
+
+ if(
!file_handle.opened_path ) {
+
file_handle.opened_path = estrndup(inc_filename->value.str.val,
inc_filename->value.str.len);
}
- if
(zend_hash_add(&EG(included_files), opened_path, strlen(opened_path)+1, (void
*)&dummy, sizeof(int), NULL)==SUCCESS) {
+ if
(zend_hash_add(&EG(included_files), file_handle.opened_path,
strlen(file_handle.opened_path)+1, (void *)&dummy, sizeof(int), NULL)==SUCCESS) {
new_op_array = zend_compile_file(&file_handle,
(EX(opline)->op2.u.constant.value.lval==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE)
TSRMLS_CC);
zend_destroy_file_handle(&file_handle TSRMLS_CC);
-
opened_path = NULL; /* zend_destroy_file_handle() already frees it */
} else {
-
fclose(file_handle.handle.fp);
+
zend_file_handle_dtor(&file_handle);
failure_retval=1;
}
} else {
if
(EX(opline)->op2.u.constant.value.lval==ZEND_INCLUDE_ONCE) {
-
zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handle.filename);
+
zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, inc_filename->value.str.val);
} else {
-
zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, file_handle.filename);
+
zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, inc_filename->value.str.val);
}
- }
- if (opened_path) {
-
efree(opened_path);
}
break;
}
Index: Zend/zend_globals.h
diff -u Zend/zend_globals.h:1.93.2.3 Zend/zend_globals.h:1.93.2.4
--- Zend/zend_globals.h:1.93.2.3 Wed May 21 03:53:20 2003
+++ Zend/zend_globals.h Fri May 30 21:37:43 2003
@@ -238,8 +238,8 @@
};
struct _zend_scanner_globals {
- FILE *yy_in;
- FILE *yy_out;
+ zend_file_handle *yy_in;
+ zend_file_handle *yy_out;
int yy_leng;
char *yy_text;
struct yy_buffer_state *current_buffer;
Index: Zend/zend_ini_scanner.h
diff -u Zend/zend_ini_scanner.h:1.10.8.2 Zend/zend_ini_scanner.h:1.10.8.3
--- Zend/zend_ini_scanner.h:1.10.8.2 Wed May 21 03:53:21 2003
+++ Zend/zend_ini_scanner.h Fri May 30 21:37:43 2003
@@ -5,7 +5,6 @@
int zend_ini_scanner_get_lineno(TSRMLS_D);
char *zend_ini_scanner_get_filename(TSRMLS_D);
int zend_ini_open_file_for_scanning(zend_file_handle *fh TSRMLS_DC);
-void zend_ini_close_file(zend_file_handle *fh TSRMLS_DC);
int ini_lex(zval *ini_lval TSRMLS_DC);
END_EXTERN_C()
Index: Zend/zend_ini_scanner.l
diff -u Zend/zend_ini_scanner.l:1.26.2.4 Zend/zend_ini_scanner.l:1.26.2.5
--- Zend/zend_ini_scanner.l:1.26.2.4 Wed May 21 03:53:21 2003
+++ Zend/zend_ini_scanner.l Fri May 30 21:37:43 2003
@@ -33,6 +33,10 @@
#include "zend_ini_parser.h"
#include "zend_ini_scanner.h"
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
#undef YYSTYPE
#define YYSTYPE zval
@@ -69,36 +73,41 @@
int zend_ini_open_file_for_scanning(zend_file_handle *fh TSRMLS_DC)
{
- FILE *fp;
-
switch (fh->type) {
- case ZEND_HANDLE_FP:
- fp = fh->handle.fp;
- break;
case ZEND_HANDLE_FILENAME:
- fp = zend_fopen(fh->filename, NULL);
fh->type = ZEND_HANDLE_FP;
+ fh->handle.fp = zend_fopen(fh->filename, NULL);
break;
- default:
- return FAILURE;
}
+ if (!ZEND_IS_VALID_FILE_HANDLE(fh))
+ return FAILURE;
+
init_ini_scanner(TSRMLS_C);
- yyin = fp;
+ yyin = fh;
yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE TSRMLS_CC) TSRMLS_CC);
ini_filename = fh->filename;
return SUCCESS;
}
-
void zend_ini_close_file(zend_file_handle *fh TSRMLS_DC)
{
- switch (fh->type) {
- case ZEND_HANDLE_FP:
- fclose(fh->handle.fp);
- break;
- }
+ switch (fh->type) {
+ case ZEND_HANDLE_SOCKET_FD:
+#ifdef ZEND_WIN32
+ closesocket(fh->handle.fd);
+ break;
+#endif
+ /* fall-through */
+ case ZEND_HANDLE_FD:
+ close(fh->handle.fd);
+ break;
+ case ZEND_HANDLE_FP:
+ fclose(fh->handle.fp);
+ break;
+ }
}
+
%}
Index: Zend/zend_language_scanner.h
diff -u Zend/zend_language_scanner.h:1.10.4.3 Zend/zend_language_scanner.h:1.10.4.4
--- Zend/zend_language_scanner.h:1.10.4.3 Wed May 21 03:53:21 2003
+++ Zend/zend_language_scanner.h Fri May 30 21:37:43 2003
@@ -24,7 +24,7 @@
typedef struct _zend_lex_state {
YY_BUFFER_STATE buffer_state;
int state;
- FILE *in;
+ zend_file_handle *in;
uint lineno;
char *filename;
#ifdef ZEND_MULTIBYTE
Index: Zend/zend_language_scanner.l
diff -u Zend/zend_language_scanner.l:1.54.2.19 Zend/zend_language_scanner.l:1.54.2.20
--- Zend/zend_language_scanner.l:1.54.2.19 Wed May 21 03:58:49 2003
+++ Zend/zend_language_scanner.l Fri May 30 21:37:43 2003
@@ -74,6 +74,11 @@
#endif
+#ifndef STDIN_FILENO
+# define STDIN_FILENO 0
+#endif
+
+
/* Globals Macros */
#define SCNG LANG_SCNG
#ifdef ZTS
@@ -198,6 +203,15 @@
ZEND_API void zend_file_handle_dtor(zend_file_handle *fh)
{
switch (fh->type) {
+ case ZEND_HANDLE_SOCKET_FD:
+#ifdef ZEND_WIN32
+ closesocket(fh->handle.fd);
+ break;
+#endif
+ /* fall-through */
+ case ZEND_HANDLE_FD:
+ close(fh->handle.fd);
+ break;
case ZEND_HANDLE_FP:
fclose(fh->handle.fp);
break;
@@ -209,9 +223,11 @@
}
if (fh->opened_path) {
efree(fh->opened_path);
+ fh->opened_path = NULL;
}
if (fh->free_filename && fh->filename) {
efree(fh->filename);
+ fh->filename = NULL;
}
}
@@ -225,6 +241,10 @@
case ZEND_HANDLE_FP:
return fh1->handle.fp==fh2->handle.fp;
break;
+ case ZEND_HANDLE_SOCKET_FD:
+ case ZEND_HANDLE_FD:
+ return fh1->handle.fd==fh2->handle.fd;
+ break;
}
return 0;
}
@@ -239,28 +259,28 @@
ZEND_API int open_file_for_scanning(zend_file_handle *file_handle TSRMLS_DC)
{
char *file_path=NULL;
+ int do_add = 1;
switch (file_handle->type) {
case ZEND_HANDLE_FILENAME:
- file_handle->handle.fp = zend_fopen(file_handle->filename,
&file_handle->opened_path);
- break;
- case ZEND_HANDLE_FD:
- file_handle->handle.fp = fdopen(file_handle->handle.fd, "r");
+ if (zend_open(file_handle->filename, file_handle) != SUCCESS)
+ return FAILURE;
break;
- case ZEND_HANDLE_FP:
- file_handle->handle.fp = file_handle->handle.fp;
- break;
- }
- if (!file_handle->handle.fp) {
- return FAILURE;
}
- file_handle->type = ZEND_HANDLE_FP;
- if (file_handle->handle.fp != stdin) {
+ if (!ZEND_IS_VALID_FILE_HANDLE(file_handle))
+ return FAILURE;
+
+ if (file_handle->type == ZEND_HANDLE_FP && file_handle->handle.fp == stdin)
+ do_add = 0;
+ else if (file_handle->type == ZEND_HANDLE_FD && file_handle->handle.fd ==
STDIN_FILENO)
+ do_add = 0;
+
+ if (do_add) {
zend_llist_add_element(&CG(open_files), file_handle);
}
/* Reset the scanner for scanning the new file */
- SCNG(yy_in) = file_handle->handle.fp;
+ SCNG(yy_in) = file_handle;
#ifdef ZEND_MULTIBYTE
if (zend_read_file(TSRMLS_C) != 0) {
return FAILURE;
@@ -391,7 +411,7 @@
zend_op_array *compile_filename(int type, zval *filename TSRMLS_DC)
{
- zend_file_handle file_handle;
+ zend_file_handle file_handle = {0};
zval tmp;
zend_op_array *retval;
char *opened_path = NULL;
@@ -407,9 +427,8 @@
file_handle.type = ZEND_HANDLE_FILENAME;
file_handle.opened_path = NULL;
-
retval = zend_compile_file(&file_handle, type TSRMLS_CC);
- if (retval && file_handle.handle.fp) {
+ if (retval && ZEND_IS_VALID_FILE_HANDLE(&file_handle)) {
int dummy = 1;
if (!file_handle.opened_path) {
@@ -544,7 +563,7 @@
int highlight_file(char *filename, zend_syntax_highlighter_ini
*syntax_highlighter_ini TSRMLS_DC)
{
zend_lex_state original_lex_state;
- zend_file_handle file_handle;
+ zend_file_handle file_handle = {0};
file_handle.type = ZEND_HANDLE_FILENAME;
file_handle.filename = filename;
@@ -666,27 +685,41 @@
SCNG(code) = NULL;
SCNG(code_size) = 0;
- do {
- n = fread(buf, 1, 8192, SCNG(yy_in));
- if (n) {
- SCNG(code_size) += n;
- if (SCNG(code)) {
- SCNG(code) = (char*)erealloc(SCNG(code),
SCNG(code_size)+1);
- if (!SCNG(code)) {
- return -1;
- }
- } else {
- SCNG(code) = (char*)emalloc(SCNG(code_size)+1);
- if (!SCNG(code)) {
- return -1;
- }
+ for (;;) {
+ switch (SCNG(yy_in)->type) {
+ case ZEND_HANDLE_FD:
+ n = read(SCNG(yy_in)->handle.fd, buf, sizeof(buf));
+ break;
+ case ZEND_HANDLE_FP:
+ n = fread(buf, sizeof(buf[0]), sizeof(buf) /
sizeof(buf[0]), SCNG(yy_in)->handle.fp);
+ break;
+ case ZEND_HANDLE_SOCKET_FD:
+ n = recv(SCNG(yy_in)->handle.fd, buf, sizeof(buf),
0);
+ }
+
+ if (n <= 0) {
+ break;
+ }
+
+ SCNG(code_size) += n;
+ if (SCNG(code)) {
+ SCNG(code) = (char*)erealloc(SCNG(code), SCNG(code_size)+1);
+ if (!SCNG(code)) {
+ return -1;
+ }
+ } else {
+ SCNG(code) = (char*)emalloc(SCNG(code_size)+1);
+ if (!SCNG(code)) {
+ return -1;
}
- memcpy(SCNG(code)+SCNG(code_size)-n, buf, n);
}
- } while(n);
- if (ferror(SCNG(yy_in))) {
+ memcpy(SCNG(code)+SCNG(code_size)-n, buf, n);
+ }
+
+ if (n < 0) {
return -1;
}
+
if (!SCNG(code)) {
SCNG(code) = emalloc(SCNG(code_size)+1);
}
Index: php4/ext/standard/basic_functions.c
diff -u php4/ext/standard/basic_functions.c:1.543.2.17
php4/ext/standard/basic_functions.c:1.543.2.18
--- php4/ext/standard/basic_functions.c:1.543.2.17 Wed May 21 05:34:12 2003
+++ php4/ext/standard/basic_functions.c Fri May 30 21:37:43 2003
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: basic_functions.c,v 1.543.2.17 2003/05/21 09:34:12 zeev Exp $ */
+/* $Id: basic_functions.c,v 1.543.2.18 2003/05/31 01:37:43 sniper Exp $ */
#include "php.h"
#include "php_streams.h"
@@ -2840,7 +2840,7 @@
PHP_FUNCTION(parse_ini_file)
{
zval **filename, **process_sections;
- zend_file_handle fh;
+ zend_file_handle fh = {0};
zend_ini_parser_cb_t ini_parser_cb;
switch (ARG_COUNT(ht)) {
Index: php4/ext/standard/browscap.c
diff -u php4/ext/standard/browscap.c:1.60.2.11 php4/ext/standard/browscap.c:1.60.2.12
--- php4/ext/standard/browscap.c:1.60.2.11 Tue May 27 13:24:09 2003
+++ php4/ext/standard/browscap.c Fri May 30 21:37:43 2003
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: browscap.c,v 1.60.2.11 2003/05/27 17:24:09 sniper Exp $ */
+/* $Id: browscap.c,v 1.60.2.12 2003/05/31 01:37:43 sniper Exp $ */
#include "php.h"
#include "php_regex.h"
@@ -150,7 +150,7 @@
char *browscap = INI_STR("browscap");
if (browscap) {
- zend_file_handle fh;
+ zend_file_handle fh = {0};
if (zend_hash_init(&browser_hash, 0, NULL, (dtor_func_t)
browscap_entry_dtor, 1)==FAILURE) {
return FAILURE;
Index: php4/main/main.c
diff -u php4/main/main.c:1.512.2.37 php4/main/main.c:1.512.2.38
--- php4/main/main.c:1.512.2.37 Wed May 21 18:54:38 2003
+++ php4/main/main.c Fri May 30 21:37:43 2003
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: main.c,v 1.512.2.37 2003/05/21 22:54:38 iliaa Exp $ */
+/* $Id: main.c,v 1.512.2.38 2003/05/31 01:37:43 sniper Exp $ */
/* {{{ includes
*/
@@ -763,6 +763,17 @@
}
/* }}} */
+
+/* {{{ php_open_wrapper_for_zend
+ */
+static zend_bool php_open_wrapper_for_zend(const char *filename, struct
_zend_file_handle *fh)
+{
+ TSRMLS_FETCH();
+
+ return php_stream_open_wrapper_as_file_handle((char *)filename, "rb",
ENFORCE_SAFE_MODE|USE_PATH|IGNORE_URL_WIN|REPORT_ERRORS|STREAM_OPEN_FOR_INCLUDE, fh);
+}
+/* }}} */
+
/* {{{ php_get_configuration_directive_for_zend
*/
static int php_get_configuration_directive_for_zend(char *name, uint name_length,
zval *contents)
@@ -1096,6 +1107,7 @@
zuf.printf_function = php_printf;
zuf.write_function = php_body_write_wrapper;
zuf.fopen_function = php_fopen_wrapper_for_zend;
+ zuf.open_function = php_open_wrapper_for_zend;
zuf.message_handler = php_message_handler_for_zend;
zuf.block_interruptions = sapi_module.block_interruptions;
zuf.unblock_interruptions = sapi_module.unblock_interruptions;
@@ -1591,7 +1603,7 @@
PHPAPI int php_execute_script(zend_file_handle *primary_file TSRMLS_DC)
{
zend_file_handle *prepend_file_p, *append_file_p;
- zend_file_handle prepend_file, append_file;
+ zend_file_handle prepend_file = {0}, append_file = {0};
#if HAVE_BROKEN_GETCWD
int old_cwd_fd = -1;
#else
Index: php4/main/php_ini.c
diff -u php4/main/php_ini.c:1.106.2.11 php4/main/php_ini.c:1.106.2.12
--- php4/main/php_ini.c:1.106.2.11 Wed May 21 05:34:13 2003
+++ php4/main/php_ini.c Fri May 30 21:37:44 2003
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_ini.c,v 1.106.2.11 2003/05/21 09:34:13 zeev Exp $ */
+/* $Id: php_ini.c,v 1.106.2.12 2003/05/31 01:37:44 sniper Exp $ */
/* Check CWD for php.ini */
#define INI_CHECK_CWD
@@ -236,7 +236,7 @@
int safe_mode_state;
char *open_basedir;
int free_ini_search_path=0;
- zend_file_handle fh;
+ zend_file_handle fh = {0};
struct stat sb;
char ini_file[MAXPATHLEN];
char *p;
@@ -347,7 +347,6 @@
PG(safe_mode) = 0;
PG(open_basedir) = NULL;
- memset(&fh, 0, sizeof(fh));
/* Check if php_ini_path_override is a file */
if (!sapi_module.php_ini_ignore) {
if (sapi_module.php_ini_path_override &&
sapi_module.php_ini_path_override[0]) {
Index: php4/main/php_streams.h
diff -u php4/main/php_streams.h:1.61.2.13 php4/main/php_streams.h:1.61.2.14
--- php4/main/php_streams.h:1.61.2.13 Wed May 21 06:19:03 2003
+++ php4/main/php_streams.h Fri May 30 21:37:44 2003
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_streams.h,v 1.61.2.13 2003/05/21 10:19:03 zeev Exp $ */
+/* $Id: php_streams.h,v 1.61.2.14 2003/05/31 01:37:44 sniper Exp $ */
#ifndef PHP_STREAMS_H
#define PHP_STREAMS_H
@@ -553,6 +553,9 @@
PHPAPI FILE * _php_stream_open_wrapper_as_file(char * path, char * mode, int options,
char **opened_path STREAMS_DC TSRMLS_DC);
#define php_stream_open_wrapper_as_file(path, mode, options, opened_path)
_php_stream_open_wrapper_as_file((path), (mode), (options), (opened_path) STREAMS_CC
TSRMLS_CC)
+
+PHPAPI zend_bool _php_stream_open_wrapper_as_file_handle(char * path, char * mode,
int options, zend_file_handle * STREAMS_DC TSRMLS_DC);
+#define php_stream_open_wrapper_as_file_handle(path, mode, options, fh)
_php_stream_open_wrapper_as_file_handle((path), (mode), (options), (fh) STREAMS_CC
TSRMLS_CC)
/* for user-space streams */
PHPAPI extern php_stream_ops php_stream_userspace_ops;
Index: php4/main/streams.c
diff -u php4/main/streams.c:1.125.2.67 php4/main/streams.c:1.125.2.68
--- php4/main/streams.c:1.125.2.67 Wed May 28 06:15:00 2003
+++ php4/main/streams.c Fri May 30 21:37:44 2003
@@ -20,7 +20,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: streams.c,v 1.125.2.67 2003/05/28 10:15:00 wez Exp $ */
+/* $Id: streams.c,v 1.125.2.68 2003/05/31 01:37:44 sniper Exp $ */
#define _GNU_SOURCE
#include "php.h"
@@ -2728,6 +2728,45 @@
+/* {{{ php_stream_open_wrapper_as_file_handle */
+PHPAPI zend_bool _php_stream_open_wrapper_as_file_handle(char *path, char *mode, int
options, zend_file_handle *fh STREAMS_DC TSRMLS_DC)
+{
+ php_stream *stream = NULL;
+ int is_sock = 0;
+
+ stream = php_stream_open_wrapper_rel(path, mode, options|STREAM_WILL_CAST,
&fh->opened_path);
+
+ if (stream == NULL)
+ return FAILURE;
+
+ if ((options & STREAM_OPEN_FOR_INCLUDE)
+ && php_stream_is(stream, PHP_STREAM_IS_SOCKET)) {
+ is_sock = 1;
+ }
+
+ if (php_stream_can_cast(stream, PHP_STREAM_AS_FD) == SUCCESS &&
+ php_stream_cast(stream, PHP_STREAM_AS_FD |
PHP_STREAM_CAST_TRY_HARD
+ | PHP_STREAM_CAST_RELEASE, (void **) &fh->handle.fd,
+ REPORT_ERRORS) == SUCCESS) {
+ if (is_sock) {
+ fh->type = ZEND_HANDLE_SOCKET_FD;
+ } else {
+ fh->type = ZEND_HANDLE_FD;
+ }
+ } else if (php_stream_cast(stream, PHP_STREAM_AS_STDIO
+ |PHP_STREAM_CAST_TRY_HARD | PHP_STREAM_CAST_RELEASE,
+ (void**) &fh->handle.fp, REPORT_ERRORS) == SUCCESS) {
+ fh->type = ZEND_HANDLE_FP;
+ } else {
+ php_stream_close(stream);
+ if (fh->opened_path)
+ efree(fh->opened_path);
+ fh->opened_path = NULL;
+ return FAILURE;
+ }
+ return SUCCESS;
+}
+/* }}} */
/* {{{ php_stream_make_seekable */
PHPAPI int _php_stream_make_seekable(php_stream *origstream, php_stream **newstream,
int flags STREAMS_DC TSRMLS_DC)
Index: php4/sapi/aolserver/aolserver.c
diff -u php4/sapi/aolserver/aolserver.c:1.72.2.3
php4/sapi/aolserver/aolserver.c:1.72.2.4
--- php4/sapi/aolserver/aolserver.c:1.72.2.3 Wed May 21 05:34:13 2003
+++ php4/sapi/aolserver/aolserver.c Fri May 30 21:37:44 2003
@@ -22,7 +22,7 @@
* - CGI/1.1 conformance
*/
-/* $Id: aolserver.c,v 1.72.2.3 2003/05/21 09:34:13 zeev Exp $ */
+/* $Id: aolserver.c,v 1.72.2.4 2003/05/31 01:37:44 sniper Exp $ */
/* conflict between PHP and AOLserver headers */
#define Debug php_Debug
@@ -205,7 +205,7 @@
int i;
php_info_print_table_start();
- php_info_print_table_row(2, "SAPI module version", "$Id: aolserver.c,v
1.72.2.3 2003/05/21 09:34:13 zeev Exp $");
+ php_info_print_table_row(2, "SAPI module version", "$Id: aolserver.c,v
1.72.2.4 2003/05/31 01:37:44 sniper Exp $");
php_info_print_table_row(2, "Build date", Ns_InfoBuildDate());
php_info_print_table_row(2, "Config file path", Ns_InfoConfigFile());
php_info_print_table_row(2, "Error Log path", Ns_InfoErrorLog());
@@ -404,7 +404,7 @@
static int
php_ns_module_main(TSRMLS_D)
{
- zend_file_handle file_handle;
+ zend_file_handle file_handle = {0};
file_handle.type = ZEND_HANDLE_FILENAME;
file_handle.filename = SG(request_info).path_translated;
Index: php4/sapi/apache/mod_php4.c
diff -u php4/sapi/apache/mod_php4.c:1.146.2.10 php4/sapi/apache/mod_php4.c:1.146.2.11
--- php4/sapi/apache/mod_php4.c:1.146.2.10 Wed May 21 05:34:13 2003
+++ php4/sapi/apache/mod_php4.c Fri May 30 21:37:44 2003
@@ -17,7 +17,7 @@
| PHP 4.0 patches by Zeev Suraski <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: mod_php4.c,v 1.146.2.10 2003/05/21 09:34:13 zeev Exp $ */
+/* $Id: mod_php4.c,v 1.146.2.11 2003/05/31 01:37:44 sniper Exp $ */
#include "php_apache_http.h"
#include "http_conf_globals.h"
@@ -534,7 +534,7 @@
TSRMLS_FETCH();
if (AP(in_request)) {
- zend_file_handle fh;
+ zend_file_handle fh = {0};
fh.filename = r->filename;
fh.opened_path = NULL;
Index: php4/sapi/apache/sapi_apache.c
diff -u php4/sapi/apache/sapi_apache.c:1.40.4.4 php4/sapi/apache/sapi_apache.c:1.40.4.5
--- php4/sapi/apache/sapi_apache.c:1.40.4.4 Wed May 21 05:34:13 2003
+++ php4/sapi/apache/sapi_apache.c Fri May 30 21:37:44 2003
@@ -19,7 +19,7 @@
| Stig Bakken <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: sapi_apache.c,v 1.40.4.4 2003/05/21 09:34:13 zeev Exp $ */
+/* $Id: sapi_apache.c,v 1.40.4.5 2003/05/31 01:37:44 sniper Exp $ */
#include "php_apache_http.h"
@@ -28,7 +28,7 @@
int apache_php_module_main(request_rec *r, int display_source_mode TSRMLS_DC)
{
int retval = OK;
- zend_file_handle file_handle;
+ zend_file_handle file_handle = {0};
if (php_request_startup(TSRMLS_C) == FAILURE) {
return FAILURE;
Index: php4/sapi/apache2filter/sapi_apache2.c
diff -u php4/sapi/apache2filter/sapi_apache2.c:1.91.2.15
php4/sapi/apache2filter/sapi_apache2.c:1.91.2.16
--- php4/sapi/apache2filter/sapi_apache2.c:1.91.2.15 Thu May 22 22:42:22 2003
+++ php4/sapi/apache2filter/sapi_apache2.c Fri May 30 21:37:44 2003
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: sapi_apache2.c,v 1.91.2.15 2003/05/23 02:42:22 iliaa Exp $ */
+/* $Id: sapi_apache2.c,v 1.91.2.16 2003/05/31 01:37:44 sniper Exp $ */
#include <fcntl.h>
@@ -452,7 +452,7 @@
}
for (b = APR_BRIGADE_FIRST(bb); b != APR_BRIGADE_SENTINEL(bb); b =
APR_BUCKET_NEXT(b)) {
- zend_file_handle zfd;
+ zend_file_handle zfd = {0};
if (!ctx->request_processed && APR_BUCKET_IS_FILE(b)) {
const char *path;
Index: php4/sapi/apache2handler/sapi_apache2.c
diff -u php4/sapi/apache2handler/sapi_apache2.c:1.1.2.15
php4/sapi/apache2handler/sapi_apache2.c:1.1.2.16
--- php4/sapi/apache2handler/sapi_apache2.c:1.1.2.15 Thu May 22 22:42:22 2003
+++ php4/sapi/apache2handler/sapi_apache2.c Fri May 30 21:37:44 2003
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: sapi_apache2.c,v 1.1.2.15 2003/05/23 02:42:22 iliaa Exp $ */
+/* $Id: sapi_apache2.c,v 1.1.2.16 2003/05/31 01:37:44 sniper Exp $ */
#include <fcntl.h>
@@ -514,7 +514,7 @@
php_get_highlight_struct(&syntax_highlighter_ini);
highlight_file((char *)r->filename, &syntax_highlighter_ini TSRMLS_CC);
} else {
- zend_file_handle zfd;
+ zend_file_handle zfd = {0};
zfd.type = ZEND_HANDLE_FILENAME;
zfd.filename = (char *) r->filename;
Index: php4/sapi/caudium/caudium.c
diff -u php4/sapi/caudium/caudium.c:1.28.2.3 php4/sapi/caudium/caudium.c:1.28.2.4
--- php4/sapi/caudium/caudium.c:1.28.2.3 Wed May 21 05:34:14 2003
+++ php4/sapi/caudium/caudium.c Fri May 30 21:37:44 2003
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: caudium.c,v 1.28.2.3 2003/05/21 09:34:14 zeev Exp $ */
+/* $Id: caudium.c,v 1.28.2.4 2003/05/31 01:37:44 sniper Exp $ */
#include "php.h"
#ifdef HAVE_CAUDIUM
@@ -444,7 +444,7 @@
{
/* char buf[512]; */
php_info_print_table_start();
- php_info_print_table_row(2, "SAPI module version", "$Id: caudium.c,v 1.28.2.3
2003/05/21 09:34:14 zeev Exp $");
+ php_info_print_table_row(2, "SAPI module version", "$Id: caudium.c,v 1.28.2.4
2003/05/31 01:37:44 sniper Exp $");
/* php_info_print_table_row(2, "Build date", Ns_InfoBuildDate());
php_info_print_table_row(2, "Config file path", Ns_InfoConfigFile());
php_info_print_table_row(2, "Error Log path", Ns_InfoErrorLog());
@@ -564,7 +564,7 @@
static void php_caudium_module_main(php_caudium_request *ureq)
{
int res;
- zend_file_handle file_handle;
+ zend_file_handle file_handle = {0};
#ifndef USE_PIKE_LEVEL_THREADS
struct thread_state *state;
extern struct program *thread_id_prog;
Index: php4/sapi/cgi/cgi_main.c
diff -u php4/sapi/cgi/cgi_main.c:1.190.2.34 php4/sapi/cgi/cgi_main.c:1.190.2.35
--- php4/sapi/cgi/cgi_main.c:1.190.2.34 Fri May 30 13:03:10 2003
+++ php4/sapi/cgi/cgi_main.c Fri May 30 21:37:44 2003
@@ -20,7 +20,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: cgi_main.c,v 1.190.2.34 2003/05/30 17:03:10 derick Exp $ */
+/* $Id: cgi_main.c,v 1.190.2.35 2003/05/31 01:37:44 sniper Exp $ */
#include "php.h"
#include "php_globals.h"
@@ -117,31 +117,8 @@
#define PHP_MODE_LINT 4
#define PHP_MODE_STRIP 5
-static char *optarg = NULL;
-static int optind = 1;
-
-static const opt_struct OPTIONS[] = {
- {'a', 0, "interactive"},
- {'C', 0, "no-chdir"},
- {'c', 1, "php-ini"},
- {'d', 1, "define"},
- {'e', 0, "profile-info"},
- {'f', 1, "file"},
- {'g', 1, "global"},
- {'h', 0, "help"},
- {'i', 0, "info"},
- {'l', 0, "syntax-check"},
- {'m', 0, "modules"},
- {'n', 0, "no-php-ini"},
- {'q', 0, "no-header"},
- {'s', 0, "syntax-highlight"},
- {'s', 0, "syntax-highlighting"},
- {'w', 0, "strip"},
- {'?', 0, "usage"},/* help alias (both '?' and 'usage') */
- {'v', 0, "version"},
- {'z', 1, "zend-extension"},
- {'-', 0, NULL} /* end of args */
-};
+extern char *ap_php_optarg;
+extern int ap_php_optind;
#if ENABLE_PATHINFO_CHECK
/* true global. this is retreived once only, even for fastcgi */
@@ -161,6 +138,8 @@
#define TRANSLATE_SLASHES(path)
#endif
+#define OPTSTRING "ab:Cc:d:ef:g:hilmnqsw?vz:"
+
static int print_module_info(zend_module_entry *module, void *arg TSRMLS_DC)
{
php_printf("%s\n", module->name);
@@ -912,14 +891,14 @@
{
int exit_status = SUCCESS;
int cgi = 0, c, i, len;
- zend_file_handle file_handle;
+ zend_file_handle file_handle = {0};
int retval = FAILURE;
char *s;
/* temporary locals */
int behavior=PHP_MODE_STANDARD;
int no_headers=0;
- int orig_optind=optind;
- char *orig_optarg=optarg;
+ int orig_optind=ap_php_optind;
+ char *orig_optarg=ap_php_optarg;
char *script_file=NULL;
zend_llist global_vars;
int interactive=0;
@@ -995,10 +974,10 @@
/* allow ini override for fastcgi */
#endif
) {
- while ((c=php_getopt(argc, argv, OPTIONS, &optarg, &optind, 0))!=-1) {
+ while ((c=ap_php_getopt(argc, argv, OPTSTRING))!=-1) {
switch (c) {
case 'c':
- cgi_sapi_module.php_ini_path_override =
strdup(optarg);
+ cgi_sapi_module.php_ini_path_override =
strdup(ap_php_optarg);
break;
case 'n':
cgi_sapi_module.php_ini_ignore = 1;
@@ -1009,15 +988,15 @@
server by accepting a bindpath parameter. */
case 'b':
if (!fastcgi) {
- bindpath = strdup(optarg);
+ bindpath = strdup(ap_php_optarg);
}
break;
#endif
}
}
- optind = orig_optind;
- optarg = orig_optarg;
+ ap_php_optind = orig_optind;
+ ap_php_optarg = orig_optarg;
}
#ifdef ZTS
@@ -1211,9 +1190,8 @@
&& !fastcgi
#endif
) {
- while ((c=php_getopt(argc, argv, OPTIONS, &optarg, &optind,
1))!=-1) {
+ while ((c=ap_php_getopt(argc, argv, OPTSTRING))!=-1) {
switch (c) {
- case 'h':
case '?':
no_headers = 1;
php_output_startup();
@@ -1225,8 +1203,8 @@
break;
}
}
- optind = orig_optind;
- optarg = orig_optarg;
+ ap_php_optind = orig_optind;
+ ap_php_optarg = orig_optarg;
}
#if PHP_FASTCGI
@@ -1276,7 +1254,7 @@
exit(1);
}
- while ((c = php_getopt(argc, argv, OPTIONS, &optarg, &optind,
0)) != -1) {
+ while ((c = ap_php_getopt(argc, argv, OPTSTRING)) != -1) {
switch (c) {
case 'a': /* interactive mode */
@@ -1288,7 +1266,7 @@
SG(options) |= SAPI_OPTION_NO_CHDIR;
break;
case 'd': /* define ini entries on command line */
- define_command_line_ini_entry(optarg);
+
define_command_line_ini_entry(ap_php_optarg);
break;
case 'e': /* enable extended info output */
@@ -1296,21 +1274,32 @@
break;
case 'f': /* parse file */
- script_file = estrdup(optarg);
+ script_file = estrdup(ap_php_optarg);
no_headers = 1;
/* arguments after the file are
considered script args */
- SG(request_info).argc = argc -
(optind-1);
- SG(request_info).argv =
&argv[optind-1];
+ SG(request_info).argc = argc -
(ap_php_optind-1);
+ SG(request_info).argv =
&argv[ap_php_optind-1];
break;
case 'g': /* define global variables on command line */
{
- char *arg = estrdup(optarg);
+ char *arg =
estrdup(ap_php_optarg);
zend_llist_add_element(&global_vars, &arg);
}
break;
+ case 'h': /* help & quit */
+ case '?':
+ no_headers = 1;
+ php_output_startup();
+ php_output_activate(TSRMLS_C);
+ SG(headers_sent) = 1;
+ php_cgi_usage(argv[0]);
+ php_end_ob_buffers(1 TSRMLS_CC);
+ exit(1);
+ break;
+
case 'i': /* php info & quit */
if (php_request_startup(TSRMLS_C) ==
FAILURE) {
php_module_shutdown(TSRMLS_C);
@@ -1381,7 +1370,7 @@
break;
case 'z': /* load extension file */
- zend_load_extension(optarg);
+ zend_load_extension(ap_php_optarg);
break;
default:
@@ -1399,12 +1388,12 @@
SG(request_info).no_headers = 1;
}
- if (!SG(request_info).path_translated && argc > optind) {
+ if (!SG(request_info).path_translated && argc > ap_php_optind)
{
/* arguments after the file are considered script args
*/
- SG(request_info).argc = argc - optind;
- SG(request_info).argv = &argv[optind];
+ SG(request_info).argc = argc - ap_php_optind;
+ SG(request_info).argv = &argv[ap_php_optind];
/* file is on command line, but not in -f opt */
- SG(request_info).path_translated =
estrdup(argv[optind++]);
+ SG(request_info).path_translated =
estrdup(argv[ap_php_optind++]);
}
/* all remaining arguments are part of the query string
@@ -1416,15 +1405,15 @@
test.php "v1=test&v2=hello world!"
test.php v1=test "v2=hello world!"
*/
- if (!SG(request_info).query_string && argc > optind) {
+ if (!SG(request_info).query_string && argc > ap_php_optind) {
len = 0;
- for (i = optind; i < argc; i++) {
+ for (i = ap_php_optind; i < argc; i++) {
len += strlen(argv[i]) + 1;
}
s = malloc(len + 1); /* leak - but only for command
line version, so ok */
*s = '\0'; /* we are pretending
it came from the environment */
- for (i = optind, len = 0; i < argc; i++) {
+ for (i = ap_php_optind, len = 0; i < argc; i++) {
strcat(s, argv[i]);
if (i < (argc - 1)) {
strcat(s, "&");
Index: php4/sapi/cgi/config9.m4
diff -u php4/sapi/cgi/config9.m4:1.1.2.5 php4/sapi/cgi/config9.m4:1.1.2.6
--- php4/sapi/cgi/config9.m4:1.1.2.5 Thu May 29 10:55:07 2003
+++ php4/sapi/cgi/config9.m4 Fri May 30 21:37:44 2003
@@ -1,5 +1,5 @@
dnl
-dnl $Id: config9.m4,v 1.1.2.5 2003/05/29 14:55:07 sas Exp $
+dnl $Id: config9.m4,v 1.1.2.6 2003/05/31 01:37:44 sniper Exp $
dnl
AC_ARG_ENABLE(cgi,
Index: php4/sapi/cgi/getopt.c
diff -u php4/sapi/cgi/getopt.c:1.5.8.1 php4/sapi/cgi/getopt.c:1.5.8.2
--- php4/sapi/cgi/getopt.c:1.5.8.1 Thu May 29 11:41:52 2003
+++ php4/sapi/cgi/getopt.c Fri May 30 21:37:44 2003
@@ -1,20 +1,4 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2003 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.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]> |
- +----------------------------------------------------------------------+
-*/
+/* Borrowed from Apache NT Port */
#include <stdio.h>
#include <string.h>
@@ -26,129 +10,166 @@
#define OPTERRARG (3)
-static int php_opt_error(int argc, char * const *argv, int oint, int optchr, int err,
int show_err)
+char *ap_php_optarg;
+int ap_php_optind = 1;
+static int ap_php_opterr = 1;
+static int ap_php_optopt;
+
+static int
+ap_php_optiserr(int argc, char * const *argv, int oint, const char *optstr,
+ int optchr, int err)
{
- if (show_err)
- {
- fprintf(stderr, "Error in argument %d, char %d: ", oint, optchr+1);
- switch(err)
- {
- case OPTERRCOLON:
- fprintf(stderr, ": in flags\n");
- break;
- case OPTERRNF:
- fprintf(stderr, "option not found %c\n", argv[oint][optchr]);
- break;
- case OPTERRARG:
- fprintf(stderr, "no argument for option %c\n",
argv[oint][optchr]);
- break;
- default:
- fprintf(stderr, "unknown\n");
- break;
- }
- }
- return('?');
+ if (ap_php_opterr)
+ {
+ fprintf(stderr, "Error in argument %d, char %d: ", oint, optchr+1);
+ switch(err)
+ {
+ case OPTERRCOLON:
+ fprintf(stderr, ": in flags\n");
+ break;
+ case OPTERRNF:
+ fprintf(stderr, "option not found %c\n", argv[oint][optchr]);
+ break;
+ case OPTERRARG:
+ fprintf(stderr, "no argument for option %c\n", argv[oint][optchr]);
+ break;
+ default:
+ fprintf(stderr, "unknown\n");
+ break;
+ }
+ }
+ ap_php_optopt = argv[oint][optchr];
+ return('?');
}
-
-int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **optarg,
int *optind, int show_err)
+
+int ap_php_getopt(int argc, char* const *argv, const char *optstr)
{
- static int optchr = 0;
- static int dash = 0; /* have already seen the - */
- int arg_start = 2;
-
- int opts_idx = -1;
-
- if (*optind >= argc) {
- return(EOF);
- }
- if (!dash) {
- if ((argv[*optind][0] != '-')) {
- return(EOF);
- } else {
- if (!argv[*optind][1])
- {
- /*
- * use to specify stdin. Need to let pgm process this
and
- * the following args
- */
- return(EOF);
- }
- }
- }
- if ((argv[*optind][0] == '-') && (argv[*optind][1] == '-')) {
- /* '--' indicates end of args if not followed by a known long option
name */
- while (1) {
- opts_idx++;
- if (opts[opts_idx].opt_char == '-') {
- (*optind)++;
- return(EOF);
- } else if (opts[opts_idx].opt_name &&
!strcmp(&argv[*optind][2], opts[opts_idx].opt_name)) {
- break;
- }
- }
- optchr = 0;
- dash = 1;
- arg_start = 2 + strlen(opts[opts_idx].opt_name);
- }
- if (!dash) {
- dash = 1;
- optchr = 1;
- }
-
- /* Check if the guy tries to do a -: kind of flag */
- if (argv[*optind][optchr] == ':') {
- dash = 0;
- (*optind)++;
- return (php_opt_error(argc, argv, *optind-1, optchr, OPTERRCOLON,
show_err));
- }
- if (opts_idx < 0) {
- while (1) {
- opts_idx++;
- if (opts[opts_idx].opt_char == '-') {
- int errind = *optind;
- int errchr = optchr;
-
- if (!argv[*optind][optchr+1]) {
- dash = 0;
- (*optind)++;
- } else {
- optchr++;
- }
- return(php_opt_error(argc, argv, errind, errchr,
OPTERRNF, show_err));
- } else if (argv[*optind][optchr] == opts[opts_idx].opt_char) {
- break;
- }
- }
- }
- if (opts[opts_idx].need_param) {
- /* Check for cases where the value of the argument
- is in the form -<arg> <val> or in the form -<arg><val> */
- dash = 0;
- if(!argv[*optind][arg_start]) {
- (*optind)++;
- if (*optind == argc) {
- return(php_opt_error(argc, argv, *optind-1, optchr,
OPTERRARG, show_err));
- }
- *optarg = argv[(*optind)++];
- } else {
- *optarg = &argv[*optind][arg_start];
- (*optind)++;
- }
- return opts[opts_idx].opt_char;
- } else {
- if (arg_start == 2) {
- if (!argv[*optind][optchr+1])
- {
- dash = 0;
- (*optind)++;
- } else {
- optchr++;
- }
- } else {
- (*optind)++;
- }
- return opts[opts_idx].opt_char;
- }
- assert(0);
- return(0); /* never reached */
+ static int optchr = 0;
+ static int dash = 0; /* have already seen the - */
+
+ char *cp;
+
+ if (ap_php_optind >= argc)
+ return(EOF);
+ if (!dash && (argv[ap_php_optind][0] != '-'))
+ return(EOF);
+ if (!dash && (argv[ap_php_optind][0] == '-') && !argv[ap_php_optind][1])
+ {
+ /*
+ * use to specify stdin. Need to let pgm process this and
+ * the following args
+ */
+ return(EOF);
+ }
+ if ((argv[ap_php_optind][0] == '-') && (argv[ap_php_optind][1] == '-'))
+ {
+ /* -- indicates end of args */
+ ap_php_optind++;
+ return(EOF);
+ }
+ if (!dash)
+ {
+ assert((argv[ap_php_optind][0] == '-') && argv[ap_php_optind][1]);
+ dash = 1;
+ optchr = 1;
+ }
+
+ /* Check if the guy tries to do a -: kind of flag */
+ assert(dash);
+ if (argv[ap_php_optind][optchr] == ':')
+ {
+ dash = 0;
+ ap_php_optind++;
+ return(ap_php_optiserr(argc, argv, ap_php_optind-1, optstr, optchr,
OPTERRCOLON));
+ }
+ if (!(cp = strchr(optstr, argv[ap_php_optind][optchr])))
+ {
+ int errind = ap_php_optind;
+ int errchr = optchr;
+
+ if (!argv[ap_php_optind][optchr+1])
+ {
+ dash = 0;
+ ap_php_optind++;
+ }
+ else
+ optchr++;
+ return(ap_php_optiserr(argc, argv, errind, optstr, errchr, OPTERRNF));
+ }
+ if (cp[1] == ':')
+ {
+ /* Check for cases where the value of the argument
+ is in the form -<arg> <val> or in the form -<arg><val> */
+ dash = 0;
+ if(!argv[ap_php_optind][2]) {
+ ap_php_optind++;
+ if (ap_php_optind == argc)
+ return(ap_php_optiserr(argc, argv, ap_php_optind-1, optstr, optchr,
OPTERRARG));
+ ap_php_optarg = argv[ap_php_optind++];
+ }
+ else
+ {
+ ap_php_optarg = &argv[ap_php_optind][2];
+ ap_php_optind++;
+ }
+ return(*cp);
+ }
+ else
+ {
+ if (!argv[ap_php_optind][optchr+1])
+ {
+ dash = 0;
+ ap_php_optind++;
+ }
+ else
+ optchr++;
+ return(*cp);
+ }
+ assert(0);
+ return(0); /* never reached */
}
+
+#ifdef TESTGETOPT
+int
+ main (int argc, char **argv)
+ {
+ int c;
+ extern char *ap_php_optarg;
+ extern int ap_php_optind;
+ int aflg = 0;
+ int bflg = 0;
+ int errflg = 0;
+ char *ofile = NULL;
+
+ while ((c = ap_php_getopt(argc, argv, "abo:")) != EOF)
+ switch (c) {
+ case 'a':
+ if (bflg)
+ errflg++;
+ else
+ aflg++;
+ break;
+ case 'b':
+ if (aflg)
+ errflg++;
+ else
+ bflg++;
+ break;
+ case 'o':
+ ofile = ap_php_optarg;
+ (void)printf("ofile = %s\n", ofile);
+ break;
+ case '?':
+ errflg++;
+ }
+ if (errflg) {
+ (void)fprintf(stderr,
+ "usage: cmd [-a|-b] [-o <filename>] files...\n");
+ exit (2);
+ }
+ for ( ; ap_php_optind < argc; ap_php_optind++)
+ (void)printf("%s\n", argv[ap_php_optind]);
+ return 0;
+ }
+
+#endif /* TESTGETOPT */
Index: php4/sapi/cgi/php_getopt.h
diff -u php4/sapi/cgi/php_getopt.h:1.3.14.1 php4/sapi/cgi/php_getopt.h:1.3.14.2
--- php4/sapi/cgi/php_getopt.h:1.3.14.1 Thu May 29 11:41:52 2003
+++ php4/sapi/cgi/php_getopt.h Fri May 30 21:37:44 2003
@@ -1,30 +1,7 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2003 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.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]> |
- +----------------------------------------------------------------------+
-*/
-
+/* Borrowed from Apache NT Port */
#include "php.h"
-/* Define structure for one recognized option (both single char and long name).
- * If short_open is '-' this is the last option.
- */
-typedef struct _opt_struct {
- const char opt_char;
- const int need_param;
- const char * opt_name;
-} opt_struct;
+extern char *ap_php_optarg;
+extern int ap_php_optind;
-int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **optarg,
int *optind, int show_err);
+int ap_php_getopt(int argc, char* const *argv, const char *optstr);
Index: php4/sapi/cli/README
diff -u php4/sapi/cli/README:1.4.4.1 php4/sapi/cli/README:1.4.4.2
--- php4/sapi/cli/README:1.4.4.1 Thu May 29 11:28:01 2003
+++ php4/sapi/cli/README Fri May 30 21:37:45 2003
@@ -16,5 +16,4 @@
* implicit_flush always on
* -r option which allows execution of PHP code directly from
the command line (e.g. php -r 'echo md5("test");' )
-* Other more sophisticated command line switches (see: man php)
* max_execution_time is set to unlimited, overriding php.ini setting.
Index: php4/sapi/cli/getopt.c
diff -u php4/sapi/cli/getopt.c:1.3.4.1 php4/sapi/cli/getopt.c:1.3.4.2
--- php4/sapi/cli/getopt.c:1.3.4.1 Thu May 29 11:28:01 2003
+++ php4/sapi/cli/getopt.c Fri May 30 21:37:45 2003
@@ -1,22 +1,4 @@
-/*
- +----------------------------------------------------------------------+
- | PHP Version 4 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997-2003 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.02 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_02.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: getopt.c,v 1.3.4.1 2003/05/29 15:28:01 helly Exp $ */
+/* Borrowed from Apache NT Port */
#include <stdio.h>
#include <string.h>
@@ -28,129 +10,164 @@
#define OPTERRARG (3)
-static int php_opt_error(int argc, char * const *argv, int oint, int optchr, int err,
int show_err)
+char *ap_php_optarg;
+int ap_php_optind = 1;
+static int ap_php_opterr = 1;
+
+static int
+ap_php_optiserr(int argc, char * const *argv, int oint, const char *optstr,
+ int optchr, int err)
{
- if (show_err)
- {
- fprintf(stderr, "Error in argument %d, char %d: ", oint, optchr+1);
- switch(err)
- {
- case OPTERRCOLON:
- fprintf(stderr, ": in flags\n");
- break;
- case OPTERRNF:
- fprintf(stderr, "option not found %c\n", argv[oint][optchr]);
- break;
- case OPTERRARG:
- fprintf(stderr, "no argument for option %c\n",
argv[oint][optchr]);
- break;
- default:
- fprintf(stderr, "unknown\n");
- break;
- }
- }
- return('?');
+ if (ap_php_opterr)
+ {
+ fprintf(stderr, "Error in argument %d, char %d: ", oint, optchr+1);
+ switch(err)
+ {
+ case OPTERRCOLON:
+ fprintf(stderr, ": in flags\n");
+ break;
+ case OPTERRNF:
+ fprintf(stderr, "option not found %c\n", argv[oint][optchr]);
+ break;
+ case OPTERRARG:
+ fprintf(stderr, "no argument for option %c\n", argv[oint][optchr]);
+ break;
+ default:
+ fprintf(stderr, "unknown\n");
+ break;
+ }
+ }
+ return('?');
}
-
-int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **optarg,
int *optind, int show_err)
+
+int ap_php_getopt(int argc, char* const *argv, const char *optstr)
{
- static int optchr = 0;
- static int dash = 0; /* have already seen the - */
- int arg_start = 2;
-
- int opts_idx = -1;
-
- if (*optind >= argc) {
- return(EOF);
- }
- if (!dash) {
- if ((argv[*optind][0] != '-')) {
- return(EOF);
- } else {
- if (!argv[*optind][1])
- {
- /*
- * use to specify stdin. Need to let pgm process this
and
- * the following args
- */
- return(EOF);
- }
- }
- }
- if ((argv[*optind][0] == '-') && (argv[*optind][1] == '-')) {
- /* '--' indicates end of args if not followed by a known long option
name */
- while (1) {
- opts_idx++;
- if (opts[opts_idx].opt_char == '-') {
- (*optind)++;
- return(EOF);
- } else if (opts[opts_idx].opt_name &&
!strcmp(&argv[*optind][2], opts[opts_idx].opt_name)) {
- break;
- }
- }
- optchr = 0;
- dash = 1;
- arg_start = 2 + strlen(opts[opts_idx].opt_name);
- }
- if (!dash) {
- dash = 1;
- optchr = 1;
- }
-
- /* Check if the guy tries to do a -: kind of flag */
- if (argv[*optind][optchr] == ':') {
- dash = 0;
- (*optind)++;
- return (php_opt_error(argc, argv, *optind-1, optchr, OPTERRCOLON,
show_err));
- }
- if (opts_idx < 0) {
- while (1) {
- opts_idx++;
- if (opts[opts_idx].opt_char == '-') {
- int errind = *optind;
- int errchr = optchr;
-
- if (!argv[*optind][optchr+1]) {
- dash = 0;
- (*optind)++;
- } else {
- optchr++;
- }
- return(php_opt_error(argc, argv, errind, errchr,
OPTERRNF, show_err));
- } else if (argv[*optind][optchr] == opts[opts_idx].opt_char) {
- break;
- }
- }
- }
- if (opts[opts_idx].need_param) {
- /* Check for cases where the value of the argument
- is in the form -<arg> <val> or in the form -<arg><val> */
- dash = 0;
- if(!argv[*optind][arg_start]) {
- (*optind)++;
- if (*optind == argc) {
- return(php_opt_error(argc, argv, *optind-1, optchr,
OPTERRARG, show_err));
- }
- *optarg = argv[(*optind)++];
- } else {
- *optarg = &argv[*optind][arg_start];
- (*optind)++;
- }
- return opts[opts_idx].opt_char;
- } else {
- if (arg_start == 2) {
- if (!argv[*optind][optchr+1])
- {
- dash = 0;
- (*optind)++;
- } else {
- optchr++;
- }
- } else {
- (*optind)++;
- }
- return opts[opts_idx].opt_char;
- }
- assert(0);
- return(0); /* never reached */
+ static int optchr = 0;
+ static int dash = 0; /* have already seen the - */
+
+ char *cp;
+
+ if (ap_php_optind >= argc)
+ return(EOF);
+ if (!dash && (argv[ap_php_optind][0] != '-'))
+ return(EOF);
+ if (!dash && (argv[ap_php_optind][0] == '-') && !argv[ap_php_optind][1])
+ {
+ /*
+ * use to specify stdin. Need to let pgm process this and
+ * the following args
+ */
+ return(EOF);
+ }
+ if ((argv[ap_php_optind][0] == '-') && (argv[ap_php_optind][1] == '-'))
+ {
+ /* -- indicates end of args */
+ ap_php_optind++;
+ return(EOF);
+ }
+ if (!dash)
+ {
+ assert((argv[ap_php_optind][0] == '-') && argv[ap_php_optind][1]);
+ dash = 1;
+ optchr = 1;
+ }
+
+ /* Check if the guy tries to do a -: kind of flag */
+ assert(dash);
+ if (argv[ap_php_optind][optchr] == ':')
+ {
+ dash = 0;
+ ap_php_optind++;
+ return(ap_php_optiserr(argc, argv, ap_php_optind-1, optstr, optchr,
OPTERRCOLON));
+ }
+ if (!(cp = strchr(optstr, argv[ap_php_optind][optchr])))
+ {
+ int errind = ap_php_optind;
+ int errchr = optchr;
+
+ if (!argv[ap_php_optind][optchr+1])
+ {
+ dash = 0;
+ ap_php_optind++;
+ }
+ else
+ optchr++;
+ return(ap_php_optiserr(argc, argv, errind, optstr, errchr, OPTERRNF));
+ }
+ if (cp[1] == ':')
+ {
+ /* Check for cases where the value of the argument
+ is in the form -<arg> <val> or in the form -<arg><val> */
+ dash = 0;
+ if(!argv[ap_php_optind][2]) {
+ ap_php_optind++;
+ if (ap_php_optind == argc)
+ return(ap_php_optiserr(argc, argv, ap_php_optind-1, optstr, optchr,
OPTERRARG));
+ ap_php_optarg = argv[ap_php_optind++];
+ }
+ else
+ {
+ ap_php_optarg = &argv[ap_php_optind][2];
+ ap_php_optind++;
+ }
+ return(*cp);
+ }
+ else
+ {
+ if (!argv[ap_php_optind][optchr+1])
+ {
+ dash = 0;
+ ap_php_optind++;
+ }
+ else
+ optchr++;
+ return(*cp);
+ }
+ assert(0);
+ return(0); /* never reached */
}
+
+#ifdef TESTGETOPT
+int
+ main (int argc, char **argv)
+ {
+ int c;
+ extern char *ap_php_optarg;
+ extern int ap_php_optind;
+ int aflg = 0;
+ int bflg = 0;
+ int errflg = 0;
+ char *ofile = NULL;
+
+ while ((c = ap_php_getopt(argc, argv, "abo:")) != EOF)
+ switch (c) {
+ case 'a':
+ if (bflg)
+ errflg++;
+ else
+ aflg++;
+ break;
+ case 'b':
+ if (aflg)
+ errflg++;
+ else
+ bflg++;
+ break;
+ case 'o':
+ ofile = ap_php_optarg;
+ (void)printf("ofile = %s\n", ofile);
+ break;
+ case '?':
+ errflg++;
+ }
+ if (errflg) {
+ (void)fprintf(stderr,
+ "usage: cmd [-a|-b] [-o <filename>] files...\n");
+ exit (2);
+ }
+ for ( ; ap_php_optind < argc; ap_php_optind++)
+ (void)printf("%s\n", argv[ap_php_optind]);
+ return 0;
+ }
+
+#endif /* TESTGETOPT */
Index: php4/sapi/cli/php_cli.c
diff -u php4/sapi/cli/php_cli.c:1.51.2.22 php4/sapi/cli/php_cli.c:1.51.2.23
--- php4/sapi/cli/php_cli.c:1.51.2.22 Fri May 30 13:03:10 2003
+++ php4/sapi/cli/php_cli.c Fri May 30 21:37:45 2003
@@ -89,39 +89,11 @@
#define PHP_MODE_LINT 4
#define PHP_MODE_STRIP 5
#define PHP_MODE_CLI_DIRECT 6
-#define PHP_MODE_PROCESS_STDIN 7
-static char *optarg = NULL;
-static int optind = 1;
+extern char *ap_php_optarg;
+extern int ap_php_optind;
-static const opt_struct OPTIONS[] = {
- {'a', 0, "interactive"},
- {'B', 1, "process-begin"},
- {'C', 0, "no-chdir"}, /* for compatibility with CGI (do not chdir to script
directory) */
- {'c', 1, "php-ini"},
- {'d', 1, "define"},
- {'E', 1, "process-end"},
- {'e', 0, "profile-info"},
- {'F', 1, "process-file"},
- {'f', 1, "file"},
- {'g', 1, "global"},
- {'h', 0, "help"},
- {'i', 0, "info"},
- {'l', 0, "syntax-check"},
- {'m', 0, "modules"},
- {'n', 0, "no-php-ini"},
- {'q', 0, "no-header"}, /* for compatibility with CGI (do not generate HTTP
headers) */
- {'R', 1, "process-code"},
- {'H', 0, "hide-args"},
- {'r', 1, "run"},
- {'s', 0, "syntax-highlight"},
- {'s', 0, "syntax-highlighting"},
- {'w', 0, "strip"},
- {'?', 0, "usage"},/* help alias (both '?' and 'usage') */
- {'v', 0, "version"},
- {'z', 1, "zend-extension"},
- {'-', 0, NULL} /* end of args */
-};
+#define OPTSTRING "aCc:d:ef:g:hilmnqr:sw?vz:"
static int print_module_info(zend_module_entry *module, void *arg TSRMLS_DC)
{
@@ -358,12 +330,9 @@
prog = "php";
}
- php_printf( "Usage: %s [options] [-f] <file> [--] [args...]\n"
- " %s [options] -r <code> [--] [args...]\n"
- " %s [options] [-B <begin_code>] -R <code> [-E <end_code>]
[--] [args...]\n"
- " %s [options] [-B <begin_code>] -F <file> [-E <end_code>]
[--] [args...]\n"
- " %s [options] -- [args...]\n"
- "\n"
+ php_printf( "Usage: %s [options] [-f] <file> [args...]\n"
+ " %s [options] -r <code> [args...]\n"
+ " %s [options] [-- args...]\n"
" -a Run interactively\n"
" -c <path>|<file> Look for php.ini file in this
directory\n"
" -n No php.ini file will be used\n"
@@ -375,11 +344,6 @@
" -l Syntax check only (lint)\n"
" -m Show compiled in modules\n"
" -r <code> Run PHP <code> without using
script tags <?..?>\n"
- " -B <begin_code> Run PHP <begin_code> before
processing input lines\n"
- " -R <code> Run PHP <code> for every input
line\n"
- " -F <file> Parse and execute <file> for every
input line\n"
- " -E <end_code> Run PHP <end_code> after
processing all input lines\n"
- " -H Hide any passed arguments from
external tools.\n"
" -s Display colour syntax highlighted
source.\n"
" -v Version number\n"
" -w Display source with stripped
comments and whitespace.\n"
@@ -387,8 +351,7 @@
"\n"
" args... Arguments passed to script. Use --
args when first argument \n"
" starts with - or script is read
from stdin\n"
- "\n"
- , prog, prog, prog, prog, prog);
+ , prog, prog, prog);
}
/* }}} */
@@ -423,9 +386,6 @@
efree(*arg);
}
-static php_stream_context *sc_in_process = NULL;
-static php_stream *s_in_process = NULL;
-
static void cli_register_file_handles(TSRMLS_D)
{
zval *zin, *zout, *zerr;
@@ -445,9 +405,6 @@
return;
}
- sc_in_process = sc_in;
- s_in_process = s_in;
-
php_stream_to_zval(s_in, zin);
php_stream_to_zval(s_out, zout);
php_stream_to_zval(s_err, zerr);
@@ -475,42 +432,6 @@
FREE_ZVAL(zerr);
}
-static const char *param_mode_conflict = "Either execute direct code, process stdin
or use a file.\n";
-
-/* {{{ cli_seek_file_begin
- */
-static int cli_seek_file_begin(zend_file_handle *file_handle, char *script_file, int
*lineno TSRMLS_DC)
-{
- int c;
-
- *lineno = 1;
-
- if (!(file_handle->handle.fp = VCWD_FOPEN(script_file, "rb"))) {
- php_printf("Could not open input file: %s.\n", script_file);
- return FAILURE;
- }
- file_handle->filename = script_file;
- /* #!php support */
- c = fgetc(file_handle->handle.fp);
- if (c == '#') {
- while (c != 10 && c != 13) {
- c = fgetc(file_handle->handle.fp); /* skip to end of line
*/
- }
- /* handle situations where line is terminated by \r\n */
- if (c == 13) {
- if (fgetc(file_handle->handle.fp) != 10) {
- long pos = ftell(file_handle->handle.fp);
- fseek(file_handle->handle.fp, pos - 1, SEEK_SET);
- }
- }
- *lineno = -2;
- } else {
- rewind(file_handle->handle.fp);
- }
- return SUCCESS;
-}
-/* }}} */
-
/* {{{ main
*/
int main(int argc, char *argv[])
@@ -520,18 +441,15 @@
zend_file_handle file_handle;
/* temporary locals */
int behavior=PHP_MODE_STANDARD;
- int orig_optind=optind;
- char *orig_optarg=optarg;
+ int orig_optind=ap_php_optind;
+ char *orig_optarg=ap_php_optarg;
char *arg_free=NULL, **arg_excp=&arg_free;
char *script_file=NULL;
zend_llist global_vars;
- int interactive=0;
+ int interactive=0, is_hashbang=0;
int module_started = 0;
- int lineno = 0;
- char *exec_direct=NULL, *exec_run=NULL, *exec_begin=NULL, *exec_end=NULL;
- const char *param_error=NULL;
- int scan_input = 0;
- int hide_argv = 0;
+ char *exec_direct=NULL;
+ char *param_error=NULL;
/* end of temporary locals */
#ifdef ZTS
zend_compiler_globals *compiler_globals;
@@ -570,18 +488,18 @@
#endif
- while ((c = php_getopt(argc, argv, OPTIONS, &optarg, &optind, 0))!=-1) {
+ while ((c=ap_php_getopt(argc, argv, OPTSTRING))!=-1) {
switch (c) {
case 'c':
- cli_sapi_module.php_ini_path_override = strdup(optarg);
+ cli_sapi_module.php_ini_path_override = strdup(ap_php_optarg);
break;
case 'n':
cli_sapi_module.php_ini_ignore = 1;
break;
}
}
- optind = orig_optind;
- optarg = orig_optarg;
+ ap_php_optind = orig_optind;
+ ap_php_optarg = orig_optarg;
cli_sapi_module.executable_location = argv[0];
@@ -606,69 +524,21 @@
module_started = 1;
zend_first_try {
- zend_llist_init(&global_vars, sizeof(char *), NULL, 0);
-
- zend_uv.html_errors = 0; /* tell the engine we're in non-html mode */
- CG(in_compilation) = 0; /* not initialized but needed for several
options */
- EG(uninitialized_zval_ptr) = NULL;
-
- if (cli_sapi_module.php_ini_path_override &&
cli_sapi_module.php_ini_ignore) {
- PUTS("You cannot use both -n and -c switch. Use -h for
help.\n");
- exit_status=1;
- goto out_err;
- }
-
- while ((c = php_getopt(argc, argv, OPTIONS, &optarg, &optind, 0)) !=
-1) {
+ while ((c=ap_php_getopt(argc, argv, OPTSTRING))!=-1) {
switch (c) {
-
- case 'h': /* help & quit */
case '?':
php_output_startup();
php_output_activate(TSRMLS_C);
php_cli_usage(argv[0]);
php_end_ob_buffers(1 TSRMLS_CC);
- exit_status=1;
- goto out_err;
-
-
- case 'i': /* php info & quit */
- if (php_request_startup(TSRMLS_C)==FAILURE) {
- goto err;
- }
- php_print_info(0xFFFFFFFF TSRMLS_CC);
- php_end_ob_buffers(1 TSRMLS_CC);
- exit_status=1;
- goto out;
-
- case 'm': /* list compiled in modules */
- php_output_startup();
- php_output_activate(TSRMLS_C);
- php_printf("[PHP Modules]\n");
- print_modules(TSRMLS_C);
- php_printf("\n[Zend Modules]\n");
- print_extensions(TSRMLS_C);
- php_printf("\n");
- php_end_ob_buffers(1 TSRMLS_CC);
- exit_status=1;
- goto out_err;
-
- case 'v': /* show php version & quit */
- if (php_request_startup(TSRMLS_C)==FAILURE) {
- goto err;
- }
-#if ZEND_DEBUG
- php_printf("PHP %s (%s) (built: %s %s)
(DEBUG)\nCopyright (c) 1997-2003 The PHP Group\n%s", PHP_VERSION, sapi_module.name,
__DATE__, __TIME__, get_zend_version());
-#else
- php_printf("PHP %s (%s) (built: %s %s)\nCopyright (c)
1997-2003 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__,
get_zend_version());
-#endif
- php_end_ob_buffers(1 TSRMLS_CC);
- exit_status=1;
- goto out;
-
- default:
+ exit(1);
break;
}
}
+ ap_php_optind = orig_optind;
+ ap_php_optarg = orig_optarg;
+
+ zend_llist_init(&global_vars, sizeof(char *), NULL, 0);
/* Set some CLI defaults */
SG(options) |= SAPI_OPTION_NO_CHDIR;
@@ -678,9 +548,17 @@
INI_HARDCODED("implicit_flush", "1");
INI_HARDCODED("max_execution_time", "0");
- optind = orig_optind;
- optarg = orig_optarg;
- while ((c = php_getopt(argc, argv, OPTIONS, &optarg, &optind, 0)) !=
-1) {
+ zend_uv.html_errors = 0; /* tell the engine we're in non-html mode */
+ CG(in_compilation) = 0; /* not initialized but needed for several
options */
+ EG(uninitialized_zval_ptr) = NULL;
+
+ if (cli_sapi_module.php_ini_path_override &&
cli_sapi_module.php_ini_ignore) {
+ PUTS("You cannot use both -n and -c switch. Use -h for
help.\n");
+ exit_status=1;
+ goto out_err;
+ }
+
+ while ((c = ap_php_getopt(argc, argv, OPTSTRING)) != -1) {
switch (c) {
case 'a': /* interactive mode */
@@ -692,46 +570,48 @@
/* This is default so NOP */
break;
case 'd': /* define ini entries on command line */
- define_command_line_ini_entry(optarg);
+ define_command_line_ini_entry(ap_php_optarg);
break;
case 'e': /* enable extended info output */
CG(extended_info) = 1;
break;
- case 'F':
- if (behavior == PHP_MODE_PROCESS_STDIN) {
- if (exec_run || script_file) {
- param_error = "You can use -R or -F
only once.\n";
- break;
- }
- } else if (behavior != PHP_MODE_STANDARD) {
- param_error = param_mode_conflict;
- break;
- }
- behavior=PHP_MODE_PROCESS_STDIN;
- script_file = optarg;
- break;
-
case 'f': /* parse file */
- if (behavior == PHP_MODE_CLI_DIRECT || behavior ==
PHP_MODE_PROCESS_STDIN) {
- param_error = param_mode_conflict;
- break;
- } else if (script_file) {
- param_error = "You can use -f only once.\n";
+ if (behavior == PHP_MODE_CLI_DIRECT) {
+ param_error = "Either execute direct code or
use a file.\n";
break;
}
- script_file = optarg;
+ script_file = ap_php_optarg;
break;
case 'g': /* define global variables on command line */
{
- char *arg = estrdup(optarg);
+ char *arg = estrdup(ap_php_optarg);
zend_llist_add_element(&global_vars, &arg);
}
break;
+ case 'h': /* help & quit */
+ case '?':
+ php_output_startup();
+ php_output_activate(TSRMLS_C);
+ php_cli_usage(argv[0]);
+ php_end_ob_buffers(1 TSRMLS_CC);
+ exit_status=1;
+ zend_ini_deactivate(TSRMLS_C);
+ goto out_err;
+
+ case 'i': /* php info & quit */
+ if (php_request_startup(TSRMLS_C)==FAILURE) {
+ goto err;
+ }
+ php_print_info(0xFFFFFFFF TSRMLS_CC);
+ php_end_ob_buffers(1 TSRMLS_CC);
+ exit_status=1;
+ goto out;
+
case 'l': /* syntax check mode */
if (behavior != PHP_MODE_STANDARD) {
break;
@@ -739,9 +619,22 @@
behavior=PHP_MODE_LINT;
break;
+ case 'm': /* list compiled in modules */
+ php_output_startup();
+ php_output_activate(TSRMLS_C);
+ php_printf("[PHP Modules]\n");
+ print_modules(TSRMLS_C);
+ php_printf("\n[Zend Modules]\n");
+ print_extensions(TSRMLS_C);
+ php_printf("\n");
+ php_end_ob_buffers(1 TSRMLS_CC);
+ exit_status=1;
+ zend_ini_deactivate(TSRMLS_C);
+ goto out_err;
+
#if 0 /* not yet operational, see also below ... */
case '': /* generate indented source mode*/
- if (behavior == PHP_MODE_CLI_DIRECT || behavior ==
PHP_MODE_PROCESS_STDIN) {
+ if (behavior == PHP_MODE_CLI_DIRECT) {
param_error = "Source indenting only works for
files.\n";
break;
}
@@ -754,72 +647,39 @@
break;
case 'r': /* run code from command line */
- if (behavior == PHP_MODE_CLI_DIRECT) {
- if (exec_direct || script_file) {
- param_error = "You can use -r only
once.\n";
- break;
- }
- } else if (behavior != PHP_MODE_STANDARD) {
- param_error = param_mode_conflict;
+ if (behavior != PHP_MODE_STANDARD) {
+ param_error = "Either execute direct code or
use a file.\n";
break;
}
behavior=PHP_MODE_CLI_DIRECT;
- exec_direct=optarg;
- break;
-
- case 'R':
- if (behavior == PHP_MODE_PROCESS_STDIN) {
- if (exec_run || script_file) {
- param_error = "You can use -R or -F
only once.\n";
- break;
- }
- } else if (behavior != PHP_MODE_STANDARD) {
- param_error = param_mode_conflict;
- break;
- }
- behavior=PHP_MODE_PROCESS_STDIN;
- exec_run=optarg;
- break;
-
- case 'B':
- if (behavior == PHP_MODE_PROCESS_STDIN) {
- if (exec_begin) {
- param_error = "You can use -B only
once.\n";
- break;
- }
- } else if (behavior != PHP_MODE_STANDARD) {
- param_error = param_mode_conflict;
- break;
- }
- behavior=PHP_MODE_PROCESS_STDIN;
- exec_begin=optarg;
- break;
-
- case 'E':
- if (behavior == PHP_MODE_PROCESS_STDIN) {
- if (exec_end) {
- param_error = "You can use -E only
once.\n";
- break;
- }
- } else if (behavior != PHP_MODE_STANDARD) {
- param_error = param_mode_conflict;
- break;
- }
- scan_input = 1;
- behavior=PHP_MODE_PROCESS_STDIN;
- exec_end=optarg;
+ exec_direct=ap_php_optarg;
break;
case 's': /* generate highlighted HTML from source */
- if (behavior == PHP_MODE_CLI_DIRECT || behavior ==
PHP_MODE_PROCESS_STDIN) {
+ if (behavior == PHP_MODE_CLI_DIRECT) {
param_error = "Source highlighting only works
for files.\n";
break;
}
behavior=PHP_MODE_HIGHLIGHT;
break;
+ case 'v': /* show php version & quit */
+ if (php_request_startup(TSRMLS_C)==FAILURE) {
+ goto err;
+ }
+
+#if ZEND_DEBUG
+ php_printf("PHP %s (%s) (built: %s %s)
(DEBUG)\nCopyright (c) 1997-2003 The PHP Group\n%s", PHP_VERSION, sapi_module.name,
__DATE__, __TIME__, get_zend_version());
+#else
+ php_printf("PHP %s (%s) (built: %s %s)\nCopyright (c)
1997-2003 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__,
get_zend_version());
+#endif
+ php_printf("PHP %s (%s) (built: %s %s)\nCopyright (c)
1997-2003 The PHP Group\n%s", PHP_VERSION, sapi_module.name, __DATE__, __TIME__,
get_zend_version());
+ php_end_ob_buffers(1 TSRMLS_CC);
+ exit_status=1;
+ goto out;
+
case 'w':
- if (behavior == PHP_MODE_CLI_DIRECT || behavior ==
PHP_MODE_PROCESS_STDIN) {
+ if (behavior == PHP_MODE_CLI_DIRECT) {
param_error = "Source stripping only works for
files.\n";
break;
}
@@ -827,10 +687,7 @@
break;
case 'z': /* load extension file */
- zend_load_extension(optarg);
- break;
- case 'H':
- hide_argv = 1;
+ zend_load_extension(ap_php_optarg);
break;
default:
@@ -847,25 +704,35 @@
CG(interactive) = interactive;
/* only set script_file if not set already and not in direct mode and
not at end of parameter list */
- if (argc > optind
- && !script_file
- && behavior!=PHP_MODE_CLI_DIRECT
- && behavior!=PHP_MODE_PROCESS_STDIN
- && strcmp(argv[optind-1],"--"))
- {
- script_file=argv[optind];
- optind++;
+ if (argc > ap_php_optind && !script_file &&
behavior!=PHP_MODE_CLI_DIRECT && strcmp(argv[ap_php_optind-1],"--")) {
+ script_file=argv[ap_php_optind];
+ ap_php_optind++;
}
if (script_file) {
- if (cli_seek_file_begin(&file_handle, script_file, &lineno
TSRMLS_CC) != SUCCESS) {
+ if (!(file_handle.handle.fp = VCWD_FOPEN(script_file, "rb"))) {
+ php_printf("Could not open input file: %s.\n",
script_file);
goto err;
}
+ file_handle.filename = script_file;
script_filename = script_file;
+ /* #!php support */
+ c = fgetc(file_handle.handle.fp);
+ if (c == '#') {
+ while (c != 10 && c != 13) {
+ c = fgetc(file_handle.handle.fp); /*
skip to end of line */
+ }
+ /* handle situations where line is terminated by \r\n
*/
+ if (c == 13) {
+ if (fgetc(file_handle.handle.fp) != 10) {
+ long pos =
ftell(file_handle.handle.fp);
+ fseek(file_handle.handle.fp, pos - 1,
SEEK_SET);
+ }
+ }
+ is_hashbang = 1;
+ } else {
+ rewind(file_handle.handle.fp);
+ }
} else {
- /* We could handle PHP_MODE_PROCESS_STDIN in a different
manner */
- /* here but this would make things only more complicated. And
it */
- /* is consitent with the way -R works where the stdin file
handle*/
- /* is also accessible. */
file_handle.filename = "-";
file_handle.handle.fp = stdin;
}
@@ -874,14 +741,14 @@
file_handle.free_filename = 0;
php_self = file_handle.filename;
- /* before registering argv to module exchange the *new* argv[0] */
+ /* before registering argv to modulule exchange the *new* argv[0] */
/* we can achieve this without allocating more memory */
- SG(request_info).argc=argc-optind+1;
- arg_excp = argv+optind-1;
- arg_free = argv[optind-1];
+ SG(request_info).argc=argc-ap_php_optind+1;
+ arg_excp = argv+ap_php_optind-1;
+ arg_free = argv[ap_php_optind-1];
SG(request_info).path_translated = file_handle.filename;
- argv[optind-1] = file_handle.filename;
- SG(request_info).argv=argv+optind-1;
+ argv[ap_php_optind-1] = file_handle.filename;
+ SG(request_info).argv=argv+ap_php_optind-1;
if (php_request_startup(TSRMLS_C)==FAILURE) {
*arg_excp = arg_free;
@@ -890,16 +757,14 @@
PUTS("Could not startup.\n");
goto err;
}
- CG(zend_lineno) = lineno;
- *arg_excp = arg_free; /* reconstuct argv */
- if (hide_argv) {
- int i;
- for (i = 1; i < argc; i++) {
- memset(argv[i], 0, strlen(argv[i]));
- }
+ /* Correct line numbers when #!php is used. This is reset in
php_request_startup(). */
+ if (is_hashbang) {
+ CG(zend_lineno) = -2;
}
+ *arg_excp = arg_free; /* reconstuct argv */
+
/* This actually destructs the elements of the list - ugly hack */
zend_llist_apply(&global_vars, (llist_apply_func_t)
php_register_command_line_global_vars TSRMLS_CC);
zend_llist_destroy(&global_vars);
@@ -955,58 +820,6 @@
exit_status=254;
}
break;
-
- case PHP_MODE_PROCESS_STDIN:
- {
- char *input;
- size_t len, index = 0;
- pval *argn, *argi;
-
- cli_register_file_handles(TSRMLS_C);
-
- if (exec_begin && zend_eval_string(exec_begin, NULL,
"Command line begin code" TSRMLS_CC) == FAILURE) {
- exit_status=254;
- }
- ALLOC_ZVAL(argi);
- Z_TYPE_P(argi) = IS_LONG;
- Z_LVAL_P(argi) = index;
- INIT_PZVAL(argi);
- zend_hash_update(&EG(symbol_table), "argi",
sizeof("argi"), &argi, sizeof(pval *), NULL);
- while (exit_status == SUCCESS &&
(input=php_stream_gets(s_in_process, NULL, 0)) != NULL) {
- len = strlen(input);
- while (len-- && (input[len]=='\n' ||
input[len]=='\r')) {
- input[len] = '\0';
- }
- ALLOC_ZVAL(argn);
- Z_TYPE_P(argn) = IS_STRING;
- Z_STRLEN_P(argn) = ++len;
- Z_STRVAL_P(argn) = estrndup(input, len);
- INIT_PZVAL(argn);
- zend_hash_update(&EG(symbol_table), "argn",
sizeof("argn"), &argn, sizeof(pval *), NULL);
- Z_LVAL_P(argi) = ++index;
- if (exec_run) {
- if (zend_eval_string(exec_run, NULL,
"Command line run code" TSRMLS_CC) == FAILURE) {
- exit_status=254;
- }
- } else {
- if (script_file) {
- if
(cli_seek_file_begin(&file_handle, script_file, &lineno TSRMLS_CC) != SUCCESS) {
- exit_status = 1;
- } else {
- CG(zend_lineno) =
lineno;
-
php_execute_script(&file_handle TSRMLS_CC);
- exit_status =
EG(exit_status);
- }
- }
- }
- efree(input);
- }
- if (exec_end && zend_eval_string(exec_end, NULL,
"Command line end code" TSRMLS_CC) == FAILURE) {
- exit_status=254;
- }
-
- break;
- }
}
if (cli_sapi_module.php_ini_path_override) {
Index: php4/sapi/cli/php_getopt.h
diff -u php4/sapi/cli/php_getopt.h:1.1.8.1 php4/sapi/cli/php_getopt.h:1.1.8.2
--- php4/sapi/cli/php_getopt.h:1.1.8.1 Thu May 29 11:28:01 2003
+++ php4/sapi/cli/php_getopt.h Fri May 30 21:37:45 2003
@@ -16,17 +16,13 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_getopt.h,v 1.1.8.1 2003/05/29 15:28:01 helly Exp $ */
+/* $Id: php_getopt.h,v 1.1.8.2 2003/05/31 01:37:45 sniper Exp $ */
#include "php.h"
-/* Define structure for one recognized option (both single char and long name).
- * If short_open is '-' this is the last option.
- */
-typedef struct _opt_struct {
- const char opt_char;
- const int need_param;
- const char * opt_name;
-} opt_struct;
-
-int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **optarg,
int *optind, int show_err);
+extern char *ap_php_optarg;
+extern int ap_php_optind;
+
+int ap_php_getopt(int argc, char* const *argv, const char *optstr);
+
+
\ No newline at end of file
Index: php4/sapi/isapi/php4isapi.c
diff -u php4/sapi/isapi/php4isapi.c:1.92.2.6 php4/sapi/isapi/php4isapi.c:1.92.2.7
--- php4/sapi/isapi/php4isapi.c:1.92.2.6 Wed May 21 05:34:15 2003
+++ php4/sapi/isapi/php4isapi.c Fri May 30 21:37:45 2003
@@ -717,7 +717,7 @@
DWORD WINAPI HttpExtensionProc(LPEXTENSION_CONTROL_BLOCK lpECB)
{
- zend_file_handle file_handle;
+ zend_file_handle file_handle = {0};
zend_bool stack_overflown=0;
#ifdef PHP_ENABLE_SEH
LPEXCEPTION_POINTERS e;
Index: php4/sapi/phttpd/phttpd.c
diff -u php4/sapi/phttpd/phttpd.c:1.35.2.3 php4/sapi/phttpd/phttpd.c:1.35.2.4
--- php4/sapi/phttpd/phttpd.c:1.35.2.3 Wed May 21 05:34:16 2003
+++ php4/sapi/phttpd/phttpd.c Fri May 30 21:37:45 2003
@@ -247,7 +247,7 @@
int php_doit(TSRMLS_D TSRMLS_DC)
{
struct stat sb;
- zend_file_handle file_handle;
+ zend_file_handle file_handle = {0};
struct httpinfo *hip = PHG(cip)->hip;
TSRMLS_FETCH();
Index: php4/sapi/pi3web/pi3web_sapi.c
diff -u php4/sapi/pi3web/pi3web_sapi.c:1.46.2.4 php4/sapi/pi3web/pi3web_sapi.c:1.46.2.5
--- php4/sapi/pi3web/pi3web_sapi.c:1.46.2.4 Wed May 21 05:34:16 2003
+++ php4/sapi/pi3web/pi3web_sapi.c Fri May 30 21:37:45 2003
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: pi3web_sapi.c,v 1.46.2.4 2003/05/21 09:34:16 zeev Exp $ */
+/* $Id: pi3web_sapi.c,v 1.46.2.5 2003/05/31 01:37:45 sniper Exp $ */
#include "pi3web_sapi.h"
#include "php.h"
@@ -78,7 +78,7 @@
PUTS("<table border=0 cellpadding=3 cellspacing=1 width=600 align=center>\n");
PUTS("<tr><th colspan=2 bgcolor=\"" PHP_HEADER_COLOR "\">Pi3Web Server
Information</th></tr>\n");
php_info_print_table_header(2, "Information Field", "Value");
- php_info_print_table_row(2, "Pi3Web SAPI module version", "$Id:
pi3web_sapi.c,v 1.46.2.4 2003/05/21 09:34:16 zeev Exp $");
+ php_info_print_table_row(2, "Pi3Web SAPI module version", "$Id:
pi3web_sapi.c,v 1.46.2.5 2003/05/31 01:37:45 sniper Exp $");
php_info_print_table_row(2, "Server Name Stamp", HTTPCore_getServerStamp());
snprintf(variable_buf, 511, "%d", HTTPCore_debugEnabled());
php_info_print_table_row(2, "Debug Enabled", variable_buf);
@@ -387,7 +387,7 @@
DWORD PHP4_wrapper(LPCONTROL_BLOCK lpCB)
{
- zend_file_handle file_handle;
+ zend_file_handle file_handle = {0};
int iRet = PIAPI_COMPLETED;
TSRMLS_FETCH();
Index: php4/sapi/roxen/roxen.c
diff -u php4/sapi/roxen/roxen.c:1.53.2.4 php4/sapi/roxen/roxen.c:1.53.2.5
--- php4/sapi/roxen/roxen.c:1.53.2.4 Wed May 21 05:34:16 2003
+++ php4/sapi/roxen/roxen.c Fri May 30 21:37:45 2003
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: roxen.c,v 1.53.2.4 2003/05/21 09:34:16 zeev Exp $ */
+/* $Id: roxen.c,v 1.53.2.5 2003/05/31 01:37:45 sniper Exp $ */
#include "php.h"
#ifdef HAVE_ROXEN
@@ -438,7 +438,7 @@
{
/* char buf[512]; */
php_info_print_table_start();
- php_info_print_table_row(2, "SAPI module version", "$Id: roxen.c,v 1.53.2.4
2003/05/21 09:34:16 zeev Exp $");
+ php_info_print_table_row(2, "SAPI module version", "$Id: roxen.c,v 1.53.2.5
2003/05/31 01:37:45 sniper Exp $");
/* php_info_print_table_row(2, "Build date", Ns_InfoBuildDate());
php_info_print_table_row(2, "Config file path", Ns_InfoConfigFile());
php_info_print_table_row(2, "Error Log path", Ns_InfoErrorLog());
@@ -575,7 +575,7 @@
{
int res, len;
char *dir;
- zend_file_handle file_handle;
+ zend_file_handle file_handle = {0};
#ifdef ROXEN_USE_ZTS
GET_THIS();
#endif
Index: php4/sapi/servlet/servlet.c
diff -u php4/sapi/servlet/servlet.c:1.65.2.5 php4/sapi/servlet/servlet.c:1.65.2.6
--- php4/sapi/servlet/servlet.c:1.65.2.5 Wed May 21 05:34:16 2003
+++ php4/sapi/servlet/servlet.c Fri May 30 21:37:45 2003
@@ -310,7 +310,7 @@
jstring contentType, jint contentLength,
jstring authUser, jboolean display_source_mode)
{
- zend_file_handle file_handle;
+ zend_file_handle file_handle = {0};
int retval;
#ifndef VIRTUAL_DIR
char cwd[MAXPATHLEN];
Index: php4/sapi/thttpd/thttpd.c
diff -u php4/sapi/thttpd/thttpd.c:1.77.2.11 php4/sapi/thttpd/thttpd.c:1.77.2.12
--- php4/sapi/thttpd/thttpd.c:1.77.2.11 Wed May 21 05:34:16 2003
+++ php4/sapi/thttpd/thttpd.c Fri May 30 21:37:45 2003
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: thttpd.c,v 1.77.2.11 2003/05/21 09:34:16 zeev Exp $ */
+/* $Id: thttpd.c,v 1.77.2.12 2003/05/31 01:37:45 sniper Exp $ */
#include "php.h"
#include "SAPI.h"
@@ -388,7 +388,7 @@
static void thttpd_module_main(int show_source TSRMLS_DC)
{
- zend_file_handle file_handle;
+ zend_file_handle file_handle = {0};
if (php_request_startup(TSRMLS_C) == FAILURE) {
return;
Index: php4/sapi/tux/php_tux.c
diff -u php4/sapi/tux/php_tux.c:1.18.2.4 php4/sapi/tux/php_tux.c:1.18.2.5
--- php4/sapi/tux/php_tux.c:1.18.2.4 Wed May 21 05:34:17 2003
+++ php4/sapi/tux/php_tux.c Fri May 30 21:37:45 2003
@@ -296,7 +296,7 @@
static void tux_module_main(TSRMLS_D)
{
- zend_file_handle file_handle;
+ zend_file_handle file_handle = {0};
file_handle.type = ZEND_HANDLE_FILENAME;
file_handle.filename = SG(request_info).path_translated;
Index: php4/sapi/webjames/webjames.c
diff -u php4/sapi/webjames/webjames.c:1.5.2.3 php4/sapi/webjames/webjames.c:1.5.2.4
--- php4/sapi/webjames/webjames.c:1.5.2.3 Wed May 21 05:34:17 2003
+++ php4/sapi/webjames/webjames.c Fri May 30 21:37:45 2003
@@ -142,7 +142,7 @@
static void webjames_module_main(TSRMLS_D)
{
- zend_file_handle file_handle;
+ zend_file_handle file_handle = {0};
FILE *fp=NULL;
char *path;
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php