CVS update: php31/main

From: Date: Thu, 29 Oct 1998 22:04:20 +0000
Subject: CVS update: php31/main
Groups: php.dev 
Request: Send a blank email to php-dev+get-2083@lists.php.net to get a copy of this message
Date: Thursday October 29, 1998 @ 17:04 Author: shane Update of /repository/php31/main In directory asf:/u2/tmp/cvs-serv25280/main Modified Files: automated_configuration.h control_structures_inline.h fopen-wrappers.c language-parser.y language-scanner.l php3_realpath.c safe_mode.c variables.c variables.h Log Message: core patches 3.0->3.1 back to 3.0.3 Index: php31/main/automated_configuration.h diff -c php31/main/automated_configuration.h:2.8 php31/main/automated_configuration.h:2.9 *** php31/main/automated_configuration.h:2.8 Wed Sep 16 14:07:55 1998 --- php31/main/automated_configuration.h Thu Oct 29 17:04:17 1998 *************** *** 11,16 **** --- 11,17 ---- INI_ENTRY(use_registry, AC_BOOL, 0L, AC_NO, "Use Win32 Registry for per-server vars") INI_ENTRY(use_registry_dir, AC_BOOL, 0L, AC_NO_SAFEMODE, "Use Win32 Registry for per-directory vars") INI_ENTRY(short_open_tag, AC_BOOL, 1L, AC_YES, "Allow <? as an open tag") + INI_ENTRY(asp_tags, AC_BOOL, 1L, AC_YES, "Allow <% as an open tag") INI_ENTRY(precision, AC_LONG, 14L, AC_YES, "Precision of floating point numbers") INI_ENTRY(y2k_compliance, AC_BOOL, 0L, AC_YES, "Year 2000 compliance") INI_ENTRY(safe_mode, AC_BOOL, 0L, AC_NO, "Turn safe mode on/off") Index: php31/main/control_structures_inline.h diff -c php31/main/control_structures_inline.h:2.14 php31/main/control_structures_inline.h:2.15 *** php31/main/control_structures_inline.h:2.14 Sat Oct 17 14:19:47 1998 --- php31/main/control_structures_inline.h Thu Oct 29 17:04:18 1998 *************** *** 29,35 **** */ ! /* $Id: control_structures_inline.h,v 2.14 1998/10/17 18:19:47 zeev Exp $ */ #ifdef THREAD_SAFE #include "tls.h" --- 29,35 ---- */ ! /* $Id: control_structures_inline.h,v 2.15 1998/10/29 22:04:18 shane Exp $ */ #ifdef THREAD_SAFE #include "tls.h" *************** *** 445,451 **** pval_destructor(default_value _INLINE_TLS); } } ! } else { switch(type) { case BYREF_NONE: /* passed by value */ break; --- 445,451 ---- pval_destructor(default_value _INLINE_TLS); } } ! } else if (!GLOBAL(php3_display_source)) { switch(type) { case BYREF_NONE: /* passed by value */ break; Index: php31/main/fopen-wrappers.c diff -c php31/main/fopen-wrappers.c:2.5 php31/main/fopen-wrappers.c:2.6 *** php31/main/fopen-wrappers.c:2.5 Fri Sep 11 19:51:28 1998 --- php31/main/fopen-wrappers.c Thu Oct 29 17:04:18 1998 *************** *** 27,33 **** | Jim Winstead <jimw@php.net> | +----------------------------------------------------------------------+ */ ! /* $Id: fopen-wrappers.c,v 2.5 1998/09/11 23:51:28 zeev Exp $ */ #ifdef THREAD_SAFE #include "tls.h" --- 27,33 ---- | Jim Winstead <jimw@php.net> | +----------------------------------------------------------------------+ */ ! /* $Id: fopen-wrappers.c,v 2.6 1998/10/29 22:04:18 shane Exp $ */ #ifdef THREAD_SAFE #include "tls.h" *************** *** 106,143 **** */ PHPAPI int _php3_check_open_basedir(char *path) { ! char resolved_name[MAXPATHLEN]; TLS_VARS; ! /* Only check when open_basedir is available */ ! if (GLOBAL(php3_ini)->open_basedir && *GLOBAL(php3_ini)->open_basedir) { ! /* Resolve the real path into resolved_name */ ! if (_php3_realpath(path, resolved_name) != NULL) { ! /* Check the path */ ! #if WIN32|WINNT ! if (strncmp(GLOBAL(php3_ini)->open_basedir, resolved_name, strlen(GLOBAL(php3_ini)->open_basedir)) == 0) { ! #else ! if (strncasecmp(GLOBAL(php3_ini)->open_basedir, resolved_name, strlen(GLOBAL(php3_ini)->open_basedir)) == 0) { ! #endif ! /* File is in the right directory */ ! return 0; ! } else { ! php3_error(E_WARNING, "open_basedir restriction in effect. File is in wrong directory."); ! return -1; ! } ! } else { ! /* Unable to resolve the real path, return -1 */ ! php3_error(E_WARNING, "open_basedir restriction in effect. Unable to verify location of file."); ! return -1; ! } ! } else { ! /* open_basedir is not available, return 0 */ ! return 0; ! } } PHPAPI FILE *php3_fopen_wrapper(char *path, char *mode, int options, int *issock, int *socketd) { TLS_VARS; #if PHP3_URL_FOPEN if (!(options & IGNORE_URL)) { --- 106,177 ---- */ PHPAPI int _php3_check_open_basedir(char *path) { ! char resolved_name[MAXPATHLEN]; ! char local_open_basedir[MAXPATHLEN]; ! ! int local_open_basedir_pos; TLS_VARS; ! /* Only check when open_basedir is available */ ! if (GLOBAL(php3_ini)->open_basedir && *GLOBAL(php3_ini)->open_basedir) { ! /* Special case basedir==".": Use script-directory */ ! if ((strcmp(GLOBAL(php3_ini)->open_basedir, ".") == 0) && ! GLOBAL(sapi_rqst)->filename && ! *GLOBAL(sapi_rqst)->filename) ! { ! ! strcpy(local_open_basedir, GLOBAL(sapi_rqst)->filename); ! local_open_basedir_pos = strlen(local_open_basedir) - 1; ! /* Strip filename */ ! ! while (( ! #if WIN32|WINNT ! (local_open_basedir[local_open_basedir_pos] != '\\') || ! #endif ! (local_open_basedir[local_open_basedir_pos] != '/')) && ! (local_open_basedir_pos >= 0)) ! { ! local_open_basedir[local_open_basedir_pos--] = 0; ! } ! /* Strip double (back)slashes */ ! if (local_open_basedir_pos > 0) { ! while (( ! #if WIN32|WINNT ! (local_open_basedir[local_open_basedir_pos-1] == '\\') || ! #endif ! (local_open_basedir[local_open_basedir_pos-1] == '/')) && ! (local_open_basedir_pos > 0)) ! { ! local_open_basedir[local_open_basedir_pos--] = 0; ! } ! } ! } else { ! /* Else use the unmodified path */ ! strcpy(local_open_basedir, GLOBAL(php3_ini)->open_basedir); ! } /* Resolve the real path into resolved_name */ ! if (_php3_realpath(path, resolved_name) != NULL) { ! /* Check the path */ ! if (strncmp(GLOBAL(php3_ini)->open_basedir, resolved_name, strlen(GLOBAL(php3_ini)->open_basedir)) == 0) { ! /* File is in the right directory */ ! return 0; ! } else { ! php3_error(E_WARNING, "open_basedir restriction in effect. File is in wrong directory."); ! return -1; ! } ! } else { ! /* Unable to resolve the real path, return -1 */ ! php3_error(E_WARNING, "open_basedir restriction in effect. Unable to verify location of file."); ! return -1; ! } ! } else { ! /* open_basedir is not available, return 0 */ ! return 0; ! } } PHPAPI FILE *php3_fopen_wrapper(char *path, char *mode, int options, int *issock, int *socketd) { + int cm=2; /* checkuid mode: 2 = if file does not exist, check directory */ TLS_VARS; #if PHP3_URL_FOPEN if (!(options & IGNORE_URL)) { *************** *** 148,155 **** if (options & USE_PATH && GLOBAL(php3_ini)->include_path != NULL) { return php3_fopen_with_path(path, mode, GLOBAL(php3_ini)->include_path, NULL); } else { ! if (options & ENFORCE_SAFE_MODE && GLOBAL(php3_ini)->safe_mode && (!_php3_checkuid(path, 1))) { ! php3_error(E_WARNING, "SAFE MODE Restriction in effect. Invalid owner of file to be read."); return NULL; } return fopen(path, mode); --- 182,190 ---- if (options & USE_PATH && GLOBAL(php3_ini)->include_path != NULL) { return php3_fopen_with_path(path, mode, GLOBAL(php3_ini)->include_path, NULL); } else { ! if(!strcmp(mode,"r") || !strcmp(mode,"r+")) cm=0; ! if (options & ENFORCE_SAFE_MODE && ! GLOBAL(php3_ini)->safe_mode && (!_php3_checkuid(path, cm))) { return NULL; } return fopen(path, mode); *************** *** 256,271 **** char *pathbuf, *ptr, *end; char trypath[MAXPATHLEN + 1]; struct stat sb; FILE *fp; TLS_VARS; if (opened_path) { *opened_path = NULL; } /* Relative path open */ if (*filename == '.') { ! if (GLOBAL(php3_ini)->safe_mode && (!_php3_checkuid(filename, 2))) { ! php3_error(E_WARNING, "SAFE MODE Restriction in effect. Invalid owner."); return NULL; } if (_php3_check_open_basedir(filename)) return NULL; --- 291,307 ---- char *pathbuf, *ptr, *end; char trypath[MAXPATHLEN + 1]; struct stat sb; + int cm=2; FILE *fp; TLS_VARS; + if(!strcmp(mode,"r") || !strcmp(mode,"r+")) cm=0; if (opened_path) { *opened_path = NULL; } /* Relative path open */ if (*filename == '.') { ! if (GLOBAL(php3_ini)->safe_mode && (!_php3_checkuid(filename, cm))) { return NULL; } if (_php3_check_open_basedir(filename)) return NULL; *************** *** 282,290 **** if (*filename == '/') { #endif if (GLOBAL(php3_ini)->safe_mode) { ! snprintf(trypath, MAXPATHLEN, "%s%s", GLOBAL(php3_ini)->doc_root, filename); ! if (!_php3_checkuid(trypath, 2)) { ! php3_error(E_WARNING, "SAFE MODE Restriction in effect. Invalid owner."); return NULL; } if (_php3_check_open_basedir(trypath)) return NULL; --- 318,329 ---- if (*filename == '/') { #endif if (GLOBAL(php3_ini)->safe_mode) { ! if(GLOBAL(php3_ini)->doc_root) { ! snprintf(trypath, MAXPATHLEN, "%s%s", GLOBAL(php3_ini)->doc_root, filename); ! } else { ! strncpy(trypath,filename,MAXPATHLEN); ! } ! if (!_php3_checkuid(trypath, cm)) { return NULL; } if (_php3_check_open_basedir(trypath)) return NULL; *************** *** 299,306 **** } } if (!path || (path && !*path)) { ! if (GLOBAL(php3_ini)->safe_mode && (!_php3_checkuid(filename, 2))) { ! php3_error(E_WARNING, "SAFE MODE Restriction in effect. Invalid owner."); return NULL; } if (_php3_check_open_basedir(filename)) return NULL; --- 338,344 ---- } } if (!path || (path && !*path)) { ! if (GLOBAL(php3_ini)->safe_mode && (!_php3_checkuid(filename, cm))) { return NULL; } if (_php3_check_open_basedir(filename)) return NULL; *************** *** 326,333 **** } snprintf(trypath, MAXPATHLEN, "%s/%s", ptr, filename); if (GLOBAL(php3_ini)->safe_mode) { ! if (stat(trypath, &sb) == 0 && (!_php3_checkuid(trypath, 2))) { ! php3_error(E_WARNING, "SAFE MODE Restriction in effect. Invalid owner."); efree(pathbuf); return NULL; } --- 364,370 ---- } snprintf(trypath, MAXPATHLEN, "%s/%s", ptr, filename); if (GLOBAL(php3_ini)->safe_mode) { ! if (stat(trypath, &sb) == 0 && (!_php3_checkuid(trypath, cm))) { efree(pathbuf); return NULL; } *************** *** 837,844 **** if (options & USE_PATH) { fp = php3_fopen_with_path(path, mode, GLOBAL(php3_ini)->include_path, NULL); } else { ! if (options & ENFORCE_SAFE_MODE && GLOBAL(php3_ini)->safe_mode && (!_php3_checkuid(path, 1))) { ! php3_error(E_WARNING, "SAFE MODE Restriction in effect. Invalid owner of file to be read."); fp = NULL; } else { fp = fopen(path, mode); --- 874,883 ---- if (options & USE_PATH) { fp = php3_fopen_with_path(path, mode, GLOBAL(php3_ini)->include_path, NULL); } else { ! int cm=2; ! ! if(!strcmp(mode,"r") || !strcmp(mode,"r+")) cm=0; ! if (options & ENFORCE_SAFE_MODE && GLOBAL(php3_ini)->safe_mode && (!_php3_checkuid(path, cm))) { fp = NULL; } else { fp = fopen(path, mode); Index: php31/main/language-parser.y diff -c php31/main/language-parser.y:2.12 php31/main/language-parser.y:2.13 *** php31/main/language-parser.y:2.12 Sat Oct 17 16:45:45 1998 --- php31/main/language-parser.y Thu Oct 29 17:04:18 1998 *************** *** 31,37 **** */ ! /* $Id: language-parser.y,v 2.12 1998/10/17 20:45:45 shane Exp $ */ /* --- 31,37 ---- */ ! /* $Id: language-parser.y,v 2.13 1998/10/29 22:04:18 shane Exp $ */ /* *************** *** 169,175 **** --- 169,177 ---- int clean_module_resource(list_entry *le, int *resource_id) { if (le->type == *resource_id) { + #if DEBUG printf("Cleaning resource %d\n",*resource_id); + #endif return 1; } else { return 0; *************** *** 756,762 **** /*** Manhattan project ***/ /* Be able to call user-levle functions from C */ /* "A beer and serious lack of sleep do wonders" -- Zeev */ ! int call_user_function(HashTable *function_table, pval *object, pval *function_name, pval *retval, int param_count, pval *params[]) { pval *func; pval return_offset; --- 758,764 ---- /*** Manhattan project ***/ /* Be able to call user-levle functions from C */ /* "A beer and serious lack of sleep do wonders" -- Zeev */ ! PHPAPI int call_user_function(HashTable *function_table, pval *object, pval *function_name, pval *retval, int param_count, pval *params[]) { pval *func; pval return_offset; Index: php31/main/language-scanner.l diff -c php31/main/language-scanner.l:2.13 php31/main/language-scanner.l:2.14 *** php31/main/language-scanner.l:2.13 Sat Oct 17 14:19:48 1998 --- php31/main/language-scanner.l Thu Oct 29 17:04:19 1998 *************** *** 788,794 **** } ! <INITIAL>(([^<]|"<"[^?s<]){1,400})|"<s"|"<" { phplval->value.str.val = (char *) estrndup(yytext, yyleng); phplval->value.str.len = yyleng; phplval->type = IS_STRING; --- 788,794 ---- } ! <INITIAL>(([^<]|"<"[^?%s<]){1,400})|"<s"|"<" { phplval->value.str.val = (char *) estrndup(yytext, yyleng); phplval->value.str.len = yyleng; phplval->type = IS_STRING; *************** *** 816,821 **** --- 816,843 ---- } } + <INITIAL>"<%"("=")? { + if (GLOBAL(php3_ini)->asp_tags) { + if (!(GLOBAL(initialized) & INIT_ENVIRONMENT)) { + _php3_hash_environment(); + } + BEGIN(IN_PHP); + if (GLOBAL(php3_display_source)) { + BEGIN_COLOR(GLOBAL(php3_ini)->highlight_default); + html_puts(yytext,yyleng); + } + if (yyleng==3) { /* this tag is <%=, implicit echo */ + return PHP_ECHO; + } + } else { + phplval->value.str.val = (char *) estrndup(yytext, yyleng); + phplval->value.str.len = yyleng; + phplval->type = IS_STRING; + HANDLE_NEWLINES(yytext,yyleng); + return INLINE_HTML; + } + } + <INITIAL>"<?php"[ \n\r\t] { HANDLE_NEWLINE(yytext[yyleng-1]); if (!(GLOBAL(initialized) & INIT_ENVIRONMENT)) { *************** *** 938,944 **** } if (c==EOF) { ! php3_error(E_WARNING,"Unterminated comment starting line %d.\n",start_lineno); break; } else { HANDLE_NEWLINE(c); --- 960,966 ---- } if (c==EOF) { ! php3_error(E_WARNING,"Unterminated comment starting line %d.\n",php3_get_lineno(start_lineno)); break; } else { HANDLE_NEWLINE(c); *************** *** 954,959 **** --- 976,999 ---- END_COLOR(); } return ';'; /* implicit ';' at php-end tag */ + } + + <IN_PHP>"%>"([\n]|"\r\n")? { + HANDLE_NEWLINE(yytext[yyleng-1]); + if (GLOBAL(php3_ini)->asp_tags) { + BEGIN(INITIAL); + if (GLOBAL(php3_display_source)) { + html_puts(yytext,yyleng); + END_COLOR(); + } + return ';'; /* implicit ';' at php-end tag */ + } else { + phplval->value.str.val = (char *) estrndup(yytext,yyleng); + phplval->value.str.len = yyleng; + phplval->type = IS_STRING; + HANDLE_NEWLINES(yytext,yyleng); + return INLINE_HTML; + } } <IN_PHP>["] { Index: php31/main/php3_realpath.c diff -c php31/main/php3_realpath.c:1.2 php31/main/php3_realpath.c:1.3 *** php31/main/php3_realpath.c:1.2 Thu Aug 13 19:23:28 1998 --- php31/main/php3_realpath.c Thu Oct 29 17:04:19 1998 *************** *** 173,178 **** --- 173,180 ---- while((*workpos != '\\') && (*workpos != 0)) { *workpos++; } + /* Avoid double \ in the result */ + writepos--; } /* If it was a directory, append a slash */ *************** *** 183,189 **** #else /* WIN32|WINNT */ /* Look for .. */ if ((workpos[0] == '.') && (workpos[1] != 0)) { ! if ((workpos[1] == '.') && (workpos[2] == '/')) { /* One directory back */ /* Set pointers to right position */ workpos++; /* move to second '.' */ --- 185,191 ---- #else /* WIN32|WINNT */ /* Look for .. */ if ((workpos[0] == '.') && (workpos[1] != 0)) { ! if ((workpos[1] == '.') && (workpos[2] == '/') || (workpos[2] == 0))) { /* One directory back */ /* Set pointers to right position */ workpos++; /* move to second '.' */ *************** *** 195,204 **** while(*--writepos != '/') ; /* skip until previous '/' */ } } else { ! /* No special case, the name just started with a . */ ! /* Append */ ! while((*workpos != '/') && (*workpos != 0)) { ! *writepos++ = *workpos++; } } } else { --- 197,214 ---- while(*--writepos != '/') ; /* skip until previous '/' */ } } else { ! if (workpos[1] == '/') { ! /* Found a /./ skip it */ ! workpos++; ! /* move to '/' */ ! /* Avoid double / in the result */ ! writepos--; ! } else { ! /* No special case, the name just started with a . */ ! /* Append */ ! while((*workpos != '/') && (*workpos != 0)) { ! *writepos++ = *workpos++; ! } } } } else { Index: php31/main/safe_mode.c diff -c php31/main/safe_mode.c:2.3 php31/main/safe_mode.c:2.4 *** php31/main/safe_mode.c:2.3 Tue Sep 22 15:19:47 1998 --- php31/main/safe_mode.c Thu Oct 29 17:04:19 1998 *************** *** 26,32 **** | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> | +----------------------------------------------------------------------+ */ ! /* $Id: safe_mode.c,v 2.3 1998/09/22 19:19:47 shane Exp $ */ #ifdef THREAD_SAFE #include "tls.h" #endif --- 26,32 ---- | Authors: Rasmus Lerdorf <rasmus@lerdorf.on.ca> | +----------------------------------------------------------------------+ */ ! /* $Id: safe_mode.c,v 2.4 1998/10/29 22:04:19 shane Exp $ */ #ifdef THREAD_SAFE #include "tls.h" #endif *************** *** 77,83 **** if (mode<3) { ret = stat(fn,&sb); ! if (ret<0 && mode < 2) return(mode); if (ret>-1) { #if (WIN32|WINNT) && USE_NT_SPECIFIC uid=GetFileOwner((LPTSTR)fn); --- 77,86 ---- if (mode<3) { ret = stat(fn,&sb); ! if (ret<0 && mode < 2) { ! php3_error(E_WARNING,"Unable to access %s",fn); ! return(mode); ! } if (ret>-1) { #if (WIN32|WINNT) && USE_NT_SPECIFIC uid=GetFileOwner((LPTSTR)fn); *************** *** 109,127 **** #else ret = stat(fn,&sb); *s='/'; ! if (ret<0) return(0); duid = sb.st_uid; #endif } else { s = emalloc(MAXPATHLEN+1); ! if (!getcwd(s,MAXPATHLEN)) return(0); #if (WIN32|WINNT) && USE_NT_SPECIFIC duid=GetFileOwner((LPTSTR)fn); efree(s); #else ret = stat(s,&sb); efree(s); ! if (ret<0) return(0); duid = sb.st_uid; #endif } --- 112,139 ---- #else ret = stat(fn,&sb); *s='/'; ! if (ret<0) { ! php3_error(E_WARNING, "Unable to access %s",fn); ! return(0); ! } duid = sb.st_uid; #endif } else { s = emalloc(MAXPATHLEN+1); ! if (!getcwd(s,MAXPATHLEN)) { ! php3_error(E_WARNING, "Unable to access current working directory"); ! return(0); ! } #if (WIN32|WINNT) && USE_NT_SPECIFIC duid=GetFileOwner((LPTSTR)fn); efree(s); #else ret = stat(s,&sb); efree(s); ! if (ret<0) { ! php3_error(E_WARNING, "Unable to access %s",s); ! return(0); ! } duid = sb.st_uid; #endif } *************** *** 133,139 **** #else if (duid == _php3_getuid()) return(1); #endif ! return(0); } --- 145,154 ---- #else if (duid == _php3_getuid()) return(1); #endif ! else { ! php3_error(E_WARNING, "SAFE MODE Restriction in effect. The script whose uid is %ld is not allowed to access %s owned by uid %ld",uid,fn,duid); ! return (0); ! } } Index: php31/main/variables.c diff -c php31/main/variables.c:2.8 php31/main/variables.c:2.9 *** php31/main/variables.c:2.8 Sun Oct 11 09:11:56 1998 --- php31/main/variables.c Thu Oct 29 17:04:19 1998 *************** *** 29,35 **** */ ! /* $Id: variables.c,v 2.8 1998/10/11 13:11:56 zeev Exp $ */ #ifdef THREAD_SAFE #include "tls.h" --- 29,35 ---- */ ! /* $Id: variables.c,v 2.9 1998/10/29 22:04:19 shane Exp $ */ #ifdef THREAD_SAFE #include "tls.h" *************** *** 460,466 **** } else if (!(var=var_ptr->value.varptr.pvalue)) { /* the variable didn't parse properly, so it was obviously not set */ result->value.lval = 1; } else { - var = var_ptr->value.varptr.pvalue; pval_destructor(var _INLINE_TLS); var->value.str.val = undefined_variable_string; var->value.str.len=0; --- 460,465 ---- *************** *** 707,713 **** --- 706,726 ---- } } + /* CALLBACK functions to provide pointers to external modules + * that may need them. + */ + + PHPAPI HashTable *php3i_get_symbol_table(void) + { + TLS_VARS; + return &GLOBAL(symbol_table); + } + PHPAPI HashTable *php3i_get_function_table(void) + { + TLS_VARS; + return &GLOBAL(function_table); + } /* * Local variables: * tab-width: 4 Index: php31/main/variables.h diff -c php31/main/variables.h:2.5 php31/main/variables.h:2.6 *** php31/main/variables.h:2.5 Sat Sep 19 12:50:33 1998 --- php31/main/variables.h Thu Oct 29 17:04:19 1998 *************** *** 29,35 **** */ ! /* $Id: variables.h,v 2.5 1998/09/19 16:50:33 rasmus Exp $ */ #ifndef _VARIABLES_H --- 29,35 ---- */ ! /* $Id: variables.h,v 2.6 1998/10/29 22:04:19 shane Exp $ */ #ifndef _VARIABLES_H *************** *** 67,72 **** --- 67,74 ---- extern PHPAPI void var_reset(pval *var); extern PHPAPI void var_uninit(pval *var); + extern PHPAPI HashTable *php3i_get_symbol_table(void); + extern PHPAPI HashTable *php3i_get_function_table(void); extern void read_pointer_value(pval *result,pval *array_result INLINE_TLS); extern inline void get_regular_variable_pointer(pval *result, pval *varname INLINE_TLS); -- PHP Development Mailing List http://www.php.net/ To unsubscribe send an empty message to php-dev-unsubscribe@lists.php.net For help: php-dev-help@lists.php.net

« previous php.dev (#2083) next »