[PHP-DEV] CVS update: php31/ext/odbc From: shane (php-dev <email protected>)
Date: 08/25/98

Date: Tuesday August 25, 1998 @ 23:14
Author: shane

Update of /repository/php31/ext/odbc
In directory asf:/u2/tmp/cvs-serv29256/ext/odbc

Modified Files:
        unified_odbc.c
Log Message:
overwrite odbc. it works again.

Index: php31/ext/odbc/unified_odbc.c
diff -c php31/ext/odbc/unified_odbc.c:2.2 php31/ext/odbc/unified_odbc.c:2.3
*** php31/ext/odbc/unified_odbc.c:2.2 Tue Aug 11 14:22:32 1998
--- php31/ext/odbc/unified_odbc.c Tue Aug 25 23:14:19 1998
***************
*** 34,48 ****
  #ifdef THREAD_SAFE
  #include "tls.h"
  #endif
! #ifndef WIN32
  #include "config.h"
  #include "build-defs.h"
  #endif
  #include <fcntl.h>
  
- #ifdef COMPILE_DL
- #include "../phpdl.h"
- #endif
  #include "php.h"
  #include "internal_functions.h"
  #include "ext/standard/php3_string.h"
--- 34,45 ----
  #ifdef THREAD_SAFE
  #include "tls.h"
  #endif
! #ifndef MSVC5
  #include "config.h"
  #include "build-defs.h"
  #endif
  #include <fcntl.h>
  
  #include "php.h"
  #include "internal_functions.h"
  #include "ext/standard/php3_string.h"
***************
*** 54,61 ****
  
  #ifdef THREAD_SAFE
  
! MUTEX_T UODBC_MUTEX;
! TLS_T UODBC_TLS;
  static int numthreads=0;
  
  typedef struct UODBC_GLOBAL_STRUCT {
--- 51,58 ----
  
  #ifdef THREAD_SAFE
  
! void *UODBC_MUTEX;
! DWORD UODBC_TLS;
  static int numthreads=0;
  
  typedef struct UODBC_GLOBAL_STRUCT {
***************
*** 65,72 ****
  #define UODBC_GLOBAL(a) UODBC_GLOBALS->a
  
  #define UODBC_TLS_VARS \
! UODBC_GLOBAL_STRUCT *UODBC_GLOBALS;\
! PHP3_TLS_GET(UODBC_TLS,UODBC_GLOBALS);
  
  #else
  UODBC_MODULE PHP3_UODBC_MODULE;
--- 62,68 ----
  #define UODBC_GLOBAL(a) UODBC_GLOBALS->a
  
  #define UODBC_TLS_VARS \
! UODBC_GLOBAL_STRUCT *UODBC_GLOBALS = TlsGetValue(UODBC_TLS);
  
  #else
  UODBC_MODULE PHP3_UODBC_MODULE;
***************
*** 122,131 ****
  };
  
  
! #ifdef COMPILE_DL
! DLEXPORT php3_module_entry *get_module() { return &UODBC_MODULE_ENTRY; };
  
! #if (WIN32|WINNT)
  BOOL WINAPI DllMain(HANDLE hModule,
                        DWORD ul_reason_for_call,
                        LPVOID lpReserved)
--- 118,129 ----
  };
  
  
! #if COMPILE_DL
! php3_module_entry *get_module() { return &UODBC_MODULE_ENTRY; };
! #if (WIN32|WINNT) && defined(THREAD_SAFE)
  
! /*NOTE: You should have an odbc.def file where you
! export DllMain*/
  BOOL WINAPI DllMain(HANDLE hModule,
                        DWORD ul_reason_for_call,
                        LPVOID lpReserved)
***************
*** 210,230 ****
  
  int PHP3_MINIT_UODBC(INIT_FUNC_ARGS)
  {
  #ifdef THREAD_SAFE
          UODBC_GLOBAL_STRUCT *UODBC_GLOBALS;
! PHP3_MUTEX_ALLOC(UODBC_MUTEX);
! PHP3_MUTEX_LOCK(UODBC_MUTEX);
          numthreads++;
          if (numthreads==1){
! if (!PHP3_TLS_PROC_STARTUP(UODBC_TLS)){
! PHP3_MUTEX_UNLOCK(UODBC_MUTEX);
! PHP3_MUTEX_FREE(UODBC_MUTEX);
! return 0;
! }
! }
! PHP3_MUTEX_UNLOCK(UODBC_MUTEX);
! if(!PHP3_TLS_THREAD_INIT(UODBC_TLS,UODBC_GLOBALS,UODBC_GLOBAL_STRUCT))
                  return 0;
  #endif
          SQLAllocEnv(&UODBC_GLOBAL(PHP3_UODBC_MODULE).henv);
          
--- 208,237 ----
  
  int PHP3_MINIT_UODBC(INIT_FUNC_ARGS)
  {
+ #ifdef SQLANY_BUG
+ HDBC foobar;
+ RETCODE rc;
+ #endif
  #ifdef THREAD_SAFE
          UODBC_GLOBAL_STRUCT *UODBC_GLOBALS;
! #if !COMPILE_DL
! #if WIN32|WINNT
! CREATE_MUTEX(UODBC_MUTEX,"UODBC_TLS");
! #endif
! #endif
! #if !COMPILE_DL
! SET_MUTEX(UODBC_MUTEX);
          numthreads++;
          if (numthreads==1){
! if ((UODBC_TLS=TlsAlloc())==0xFFFFFFFF){
! FREE_MUTEX(UODBC_MUTEX);
                  return 0;
+ }}
+ FREE_MUTEX(UODBC_MUTEX);
+ #endif
+ UODBC_GLOBALS =
+ (UODBC_GLOBAL_STRUCT *) LocalAlloc(LPTR, sizeof(UODBC_GLOBAL_STRUCT));
+ TlsSetValue(UODBC_TLS, (void *) UODBC_GLOBALS);
  #endif
          SQLAllocEnv(&UODBC_GLOBAL(PHP3_UODBC_MODULE).henv);
          
***************
*** 259,264 ****
--- 266,289 ----
          UODBC_GLOBAL(PHP3_UODBC_MODULE).le_pconn =
                  register_list_destructors(NULL, _CLOSE_UODBC_PCONNECTION);
  
+ #ifdef SQLANY_BUG
+ /* Make a dumb connection to avoid crash on SQLFreeEnv(),
+ * then release it immediately.
+ * This is required for SQL Anywhere 5.5.00 on QNX 4.24 at least.
+ * The SQLANY_BUG should be defined in CFLAGS.
+ */
+ if ( SQLAllocConnect(UODBC_GLOBAL(PHP3_UODBC_MODULE).henv, &foobar) != SQL_SUCCESS )
+ UODBC_SQL_ERROR(SQL_NULL_HDBC, SQL_NULL_HSTMT, "SQLAllocConnect");
+ else
+ {
+ rc = SQLConnect(foobar, UODBC_GLOBAL(PHP3_UODBC_MODULE).defDB, SQL_NTS, UODBC_GLOBAL(PHP3_UODBC_MODULE).defUser,
+ SQL_NTS, UODBC_GLOBAL(PHP3_UODBC_MODULE).defPW, SQL_NTS);
+ if(rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
+ SQLDisconnect( foobar );
+ SQLFreeConnect( foobar );
+ }
+ #endif
+
          return SUCCESS;
  }
  
***************
*** 270,293 ****
          UODBC_GLOBAL(PHP3_UODBC_MODULE).defConn = -1;
          UODBC_GLOBAL(PHP3_UODBC_MODULE).num_links =
                          UODBC_GLOBAL(PHP3_UODBC_MODULE).num_persistent;
! UODBC_GLOBAL(PHP3_UODBC_MODULE).defaultlrl = 0;
! UODBC_GLOBAL(PHP3_UODBC_MODULE).defaultbinmode = 0;
          return SUCCESS;
  }
  
  int PHP3_MSHUTDOWN_UODBC(void)
  {
! UODBC_TLS_VARS;
          SQLFreeEnv(UODBC_GLOBAL(PHP3_UODBC_MODULE).henv);
  #ifdef THREAD_SAFE
! PHP3_TLS_THREAD_FREE(UODBC_GLOBALS);
! PHP3_MUTEX_LOCK(UODBC_MUTEX);
          numthreads--;
          if (!numthreads) {
! PHP3_TLS_PROC_SHUTDOWN(UODBC_TLS);
          }
! PHP3_MUTEX_UNLOCK(UODBC_MUTEX);
! PHP3_MUTEX_FREE(UODBC_MUTEX);
  #endif
          return SUCCESS;
  }
--- 295,332 ----
          UODBC_GLOBAL(PHP3_UODBC_MODULE).defConn = -1;
          UODBC_GLOBAL(PHP3_UODBC_MODULE).num_links =
                          UODBC_GLOBAL(PHP3_UODBC_MODULE).num_persistent;
! if (cfg_get_long(ODBC_INI_DEFAULTLRL, &UODBC_GLOBAL(PHP3_UODBC_MODULE).defaultlrl)
! == FAILURE){
! UODBC_GLOBAL(PHP3_UODBC_MODULE).defaultlrl = 4096;
! }
! if (cfg_get_long(ODBC_INI_DEFAULTBINMODE, &UODBC_GLOBAL(PHP3_UODBC_MODULE).defaultbinmode) == FAILURE){
! UODBC_GLOBAL(PHP3_UODBC_MODULE).defaultbinmode = 1;
! }
          return SUCCESS;
  }
  
  int PHP3_MSHUTDOWN_UODBC(void)
  {
! #ifdef THREAD_SAFE
! UODBC_GLOBAL_STRUCT *UODBC_GLOBALS;
! UODBC_GLOBALS = TlsGetValue(UODBC_TLS);
! #endif
          SQLFreeEnv(UODBC_GLOBAL(PHP3_UODBC_MODULE).henv);
  #ifdef THREAD_SAFE
! if (UODBC_GLOBALS != 0) {
! LocalFree((HLOCAL) UODBC_GLOBALS);
! }
! #if !COMPILE_DL
! SET_MUTEX(UODBC_MUTEX);
          numthreads--;
          if (!numthreads) {
! if (!TlsFree(UODBC_TLS)) {
! FREE_MUTEX(UODBC_MUTEX);
! return 0;
! }
          }
! FREE_MUTEX(UODBC_MUTEX);
! #endif
  #endif
          return SUCCESS;
  }
***************
*** 524,530 ****
                          case SQL_TIMESTAMP:
                                  result->values[i].value = (char *)emalloc(27);
                                  SQLBindCol(result->stmt, (UWORD)(i+1), SQL_C_CHAR, result->values[i].value,
! 27, &result->values[i].vallen);
                                  break;
  #endif /* HAVE_ADABAS */
                          default:
--- 563,569 ----
                          case SQL_TIMESTAMP:
                                  result->values[i].value = (char *)emalloc(27);
                                  SQLBindCol(result->stmt, (UWORD)(i+1), SQL_C_CHAR, result->values[i].value,
! 27, &result->values[i].vallen);
                                  break;
  #endif /* HAVE_ADABAS */
                          default:
***************
*** 1370,1376 ****
          UWORD RowStatus[1];
  #endif
  #if !defined(COMPILE_DL) && defined(THREAD_SAFE)
! TLS_VARS;
  #endif
  
          numArgs = ARG_COUNT(ht);
--- 1409,1415 ----
          UWORD RowStatus[1];
  #endif
  #if !defined(COMPILE_DL) && defined(THREAD_SAFE)
! TLS_VARS
  #endif
  
          numArgs = ARG_COUNT(ht);

--
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>