From 41f6bca92fc480df09ba0cc748342a03cbf539b3 Mon Sep 17 00:00:00 2001 From: Zeev Suraski Date: Thu, 10 Feb 2000 18:19:04 +0000 Subject: [PATCH] More cleanup! --- ext/standard/pageinfo.c | 50 +++++++++-------------------------------- main/SAPI.c | 16 +++++-------- main/SAPI.h | 6 +++-- main/safe_mode.c | 8 +++---- sapi/apache/mod_php4.c | 6 ++--- 5 files changed, 28 insertions(+), 58 deletions(-) diff --git a/ext/standard/pageinfo.c b/ext/standard/pageinfo.c index 7040d4c59d..9213600fdb 100644 --- a/ext/standard/pageinfo.c +++ b/ext/standard/pageinfo.c @@ -40,52 +40,24 @@ #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 { diff --git a/main/SAPI.c b/main/SAPI.c index 7f8f568692..a48e84f6b7 100644 --- a/main/SAPI.c +++ b/main/SAPI.c @@ -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); } } diff --git a/main/SAPI.h b/main/SAPI.h index 88554cf18a..48f001200c 100644 --- a/main/SAPI.h +++ b/main/SAPI.h @@ -23,6 +23,7 @@ #include "zend.h" #include "zend_llist.h" #include "zend_operators.h" +#include #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, ...); diff --git a/main/safe_mode.c b/main/safe_mode.c index fea75ed5c8..f274d23da8 100644 --- a/main/safe_mode.c +++ b/main/safe_mode.c @@ -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); diff --git a/sapi/apache/mod_php4.c b/sapi/apache/mod_php4.c index 7a9cb0ee94..8e1c27ae02 100644 --- a/sapi/apache/mod_php4.c +++ b/sapi/apache/mod_php4.c @@ -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 */ -- 2.40.0