dll.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000-2004 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation.
  5.    There are special exceptions to the terms and conditions of the GPL as it
  6.    is applied to this software. View the full text of the exception in file
  7.    EXCEPTIONS-CLIENT in the directory of this software distribution.
  8.    This program is distributed in the hope that it will be useful,
  9.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11.    GNU General Public License for more details.
  12.    You should have received a copy of the GNU General Public License
  13.    along with this program; if not, write to the Free Software
  14.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  15. /*
  16. ** Handling initialization of the dll library
  17. */
  18. #include <my_global.h>
  19. #include <my_sys.h>
  20. #include <my_pthread.h>
  21. static bool libmysql_inited=0;
  22. void libmysql_init(void)
  23. {
  24.   if (libmysql_inited)
  25.     return;
  26.   libmysql_inited=1;
  27.   my_init();
  28.   {
  29.     DBUG_ENTER("libmysql_init");
  30. #ifdef LOG_ALL
  31.     DBUG_PUSH("d:t:S:O,c::\tmp\libmysql.log");
  32. #else
  33.     if (getenv("LIBMYSQL_LOG") != NULL)
  34.       DBUG_PUSH(getenv("LIBMYSQL_LOG"));
  35. #endif
  36.     DBUG_VOID_RETURN;
  37.   }
  38. }
  39. #ifdef __WIN__
  40. static int inited=0,threads=0;
  41. HINSTANCE NEAR s_hModule; /* Saved module handle */
  42. DWORD main_thread;
  43. BOOL APIENTRY LibMain(HANDLE hInst,DWORD ul_reason_being_called,
  44.       LPVOID lpReserved)
  45. {
  46.   switch (ul_reason_being_called) {
  47.   case DLL_PROCESS_ATTACH: /* case of libentry call in win 3.x */
  48.     if (!inited++)
  49.     {
  50.       s_hModule=hInst;
  51.       libmysql_init();
  52.       main_thread=GetCurrentThreadId();
  53.     }
  54.     break;
  55.   case DLL_THREAD_ATTACH:
  56.     threads++;
  57.     my_thread_init();
  58.     break;
  59.   case DLL_PROCESS_DETACH: /* case of wep call in win 3.x */
  60.      if (!--inited) /* Safety */
  61.      {
  62.        /* my_thread_init() */ /* This may give extra safety */
  63.        my_end(0);
  64.      }
  65.     break;
  66.   case DLL_THREAD_DETACH:
  67.     /* Main thread will free by my_end() */
  68.     threads--;
  69.     if (main_thread != GetCurrentThreadId())
  70.       my_thread_end();
  71.     break;
  72.   default:
  73.     break;
  74.   } /* switch */
  75.   return TRUE;
  76.   UNREFERENCED_PARAMETER(lpReserved);
  77. } /* LibMain */
  78. int __stdcall DllMain(HANDLE hInst,DWORD ul_reason_being_called,LPVOID lpReserved)
  79. {
  80.   return LibMain(hInst,ul_reason_being_called,lpReserved);
  81. }
  82. #elif defined(WINDOWS)
  83. /****************************************************************************
  84. ** This routine is called by LIBSTART.ASM at module load time.  All it
  85. ** does in this sample is remember the DLL module handle. The module
  86. ** handle is needed if you want to do things like load stuff from the
  87. ** resource file (for instance string resources).
  88. ****************************************************************************/
  89. int _export FAR PASCAL libmain(HANDLE hModule,short cbHeapSize,
  90.        UCHAR FAR *lszCmdLine)
  91. {
  92.   s_hModule = hModule;
  93.   libmysql_init();
  94.   return TRUE;
  95. }
  96. #endif
  97. #ifdef OS2
  98. /*
  99.   This function is called automatically by _DLL_InitTerm
  100.   Every dll runtime enviroment is not tz enabled, so tzset()
  101.   must be called to enable TZ handling
  102.   Also timezone is fixed.
  103. */
  104. extern "C" unsigned long _System DllMain(unsigned long modhandle,
  105.                                         unsigned long flag)
  106. {
  107.    if (flag == 0) {
  108.       tzset(); /* Set tzname */
  109.       time_t currentTime = time(NULL);
  110.       struct tm *ts = localtime(&currentTime);
  111.       if (ts->tm_isdst > 0)
  112.          _timezone -= 3600;
  113.    }
  114. }
  115. #endif