]> granicus.if.org Git - php/commitdiff
Made the $argc and $argv always available as globals in CLI, and not as
authorAndrei Zmievski <andrei@php.net>
Wed, 1 Oct 2003 23:11:59 +0000 (23:11 +0000)
committerAndrei Zmievski <andrei@php.net>
Wed, 1 Oct 2003 23:11:59 +0000 (23:11 +0000)
$_SERVER vars which depended on variables_order anyway. No more
silliness.

main/php_variables.c

index b0dd0c5e52fac34eeb30b9274440c5c3da30210f..e20fe4e363f3e38ac8915e433aeaafb29de1b3a2 100644 (file)
@@ -369,9 +369,15 @@ static void php_build_argv(char *s, zval *track_vars_array TSRMLS_DC)
        int count = 0;
        char *ss, *space;
        
+       if (! (PG(register_globals) || SG(request_info).argc ||
+                  PG(http_globals)[TRACK_VARS_SERVER]) ) {
+               return;
+       }
+       
        ALLOC_ZVAL(arr);
        array_init(arr);
-       INIT_PZVAL(arr);
+       arr->is_ref = 0;
+       arr->refcount = 0;
 
        /* Prepare argv */
        if (SG(request_info).argc) { /* are we in cli sapi? */
@@ -424,17 +430,20 @@ static void php_build_argv(char *s, zval *track_vars_array TSRMLS_DC)
                Z_LVAL_P(argc) = count;
        }
        Z_TYPE_P(argc) = IS_LONG;
-       INIT_PZVAL(argc);
+       argc->is_ref = 0;
+       argc->refcount = 0;
 
        if (PG(register_globals) || SG(request_info).argc) {
                arr->refcount++;
                argc->refcount++;
                zend_hash_update(&EG(symbol_table), "argv", sizeof("argv"), &arr, sizeof(zval *), NULL);
                zend_hash_add(&EG(symbol_table), "argc", sizeof("argc"), &argc, sizeof(zval *), NULL);
+       } else if (!SG(request_info).argc) {
+               arr->refcount++;
+               argc->refcount++;
+               zend_hash_update(Z_ARRVAL_P(track_vars_array), "argv", sizeof("argv"), &arr, sizeof(pval *), NULL);
+               zend_hash_update(Z_ARRVAL_P(track_vars_array), "argc", sizeof("argc"), &argc, sizeof(pval *), NULL);
        }
-
-       zend_hash_update(Z_ARRVAL_P(track_vars_array), "argv", sizeof("argv"), &arr, sizeof(pval *), NULL);
-       zend_hash_update(Z_ARRVAL_P(track_vars_array), "argc", sizeof("argc"), &argc, sizeof(pval *), NULL);
 }
 /* }}} */
 
@@ -476,11 +485,6 @@ static inline void php_register_server_variables(TSRMLS_D)
                sapi_module.register_server_variables(array_ptr TSRMLS_CC);
        }
 
-       /* argv/argc support */
-       if (PG(register_argc_argv)) {
-               php_build_argv(SG(request_info).query_string, array_ptr TSRMLS_CC);
-       }
-
        /* PHP Authentication support */
        if (SG(request_info).auth_user) {
                php_register_variable("PHP_AUTH_USER", SG(request_info).auth_user, array_ptr TSRMLS_CC);
@@ -646,6 +650,11 @@ int php_hash_environment(TSRMLS_D)
                }
        }
 
+       /* argv/argc support */
+       if (PG(register_argc_argv)) {
+               php_build_argv(SG(request_info).query_string, PG(http_globals)[TRACK_VARS_SERVER] TSRMLS_CC);
+       }
+
        for (i=0; i<num_track_vars; i++) {
                if (jit_initialization && auto_global_records[i].jit_initialization) {
                        continue;