From: KJK::Hyperion Date: Fri, 17 May 2002 02:04:39 +0000 (+0000) Subject: Temporary code for debugging purposes X-Git-Tag: backups/DBXSL@12427~101 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=69ca37d69758324f4357b094865ae6b3c474869e;ds=sidebyside Temporary code for debugging purposes svn path=/trunk/; revision=2962 --- diff --git a/posix/lib/psxdll/misc/main.c b/posix/lib/psxdll/misc/main.c index 37e4493e9c7..04b8db26cda 100644 --- a/posix/lib/psxdll/misc/main.c +++ b/posix/lib/psxdll/misc/main.c @@ -1,4 +1,4 @@ -/* $Id: main.c,v 1.3 2002/03/11 20:48:25 hyperion Exp $ +/* $Id: main.c,v 1.4 2002/05/17 02:04:39 hyperion Exp $ */ /* * COPYRIGHT: See COPYING in the top level directory @@ -10,30 +10,139 @@ * 27/12/2001: Created */ +#include +#include #include +#include #include +#include +#include -#define DLL_PROCESS_ATTACH 1 -#define DLL_THREAD_ATTACH 2 -#define DLL_THREAD_DETACH 3 -#define DLL_PROCESS_DETACH 0 +#define DLL_PROCESS_ATTACH 1 +#define DLL_THREAD_ATTACH 2 +#define DLL_THREAD_DETACH 3 +#define DLL_PROCESS_DETACH 0 -int __stdcall DllMain(void *pDllInstance, unsigned long int nReason, void *pUnknown) +/* WARNING: PRELIMINARY CODE FOR DEBUGGING PURPOSES ONLY - DO NOT CHANGE */ +static __PDX_PDATA __PdxPdata; +static WCHAR __tempPathBuf[32768]; +static char * __tempSelf = "-sh"; +static char * __tempArgv[2] = {0, 0}; + +VOID __PdxSetProcessData(__PPDX_PDATA NewPdata) +{ + memcpy(&__PdxPdata, NewPdata, sizeof(__PdxPdata)); +} + +__PPDX_PDATA __PdxGetProcessData(VOID) +{ + return &__PdxPdata; +} + +BOOL STDCALL DllMain(PVOID pDllInstance, DWORD nReason, PVOID pUnknown) { -#if 0 - if(nReason == DLL_PROCESS_ATTACH) + ULONG nJunk; + + switch(nReason) { - __PPDX_PDATA ppdProcessData = __PdxGetProcessData(); + /* process created, first thread created */ + case DLL_PROCESS_ATTACH: + { + __PPDX_TDATA ThreadData; + int i; + + INFO("new process and new thread created"); + + __PdxPdata.Spawned = 1; + + __PdxPdata.ArgCount = 1; + __tempArgv[0] = __tempSelf; + __PdxPdata.ArgVect = __tempArgv; + + __PdxPdata.NativePathBuffer.Length = 0; + __PdxPdata.NativePathBuffer.MaximumLength = sizeof(__tempPathBuf); + __PdxPdata.NativePathBuffer.Buffer = __tempPathBuf; + + INFO("about to initialize process data lock"); + RtlInitializeCriticalSection(&__PdxPdata.Lock); + + INFO("about to allocate TLS slot"); + __PdxPdata.TlsIndex = RtlFindClearBitsAndSet(NtCurrentPeb()->TlsBitmap, 1, 0); + + if(__PdxPdata.TlsIndex == -1) + { + DbgBreakPoint(); + NtRaiseHardError(STATUS_NO_MEMORY, 0, 0, 0, 1, (ULONG)&nJunk); + return (FALSE); + } + + INFO("allocated TLS slot %d", __PdxPdata.TlsIndex); + + INFO("about to allocate thread data"); + ThreadData = __malloc(sizeof(*ThreadData)); + + if(ThreadData == 0) + { + DbgBreakPoint(); + NtRaiseHardError(STATUS_NO_MEMORY, 0, 0, 0, 1, (ULONG)&nJunk); + return (FALSE); + } + + NtCurrentTeb()->TlsSlots[__PdxPdata.TlsIndex] = ThreadData; + + INFO("about to initialize file descriptors table"); + __fdtable_init(&__PdxPdata.FdTable); + + INFO("end of initialization"); + return (TRUE); + } + + /* process about to exit */ + case DLL_PROCESS_DETACH: + { + INFO("process about to exit"); + + INFO("about to deallocate thread data"); + __free(NtCurrentTeb()->TlsSlots[__PdxPdata.TlsIndex]); + + return (TRUE); + } + + /* thread created */ + case DLL_THREAD_ATTACH: + { + __PPDX_TDATA ThreadData; + + INFO("new thread created"); + + INFO("about to allocate thread data"); + ThreadData = __malloc(sizeof(*ThreadData)); + + if(ThreadData == 0) + { + DbgBreakPoint(); + NtRaiseHardError(STATUS_NO_MEMORY, 0, 0, 0, 1, (ULONG)&nJunk); + return (FALSE); + } + + NtCurrentTeb()->TlsSlots[__PdxPdata.TlsIndex] = ThreadData; + + return (TRUE); + } - if(ppdProcessData == 0) - WARN("this process doesn't have a process data block\n"); - else if(ppdProcessData->Spawned) + /* thread exited */ + case DLL_THREAD_DETACH: { - INFO("the process has been spawned\n"); + INFO("thread about to exit"); + + INFO("about to deallocate thread data"); + __free(NtCurrentTeb()->TlsSlots[__PdxPdata.TlsIndex]); + + return (TRUE); } } -#endif - return (1); + + return (FALSE); } /* EOF */