]> granicus.if.org Git - php/commitdiff
More cleanup!
authorZeev Suraski <zeev@php.net>
Thu, 10 Feb 2000 18:19:04 +0000 (18:19 +0000)
committerZeev Suraski <zeev@php.net>
Thu, 10 Feb 2000 18:19:04 +0000 (18:19 +0000)
ext/standard/pageinfo.c
main/SAPI.c
main/SAPI.h
main/safe_mode.c
sapi/apache/mod_php4.c

index 7040d4c59d169b99a1b66ded23f77ee41a7bf664..9213600fdbc1918295861a770ffc7ff4e082af05 100644 (file)
 
 #include "ext/standard/basic_functions.h"
 
-static void php_statpage(void)
+static void php_statpage(BLS_D)
 {
-#if !APACHE
-       char *path;
-       struct stat sb;
-       BLS_FETCH();
-#else
-       request_rec *r;
-       BLS_FETCH();
-       SLS_FETCH();
-       
-       r = ((request_rec *) SG(server_context));
-#endif
-       
-#if APACHE
-       /* Apache has already gone through the trouble of doing
-          the stat(), so the only real overhead is copying three
-          values. We can afford it, and it means we don't have to
-          worry about resetting the static variables after every
-          hit. */
-       BG(page_uid)   = r ->finfo.st_uid;
-       BG(page_inode) = r->finfo.st_ino;
-       BG(page_mtime) = r->finfo.st_mtime;
-#else
-       if (BG(page_uid) == -1) {
-               SLS_FETCH();
+       struct stat *pstat;
 
-               path = SG(request_info).path_translated;
-               if (path != NULL) {
-                       if (stat(path, &sb) == -1) {
-                               php_error(E_WARNING, "Unable to find file:  '%s'", path);
-                               return;
-                       }
-                       BG(page_uid)   = sb.st_uid;
-                       BG(page_inode) = sb.st_ino;
-                       BG(page_mtime) = sb.st_mtime;
-               }
+       pstat = sapi_get_stat();
+
+       if (BG(page_uid)==-1) {
+               BG(page_uid)   = pstat->st_uid;
+               BG(page_inode) = pstat->st_ino;
+               BG(page_mtime) = pstat->st_mtime;
        }
-#endif
 }
 
 long php_getuid(void)
 {
        BLS_FETCH();
 
-       php_statpage();
+       php_statpage(BLS_C);
        return (BG(page_uid));
 }
 
@@ -125,7 +97,7 @@ PHP_FUNCTION(getmyinode)
 {
        BLS_FETCH();
 
-       php_statpage();
+       php_statpage(BLS_C);
        if (BG(page_inode) < 0) {
                RETURN_FALSE;
        } else {
@@ -140,7 +112,7 @@ PHP_FUNCTION(getlastmod)
 {
        BLS_FETCH();
 
-       php_statpage();
+       php_statpage(BLS_C);
        if (BG(page_mtime) < 0) {
                RETURN_FALSE;
        } else {
index 7f8f5686929907bc039a2410d9bcb81ec0c0a105..a48e84f6b72e7ec497dd4b1e45b2aa2afc7b11b1 100644 (file)
@@ -385,21 +385,17 @@ SAPI_API int sapi_flush()
        }
 }
 
-SAPI_API int sapi_get_uid()
+SAPI_API struct stat *sapi_get_stat()
 {
        SLS_FETCH();
 
-       if (sapi_module.get_uid) {
-               return sapi_module.get_uid(SLS_C);
+       if (sapi_module.get_stat) {
+               return sapi_module.get_stat(SLS_C);
        } else {
-               struct stat statbuf;
-
-               if (!SG(request_info).path_translated || (stat(SG(request_info).path_translated, &statbuf)==-1)) {
-                       return -1;
+               if (!SG(request_info).path_translated || (stat(SG(request_info).path_translated, &SG(global_stat))==-1)) {
+                       return NULL;
                }
-
-               stat(SG(request_info).path_translated, &statbuf);
-               return statbuf.st_uid;
+               return &SG(global_stat);
        }
 }
 
index 88554cf18a9fb3212178b7c5dfa9bf8211f9dda3..48f001200cd7ea50813a31bd63900703474e4180 100644 (file)
@@ -23,6 +23,7 @@
 #include "zend.h"
 #include "zend_llist.h"
 #include "zend_operators.h"
+#include <sys/stat.h>
 
 #define SAPI_POST_BLOCK_SIZE 4000
 
@@ -84,6 +85,7 @@ typedef struct {
        sapi_headers_struct sapi_headers;
        uint read_post_bytes;
        unsigned char headers_sent;
+       struct stat global_stat;
 } sapi_globals_struct;
 
 
@@ -127,7 +129,7 @@ SAPI_API void sapi_unregister_post_reader(sapi_post_content_type_reader *post_co
 SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(char *content_type_dup SLS_DC));
 
 SAPI_API int sapi_flush();
-SAPI_API int sapi_get_uid();
+SAPI_API struct stat *sapi_get_stat();
 SAPI_API char *sapi_getenv(char *name, int name_len);
 
 struct _sapi_module_struct {
@@ -141,7 +143,7 @@ struct _sapi_module_struct {
 
        int (*ub_write)(const char *str, unsigned int str_length);
        void (*flush)(void *server_context);
-       int (*get_uid)(SLS_D);
+       struct stat *(*get_stat)(SLS_D);
        char *(*getenv)(char *name, int name_len SLS_DC);
 
        void (*sapi_error)(int type, const char *error_msg, ...);
index fea75ed5c867180f78703c8679282d06aab0cc0f..f274d23da83b051cc30a08d1691be1bf099f56bd 100644 (file)
@@ -111,7 +111,7 @@ PHPAPI int php_checkuid(const char *fn, int mode) {
 PHPAPI char *php_get_current_user()
 {
        struct passwd *pwd;
-       int uid;
+       struct stat *pstat;
        SLS_FETCH();
 
        if (request_info.current_user) {
@@ -122,13 +122,13 @@ PHPAPI char *php_get_current_user()
        USE_SAPI is defined, because cgi will also be
        interfaced in USE_SAPI */
 
-       uid = sapi_get_uid();
+       pstat = sapi_get_stat();
 
-       if (uid==-1) {
+       if (!pstat) {
                return empty_string;
        }
 
-       if ((pwd=getpwuid(uid))==NULL) {
+       if ((pwd=getpwuid(pstat->st_uid))==NULL) {
                return empty_string;
        }
        request_info.current_user_length = strlen(pwd->pw_name);
index 7a9cb0ee94147ca9c3ee170b5df0d3445336c840..8e1c27ae02a133652c5a4106f7055b04e44d7277 100644 (file)
@@ -300,9 +300,9 @@ static int php_apache_sapi_activate(SLS_D)
 }
 
 
-static int php_apache_get_uid(SLS_D)
+static struct stat *php_apache_get_stat(SLS_D)
 {
-       return ((request_rec *) SG(server_context))->finfo.st_uid;
+       return &((request_rec *) SG(server_context))->finfo;
 }
 
 
@@ -325,7 +325,7 @@ static sapi_module_struct sapi_module = {
 
        sapi_apache_ub_write,                   /* unbuffered write */
        sapi_apache_flush,                              /* flush */
-       php_apache_get_uid,                             /* get uid */
+       php_apache_get_stat,                    /* get uid */
        php_apache_getenv,                              /* getenv */
 
        php_error,                                              /* error handler */