cvs: TSRM / tsrm_virtual_cwd.c tsrm_virtual_cwd.h

From: Date: Fri, 10 Nov 2006 12:59:41 +0000
Subject: cvs: TSRM / tsrm_virtual_cwd.c tsrm_virtual_cwd.h
Groups: php.zend-engine.cvs 
Request: Send a blank email to php-zend-engine-cvs+get-5383@lists.php.net to get a copy of this message
dmitry Fri Nov 10 12:59:41 2006 UTC Modified files: /TSRM tsrm_virtual_cwd.c tsrm_virtual_cwd.h Log: VCWD_REALPATH() is improved to use realpath cache without VIRTUAL_DIR http://cvs.php.net/viewvc.cgi/TSRM/tsrm_virtual_cwd.c?r1=1.90&r2=1.91&diff_format=u Index: TSRM/tsrm_virtual_cwd.c diff -u TSRM/tsrm_virtual_cwd.c:1.90 TSRM/tsrm_virtual_cwd.c:1.91 --- TSRM/tsrm_virtual_cwd.c:1.90 Fri Oct 6 14:01:55 2006 +++ TSRM/tsrm_virtual_cwd.c Fri Nov 10 12:59:41 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: tsrm_virtual_cwd.c,v 1.90 2006/10/06 14:01:55 tony2001 Exp $ */ +/* $Id: tsrm_virtual_cwd.c,v 1.91 2006/11/10 12:59:41 dmitry Exp $ */ #include <sys/types.h> #include <sys/stat.h> @@ -1033,25 +1033,36 @@ #endif -/* On AIX & Tru64 when a file does not exist realpath() returns - * NULL, and sets errno to ENOENT. Unlike in other libc implementations - * the destination is not filled and remains undefined. Therefor, we - * must populate it manually using strcpy as done on systems with no - * realpath() function. - */ -#if defined(__osf__) || defined(_AIX) -char *php_realpath_hack(const char *src, char *dest) +CWD_API char *tsrm_realpath(const char *path, char *real_path TSRMLS_DC) { - char *ret; + cwd_state new_state; + char cwd[MAXPATHLEN]; - if ((ret = realpath(src, dest)) == NULL && errno == ENOENT) { - return strcpy(dest, src); + if (!IS_ABSOLUTE_PATH(path, strlen(path)) && + VCWD_GETCWD(cwd, MAXPATHLEN)) { + new_state.cwd = strdup(cwd); + new_state.cwd_length = strlen(cwd); } else { - return ret; + new_state.cwd = (char*)malloc(1); + new_state.cwd[0] = '\0'; + new_state.cwd_length = 0; + } + + if (virtual_file_ex(&new_state, path, NULL, 1)) { + free(new_state.cwd); + return NULL; } -} -#endif + if (real_path) { + int copy_len = new_state.cwd_length>MAXPATHLEN-1 ? MAXPATHLEN-1 : new_state.cwd_length; + memcpy(real_path, new_state.cwd, copy_len); + real_path[copy_len] = '\0'; + free(new_state.cwd); + return real_path; + } else { + return new_state.cwd; + } +} /* http://cvs.php.net/viewvc.cgi/TSRM/tsrm_virtual_cwd.h?r1=1.57&r2=1.58&diff_format=u Index: TSRM/tsrm_virtual_cwd.h diff -u TSRM/tsrm_virtual_cwd.h:1.57 TSRM/tsrm_virtual_cwd.h:1.58 --- TSRM/tsrm_virtual_cwd.h:1.57 Wed Oct 4 13:24:06 2006 +++ TSRM/tsrm_virtual_cwd.h Fri Nov 10 12:59:41 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: tsrm_virtual_cwd.h,v 1.57 2006/10/04 13:24:06 tony2001 Exp $ */ +/* $Id: tsrm_virtual_cwd.h,v 1.58 2006/11/10 12:59:41 dmitry Exp $ */ #ifndef VIRTUAL_CWD_H #define VIRTUAL_CWD_H @@ -189,10 +189,6 @@ #endif #endif -#if defined(__osf__) || defined(_AIX) -char *php_realpath_hack(const char *src, char *dest); -#endif - #if HAVE_UTIME CWD_API int virtual_utime(const char *filename, struct utimbuf *buf TSRMLS_DC); #endif @@ -203,6 +199,8 @@ CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path, int use_realpath); +CWD_API char *tsrm_realpath(const char *path, char *real_path TSRMLS_DC); + #define REALPATH_CACHE_TTL (2*60) /* 2 minutes */ #define REALPATH_CACHE_SIZE 0 /* disabled while php.ini isn't loaded */ @@ -295,15 +293,7 @@ #define VCWD_ACCESS(pathname, mode) access(pathname, mode) #endif -#ifdef HAVE_REALPATH -#if defined(__osf__) || defined(_AIX) -#define VCWD_REALPATH(path, real_path) php_realpath_hack(path, real_path) -#else -#define VCWD_REALPATH(path, real_path) realpath(path, real_path) -#endif -#else -#define VCWD_REALPATH(path, real_path) strcpy(real_path, path) -#endif +#define VCWD_REALPATH(path, real_path) tsrm_realpath(path, real_path TSRMLS_CC) #if HAVE_UTIME #define VCWD_UTIME(path, time) utime(path, time)

« previous php.zend-engine.cvs (#5383) next »