Hello,

here is a patch that implements shell_exit(). It is simliar to exit(), but
it does not print the return value.

regards,

Derick Rethans

---------------------------------------------------------------------
        PHP: Scripting the Web - www.php.net - [EMAIL PROTECTED]
             SRM: Site Resource Manager - www.vl-srm.net
---------------------------------------------------------------------
    JDI Media Solutions - www.jdimedia.nl - [EMAIL PROTECTED]
     Boulevard Heuvelink 102 - 6828 KT Arnhem - The Netherlands
---------------------------------------------------------------------
? .zend_compile.h.swp
Index: zend_compile.c
===================================================================
RCS file: /repository/Zend/zend_compile.c,v
retrieving revision 1.223
diff -u -r1.223 zend_compile.c
--- zend_compile.c      2001/12/04 17:56:19     1.223
+++ zend_compile.c      2001/12/18 10:44:47
@@ -2231,13 +2231,15 @@
 }
 
 
-void zend_do_exit(znode *result, znode *message TSRMLS_DC)
+void zend_do_exit(znode *result, znode *message, int type TSRMLS_DC)
 {
        zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
 
        opline->opcode = ZEND_EXIT;
        opline->op1 = *message;
-       SET_UNUSED(opline->op2);
+       opline->op2.op_type = IS_CONST;
+       opline->op2.u.constant.type = IS_BOOL;
+       opline->op2.u.constant.value.lval = type;
 
        result->op_type = IS_CONST;
        result->u.constant.type = IS_BOOL;
Index: zend_compile.h
===================================================================
RCS file: /repository/Zend/zend_compile.h,v
retrieving revision 1.139
diff -u -r1.139 zend_compile.h
--- zend_compile.h      2001/12/04 17:56:19     1.139
+++ zend_compile.h      2001/12/18 10:44:48
@@ -335,7 +335,7 @@
 
 void zend_do_end_heredoc(TSRMLS_D);
 
-void zend_do_exit(znode *result, znode *message TSRMLS_DC);
+void zend_do_exit(znode *result, znode *message, int type TSRMLS_DC);
 
 void zend_do_begin_silence(znode *strudel_token TSRMLS_DC);
 void zend_do_end_silence(znode *strudel_token TSRMLS_DC);
Index: zend_execute.c
===================================================================
RCS file: /repository/Zend/zend_execute.c,v
retrieving revision 1.291
diff -u -r1.291 zend_execute.c
--- zend_execute.c      2001/12/04 17:56:19     1.291
+++ zend_execute.c      2001/12/18 10:44:49
@@ -2392,7 +2392,9 @@
                                        if (Z_TYPE_P(ptr) == IS_LONG) {
                                                EG(exit_status) = Z_LVAL_P(ptr);
                                        }
-                                       zend_print_variable(ptr);
+                                       if (EX(opline)->op2.op_type == IS_CONST && 
+EX(opline)->op2.u.constant.value.lval) {
+                                               zend_print_variable(ptr);
+                                       }
                                        FREE_OP(EX(Ts), &EX(opline)->op1, 
EG(free_op1));
                                }
                                zend_bailout();
Index: zend_language_parser.y
===================================================================
RCS file: /repository/Zend/zend_language_parser.y,v
retrieving revision 1.15
diff -u -r1.15 zend_language_parser.y
--- zend_language_parser.y      2001/12/04 17:56:19     1.15
+++ zend_language_parser.y      2001/12/18 10:44:50
@@ -69,6 +69,7 @@
 %right '['
 %nonassoc T_NEW
 %token T_EXIT
+%token T_SHELL_EXIT
 %token T_IF
 %left T_ELSEIF
 %left T_ELSE
@@ -477,7 +478,8 @@
        |       T_OBJECT_CAST expr      { zend_do_cast(&$$, &$2, IS_OBJECT TSRMLS_CC); 
}
        |       T_BOOL_CAST expr        { zend_do_cast(&$$, &$2, IS_BOOL TSRMLS_CC); }
        |       T_UNSET_CAST expr       { zend_do_cast(&$$, &$2, IS_NULL TSRMLS_CC); }
-       |       T_EXIT exit_expr        { zend_do_exit(&$$, &$2 TSRMLS_CC); }
+       |       T_EXIT exit_expr        { zend_do_exit(&$$, &$2, 1 TSRMLS_CC); }
+       |       T_SHELL_EXIT exit_expr  { zend_do_exit(&$$, &$2, 0 TSRMLS_CC); }
        |       '@' { zend_do_begin_silence(&$1 TSRMLS_CC); } expr { 
zend_do_end_silence(&$1 TSRMLS_CC); $$ = $3; }
        |       scalar                          { $$ = $1; }
        |       T_ARRAY '(' array_pair_list ')' { $$ = $3; }
Index: zend_language_scanner.l
===================================================================
RCS file: /repository/Zend/zend_language_scanner.l,v
retrieving revision 1.41
diff -u -r1.41 zend_language_scanner.l
--- zend_language_scanner.l     2001/12/04 17:56:19     1.41
+++ zend_language_scanner.l     2001/12/18 10:44:51
@@ -471,6 +471,10 @@
        return T_EXIT;
 }
 
+<ST_IN_SCRIPTING>"shell_exit" {
+       return T_SHELL_EXIT;
+}
+
 <ST_IN_SCRIPTING>"die" {
        return T_EXIT;
 }
-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to