[PHP-DEV] CVS update: php31/main From: shane (php-dev <email protected>)
Date: 10/29/98

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 <email protected>> |
     +----------------------------------------------------------------------+
   */
! /* $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 <email protected>> |
     +----------------------------------------------------------------------+
   */
! /* $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 <email protected>> |
     +----------------------------------------------------------------------+
   */
! /* $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 <email protected>> |
     +----------------------------------------------------------------------+
   */
! /* $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 <email protected>
For help: php-dev-help <email protected>