⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 my_init.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
字号:
/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB This file is public domain and comes with NO WARRANTY of any kind */#include "mysys_priv.h"#include "my_static.h"#include "mysys_err.h"#include "m_ctype.h"#include <m_string.h>#include <m_ctype.h>#ifdef THREAD#include <my_pthread.h>#endif#ifdef HAVE_GETRUSAGE#include <sys/resource.h>/* extern int     getrusage(int, struct rusage *); */#endif#include <signal.h>#ifdef VMS#include <my_static.c>#include <m_ctype.h>#endif#ifdef __WIN__#ifdef _MSC_VER#include <locale.h>#include <crtdbg.h>#endifmy_bool have_tcpip=0;static void my_win_init(void);static my_bool win32_have_tcpip(void);static my_bool win32_init_tcp_ip();#else#define my_win_init()#endifstatic my_bool my_init_done=0;static ulong atoi_octal(const char *str){  long int tmp;  while (*str && isspace(*str))    str++;  str2int(str,	  (*str == '0' ? 8 : 10),		/* Octalt or decimalt */	  0, INT_MAX, &tmp);  return (ulong) tmp;}	/* Init my_sys functions and my_sys variabels */void my_init(void){  my_string str;  if (my_init_done)    return;  my_init_done=1;#ifdef THREAD#if defined(HAVE_PTHREAD_INIT)  pthread_init();			/* Must be called before DBUG_ENTER */#endif  my_thread_global_init();#if !defined( __WIN__) && !defined(OS2)  sigfillset(&my_signals);		/* signals blocked by mf_brkhant */#endif#endif /* THREAD */#ifdef UNIXWARE_7  (void) isatty(0);			/* Go around connect() bug in UW7 */#endif  {    DBUG_ENTER("my_init");    DBUG_PROCESS(my_progname ? my_progname : (char*) "unknown");    if (!home_dir)    {					/* Don't initialize twice */      my_win_init();      if ((home_dir=getenv("HOME")) != 0)	home_dir=intern_filename(home_dir_buff,home_dir);#ifndef VMS      /* Default creation of new files */      if ((str=getenv("UMASK")) != 0)	my_umask=(int) (atoi_octal(str) | 0600);	/* Default creation of new dir's */      if ((str=getenv("UMASK_DIR")) != 0)	my_umask_dir=(int) (atoi_octal(str) | 0700);#endif#ifdef VMS      init_ctype();			/* Stupid linker don't link _ctype.c */#endif      DBUG_PRINT("exit",("home: '%s'",home_dir));    }#ifdef __WIN__    win32_init_tcp_ip();#endif    DBUG_VOID_RETURN;  }} /* my_init */	/* End my_sys */void my_end(int infoflag){  FILE *info_file;  if (!(info_file=DBUG_FILE))    info_file=stderr;  if (infoflag & MY_CHECK_ERROR || info_file != stderr)  {					/* Test if some file is left open */    if (my_file_opened | my_stream_opened)    {      sprintf(errbuff[0],EE(EE_OPEN_WARNING),my_file_opened,my_stream_opened);      (void) my_message_no_curses(EE_OPEN_WARNING,errbuff[0],ME_BELL);      DBUG_PRINT("error",("%s",errbuff[0]));    }  }  free_charsets();  if (infoflag & MY_GIVE_INFO || info_file != stderr)  {#ifdef HAVE_GETRUSAGE    struct rusage rus;    if (!getrusage(RUSAGE_SELF, &rus))      fprintf(info_file,"\n\User time %.2f, System time %.2f\n\Maximum resident set size %ld, Integral resident set size %ld\n\Non-physical pagefaults %ld, Physical pagefaults %ld, Swaps %ld\n\Blocks in %ld out %ld, Messages in %ld out %ld, Signals %ld\n\Voluntary context switches %ld, Involuntary context switches %ld\n",	      (rus.ru_utime.tv_sec * SCALE_SEC +	       rus.ru_utime.tv_usec / SCALE_USEC) / 100.0,	      (rus.ru_stime.tv_sec * SCALE_SEC +	       rus.ru_stime.tv_usec / SCALE_USEC) / 100.0,	      rus.ru_maxrss, rus.ru_idrss,	      rus.ru_minflt, rus.ru_majflt,	      rus.ru_nswap, rus.ru_inblock, rus.ru_oublock,	      rus.ru_msgsnd, rus.ru_msgrcv, rus.ru_nsignals,	      rus.ru_nvcsw, rus.ru_nivcsw);#endif#if defined(MSDOS) && !defined(__WIN__)    fprintf(info_file,"\nRun time: %.1f\n",(double) clock()/CLOCKS_PER_SEC);#endif#if defined(SAFEMALLOC)    TERMINATE(stderr);		/* Give statistic on screen */#elif defined(__WIN__) && defined(_MSC_VER)   _CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );   _CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDERR );   _CrtSetReportMode( _CRT_ERROR, _CRTDBG_MODE_FILE );   _CrtSetReportFile( _CRT_ERROR, _CRTDBG_FILE_STDERR );   _CrtSetReportMode( _CRT_ASSERT, _CRTDBG_MODE_FILE );   _CrtSetReportFile( _CRT_ASSERT, _CRTDBG_FILE_STDERR );   _CrtCheckMemory();   _CrtDumpMemoryLeaks();#endif  }#ifdef THREAD  pthread_mutex_destroy(&THR_LOCK_keycache);  pthread_mutex_destroy(&THR_LOCK_malloc);  pthread_mutex_destroy(&THR_LOCK_open);  DBUG_POP();				/* Must be done before my_thread_end */  my_thread_end();  my_thread_global_end();#endif#ifdef __WIN__  if (have_tcpip);    WSACleanup( );#endif /* __WIN__ */    my_init_done=0;} /* my_end */#ifdef __WIN__/*  This code is specially for running MySQL, but it should work in  other cases too.  Inizializzazione delle variabili d'ambiente per Win a 32 bit.  Vengono inserite nelle variabili d'ambiente (utilizzando cosi'  le funzioni getenv e putenv) i valori presenti nelle chiavi  del file di registro:  HKEY_LOCAL_MACHINE\software\MySQL  Se la kiave non esiste nonn inserisce nessun valore*//* Crea la stringa d'ambiente */void setEnvString(char *ret, const char *name, const char *value){  DBUG_ENTER("setEnvString");  strxmov(ret, name,"=",value,NullS);  DBUG_VOID_RETURN ;}static void my_win_init(void){  HKEY	hSoftMysql ;  DWORD dimName = 256 ;  DWORD dimData = 1024 ;  DWORD dimNameValueBuffer = 256 ;  DWORD dimDataValueBuffer = 1024 ;  DWORD indexValue = 0 ;  long	retCodeEnumValue ;  char	NameValueBuffer[256] ;  char	DataValueBuffer[1024] ;  char	EnvString[1271] ;  const char *targetKey = "Software\\MySQL" ;  DBUG_ENTER("my_win_init");  setlocale(LC_CTYPE, "");             /* To get right sortorder */  /* apre la chiave HKEY_LOCAL_MACHINES\software\MySQL */  if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCTSTR)targetKey,0,		   KEY_READ,&hSoftMysql) != ERROR_SUCCESS)    DBUG_VOID_RETURN;  /*  ** Ne legge i valori e li inserisce  nell'ambiente  ** suppone che tutti i valori letti siano di tipo stringa + '\0'  ** Legge il valore con indice 0 e lo scarta  */  retCodeEnumValue = RegEnumValue(hSoftMysql, indexValue++,				  (LPTSTR)NameValueBuffer, &dimNameValueBuffer,				  NULL, NULL, (LPBYTE)DataValueBuffer,				  &dimDataValueBuffer) ;  while (retCodeEnumValue != ERROR_NO_MORE_ITEMS)  {    char *my_env;    /* Crea la stringa d'ambiente */    setEnvString(EnvString, NameValueBuffer, DataValueBuffer) ;    /* Inserisce i dati come variabili d'ambiente */    my_env=strdup(EnvString);  /* variable for putenv must be allocated ! */    putenv(EnvString) ;    dimNameValueBuffer = dimName ;    dimDataValueBuffer = dimData ;    retCodeEnumValue = RegEnumValue(hSoftMysql, indexValue++,				    NameValueBuffer, &dimNameValueBuffer,				    NULL, NULL, (LPBYTE)DataValueBuffer,				    &dimDataValueBuffer) ;  }  /* chiude la chiave */  RegCloseKey(hSoftMysql) ;  DBUG_VOID_RETURN ;}/*------------------------------------------------------------------** Name: CheckForTcpip| Desc: checks if tcpip has been installed on system** According to Microsoft Developers documentation the first registry** entry should be enough to check if TCP/IP is installed, but as expected** this doesn't work on all Win32 machines :(------------------------------------------------------------------*/#define TCPIPKEY  "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters"#define WINSOCK2KEY "SYSTEM\\CurrentControlSet\\Services\\Winsock2\\Parameters"#define WINSOCKKEY  "SYSTEM\\CurrentControlSet\\Services\\Winsock\\Parameters"static my_bool win32_have_tcpip(void){  HKEY hTcpipRegKey;  if (RegOpenKeyEx ( HKEY_LOCAL_MACHINE, TCPIPKEY, 0, KEY_READ,		      &hTcpipRegKey) != ERROR_SUCCESS)  {    if (RegOpenKeyEx ( HKEY_LOCAL_MACHINE, WINSOCK2KEY, 0, KEY_READ,		      &hTcpipRegKey) != ERROR_SUCCESS)    {      if (RegOpenKeyEx ( HKEY_LOCAL_MACHINE, WINSOCKKEY, 0, KEY_READ,			 &hTcpipRegKey) != ERROR_SUCCESS)	if (!getenv("HAVE_TCPIP") || have_tcpip)	/* Provide a workaround */	  return (FALSE);    }  }  RegCloseKey ( hTcpipRegKey);  return (TRUE);}static my_bool win32_init_tcp_ip(){  if (win32_have_tcpip())  {    WORD wVersionRequested = MAKEWORD( 2, 0 );    WSADATA wsaData; 	/* Be a good citizen: maybe another lib has already initialised 		sockets, so dont clobber them unless necessary */    if (WSAStartup( wVersionRequested, &wsaData ))    {      /* Load failed, maybe because of previously loaded	 incompatible version; try again */      WSACleanup( );      if (!WSAStartup( wVersionRequested, &wsaData ))	have_tcpip=1;    }    else    {      if (wsaData.wVersion != wVersionRequested)      {	/* Version is no good, try again */	WSACleanup( );	if (!WSAStartup( wVersionRequested, &wsaData ))	  have_tcpip=1;      }      else	have_tcpip=1;    }  }  return(0);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -