Changeset 281 for trunk/src/kernel32
- Timestamp:
- Jul 7, 1999, 10:11:58 AM (26 years ago)
- Location:
- trunk/src/kernel32
- Files:
-
- 1 added
- 1 deleted
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/KERNEL32.DEF
r263 r281 1 ; $Id: KERNEL32.DEF,v 1.1 5 1999-07-04 11:44:03sandervl Exp $1 ; $Id: KERNEL32.DEF,v 1.16 1999-07-07 08:11:09 sandervl Exp $ 2 2 3 3 ;Created by BLAST for IBM's compiler … … 932 932 933 933 ;Used by tibfix page in exe (change ordinal in lx.cpp too!!) 934 Register ResourceUsage = _RegisterResourceUsage@20@1203934 RegisterExe = _RegisterExe@48 @1203 935 935 ;VMutex 936 936 enter__6VMutexFUl @1204 … … 939 939 __dt__6VMutexFv @1207 940 940 ;Used by tibfix page in dll (change ordinal in lx.cpp too!!) 941 DLLExitList = _DLLExitList@4 @1208942 RegisterDll = _RegisterDll@ 20@1209941 ;;; DLLExitList = _DLLExitList@4 @1208 942 RegisterDll = _RegisterDll@48 @1209 943 943 ;Unicode 944 944 UnicodeToAsciiString = _UnicodeToAsciiString@4 @1210 -
trunk/src/kernel32/except.asm
r223 r281 1 ; $Id: except.asm,v 1. 5 1999-06-26 18:24:50sandervl Exp $1 ; $Id: except.asm,v 1.6 1999-07-07 08:11:09 sandervl Exp $ 2 2 3 3 ;/* … … 175 175 SetFS endp 176 176 177 PUBLIC SetReturnFS 178 SetReturnFS proc near 179 push fs 180 mov eax, [esp+8] 181 mov fs, eax 182 pop eax 183 ret 184 SetReturnFS endp 185 177 186 PUBLIC getSS 178 187 getSS proc near -
trunk/src/kernel32/makefile
r278 r281 1 # $Id: makefile,v 1.1 1 1999-07-06 15:48:48 phallerExp $1 # $Id: makefile,v 1.12 1999-07-07 08:11:10 sandervl Exp $ 2 2 3 3 # … … 69 69 pefile.OBJ \ 70 70 winimgres.OBJ \ 71 tls.obj \71 wintls.obj \ 72 72 async.OBJ \ 73 73 fileio.obj \ … … 125 125 $(PDWIN32_INCLUDE)\unicode.h 126 126 127 tls.obj: tls.cpp 127 wintls.obj: wintls.cpp $(PDWIN32_INCLUDE)\winimage.h $(PDWIN32_INCLUDE)\winexe.h $(PDWIN32_INCLUDE)\windll.h 128 128 129 129 fileio.obj: fileio.cpp \ … … 133 133 .\thread.cpp \ 134 134 $(PDWIN32_INCLUDE)\wprocess.h \ 135 $(PDWIN32_INCLUDE)\winimage.h $(PDWIN32_INCLUDE)\winexe.h $(PDWIN32_INCLUDE)\windll.h \ 135 136 thread.h 136 137 -
trunk/src/kernel32/thread.cpp
r126 r281 1 /* $Id: thread.cpp,v 1. 6 1999-06-20 10:55:36sandervl Exp $ */1 /* $Id: thread.cpp,v 1.7 1999-07-07 08:11:10 sandervl Exp $ */ 2 2 3 3 /* … … 14 14 #include "thread.h" 15 15 #include "except.h" 16 #include "misc.h"16 #include <misc.h> 17 17 #include <wprocess.h> 18 #include <windll.h> 19 #include <winexe.h> 18 20 19 21 static DWORD OPEN32API Win32ThreadProc(LPVOID lpData); … … 46 48 DWORD WIN32API GetCurrentThreadId() 47 49 { 48 dprintf(("GetCurrentThreadId\n")); 49 50 //// dprintf(("GetCurrentThreadId\n")); 50 51 return(O32_GetCurrentThreadId()); 51 52 } … … 121 122 exitcode)); 122 123 123 #ifdef WIN32_TIBSEL 124 Win32Dll::detachThreadFromAllDlls(); //send DLL_THREAD_DETACH message to all dlls 125 Win32Dll::tlsDetachThreadFromAllDlls(); //destroy TLS structures of all dlls 126 WinExe->tlsDetachThread(); //destroy TLS structure of main exe 124 127 DestroyTIB(); 125 #endif126 128 O32_ExitThread(exitcode); 127 129 } … … 153 155 WIN32THREADPROC winthread = me->pCallback; 154 156 LPVOID userdata = me->lpUserData; 157 DWORD rc; 155 158 156 159 delete me; //only called once … … 158 161 dprintf(("Win32ThreadProc %d\n", GetCurrentThreadId())); 159 162 160 #ifdef WIN32_TIBSEL161 163 TEB *winteb = (TEB *)InitializeTIB(); 162 164 if(winteb == NULL) { … … 170 172 thdb->entry_point = (void *)winthread; 171 173 thdb->entry_arg = (void *)userdata; 174 172 175 SetWin32TIB(); 173 #else 174 ReplaceExceptionHandler(); 175 #endif 176 return(winthread(userdata)); 176 WinExe->tlsAttachThread(); //setup TLS structure of main exe 177 Win32Dll::tlsAttachThreadToAllDlls(); //setup TLS structures of all dlls 178 Win32Dll::attachThreadToAllDlls(); //send DLL_THREAD_ATTACH message to all dlls 179 180 rc = winthread(userdata); 181 182 Win32Dll::detachThreadFromAllDlls(); //send DLL_THREAD_DETACH message to all dlls 183 Win32Dll::tlsDetachThreadFromAllDlls(); //destroy TLS structures of all dlls 184 WinExe->tlsDetachThread(); //destroy TLS structure of main exe 185 DestroyTIB(); 186 return rc; 177 187 } 178 188 //****************************************************************************** -
trunk/src/kernel32/windll.cpp
r135 r281 1 /* $Id: windll.cpp,v 1. 6 1999-06-20 17:54:53sandervl Exp $ */1 /* $Id: windll.cpp,v 1.7 1999-07-07 08:11:10 sandervl Exp $ */ 2 2 3 3 /* … … 22 22 #include <iostream.h> 23 23 #include <fstream.h> 24 #include "misc.h" 25 #include "nameid.h" 26 #include "win32type.h" 27 #include "pefile.h" 28 #include "windll.h" 24 #include <misc.h> 25 #include <nameid.h> 26 #include <win32type.h> 27 #include <pefile.h> 28 #include <windll.h> 29 #include <wprocess.h> 29 30 #include "cio.h" 30 31 #include "os2util.h" … … 131 132 if(errorState == NO_ERROR && !fUnloaded) 132 133 { 133 if(!fSystemDll) { 134 detachProcess(); 135 } 134 detachProcess(); 136 135 } 137 136 } … … 304 303 BOOL Win32Dll::attachProcess() 305 304 { 306 if(fSystemDll || fSkipEntryCalls || !fNativePEImage) 305 BOOL rc; 306 USHORT sel; 307 308 //Allocate TLS index for this module 309 tlsAlloc(); 310 tlsAttachThread(); //setup TLS (main thread) 311 312 if(fSystemDll || fSkipEntryCalls) { 313 dprintf(("attachProcess not required for dll %s", szModule)); 307 314 return(TRUE); 308 309 if(getenv("WIN32_IOPL2")) { 310 io_init1(); 311 } 312 return dllEntryPoint((ULONG)this, DLL_PROCESS_ATTACH, 0); 315 } 316 317 dprintf(("attachProcess to dll %s", szModule)); 318 319 sel = SetWin32TIB(); 320 rc = dllEntryPoint(hinstance, DLL_PROCESS_ATTACH, 0); 321 SetFS(sel); 322 return rc; 313 323 } 314 324 //****************************************************************************** 315 325 //****************************************************************************** 316 326 BOOL Win32Dll::detachProcess() 327 { 328 BOOL rc; 329 USHORT sel; 330 331 if(fSystemDll || fSkipEntryCalls) { 332 tlsDetachThread(); //destroy TLS (main thread) 333 return(TRUE); 334 } 335 336 dprintf(("detachProcess from dll %s", szModule)); 337 338 fUnloaded = TRUE; 339 sel = SetWin32TIB(); 340 rc = dllEntryPoint(hinstance, DLL_PROCESS_DETACH, 0); 341 SetFS(sel); 342 tlsDetachThread(); //destroy TLS (main thread) 343 return rc; 344 } 345 //****************************************************************************** 346 //****************************************************************************** 347 BOOL Win32Dll::attachThread() 317 348 { 318 349 if(fSystemDll || fSkipEntryCalls) 319 350 return(TRUE); 320 351 321 if(fNativePEImage) 322 return dllEntryPoint((ULONG)this, DLL_PROCESS_DETACH, 0); 323 else return dllEntryPoint((ULONG)this, DLL_PROCESS_ATTACH, 0); //reversed in converted code 324 } 325 //****************************************************************************** 326 //****************************************************************************** 327 BOOL Win32Dll::attachThread() 352 dprintf(("attachThread to dll %s", szModule)); 353 return dllEntryPoint(hinstance, DLL_THREAD_ATTACH, 0); 354 } 355 //****************************************************************************** 356 //****************************************************************************** 357 BOOL Win32Dll::detachThread() 328 358 { 329 359 if(fSystemDll || fSkipEntryCalls) 330 360 return(TRUE); 331 361 332 return dllEntryPoint((ULONG)this, DLL_THREAD_ATTACH, 0); 333 } 334 //****************************************************************************** 335 //****************************************************************************** 336 BOOL Win32Dll::detachThread() 337 { 338 if(fSystemDll || fSkipEntryCalls) 339 return(TRUE); 340 341 return dllEntryPoint((ULONG)this, DLL_THREAD_DETACH, 0); 362 dprintf(("attachThread from dll %s", szModule)); 363 return dllEntryPoint(hinstance, DLL_THREAD_DETACH, 0); 364 } 365 //****************************************************************************** 366 //Send DLL_THREAD_ATTACH message to all dlls for a new thread 367 //****************************************************************************** 368 void Win32Dll::attachThreadToAllDlls() 369 { 370 Win32Dll *dll = Win32Dll::head; 371 372 while(dll) { 373 dll->attachThread(); 374 dll = dll->getNext(); 375 } 376 } 377 //****************************************************************************** 378 //Send DLL_THREAD_DETACH message to all dlls for thread that's about to die 379 //****************************************************************************** 380 void Win32Dll::detachThreadFromAllDlls() 381 { 382 Win32Dll *dll = Win32Dll::head; 383 384 while(dll) { 385 dll->detachThread(); 386 dll = dll->getNext(); 387 } 388 } 389 //****************************************************************************** 390 //Setup TLS structure for all dlls for a new thread 391 //****************************************************************************** 392 void Win32Dll::tlsAttachThreadToAllDlls() 393 { 394 Win32Dll *dll = Win32Dll::head; 395 396 while(dll) { 397 dll->tlsAttachThread(); 398 dll = dll->getNext(); 399 } 400 } 401 //****************************************************************************** 402 //Destroy TLS structure for all dlls for a thread that's about to die 403 //****************************************************************************** 404 void Win32Dll::tlsDetachThreadFromAllDlls() 405 { 406 Win32Dll *dll = Win32Dll::head; 407 408 while(dll) { 409 dll->tlsDetachThread(); 410 dll = dll->getNext(); 411 } 342 412 } 343 413 //****************************************************************************** -
trunk/src/kernel32/winexe.cpp
r126 r281 1 /* $Id: winexe.cpp,v 1. 7 1999-06-20 10:55:36sandervl Exp $ */1 /* $Id: winexe.cpp,v 1.8 1999-07-07 08:11:10 sandervl Exp $ */ 2 2 3 3 /* … … 87 87 88 88 fExeStarted = TRUE; 89 90 //Allocate TLS index for this module 91 tlsAlloc(); 92 tlsAttachThread(); //setup TLS (main thread) 93 89 94 SetWin32TIB(); 90 95 rc = ((WIN32EXEENTRY)entryPoint)(); -
trunk/src/kernel32/winimage.cpp
r120 r281 1 /* $Id: winimage.cpp,v 1. 4 1999-06-19 10:54:43sandervl Exp $ */1 /* $Id: winimage.cpp,v 1.5 1999-07-07 08:11:10 sandervl Exp $ */ 2 2 3 3 /* … … 60 60 nrNameExports(0), nrOrdExports(0), nameexports(NULL), ordexports(NULL), 61 61 szFileName(NULL), NameTable(NULL), Win32Table(NULL), fullpath(NULL), 62 tlsAddress(0), tlsIndexAddr(0), tlsInitSize(0), tlsTotalSize(0), tlsCallBackAddr(0), tlsIndex(-1), 62 63 pResSection(NULL), pResDir(NULL), winres(NULL), VersionId(-1) 63 64 { … … 84 85 nrNameExports(0), nrOrdExports(0), nameexports(NULL), ordexports(NULL), 85 86 szFileName(NULL), NameTable(NULL), Win32Table(NULL), fullpath(NULL), 87 tlsAddress(0), tlsIndexAddr(0), tlsInitSize(0), tlsTotalSize(0), tlsCallBackAddr(0), tlsIndex(-1), 86 88 pResSection(NULL), pResDir(NULL), winres(NULL) 87 89 { -
trunk/src/kernel32/wprocess.cpp
r130 r281 1 /* $Id: wprocess.cpp,v 1.1 2 1999-06-20 12:46:09sandervl Exp $ */1 /* $Id: wprocess.cpp,v 1.13 1999-07-07 08:11:10 sandervl Exp $ */ 2 2 3 3 /* … … 45 45 TEB *InitializeTIB(BOOL fMainThread) 46 46 { 47 #ifdef WIN32_TIBSEL48 47 TEB *winteb; 49 48 THDB *thdb; … … 108 107 dprintf(("InitializeTIB: FS(%x):[0] = %x", GetFS(), QueryExceptionChain())); 109 108 return winteb; 110 #else111 return 0;112 #endif113 109 } 114 110 //****************************************************************************** … … 117 113 void DestroyTIB() 118 114 { 119 #ifdef WIN32_TIBSEL120 115 SHORT orgtibsel; 121 116 TEB *winteb; … … 141 136 TIBFlatPtr = NULL; 142 137 return; 143 #endif144 138 } 145 139 /******************************************************************************/ … … 147 141 void WIN32API RestoreOS2TIB() 148 142 { 149 #ifdef WIN32_TIBSEL150 143 SHORT orgtibsel; 151 144 TEB *winteb; … … 160 153 SetFS(orgtibsel); 161 154 } 162 #endif163 155 } 164 156 /******************************************************************************/ 165 157 /******************************************************************************/ 166 void WIN32API SetWin32TIB() 167 { 168 #ifdef WIN32_TIBSEL 158 USHORT WIN32API SetWin32TIB() 159 { 169 160 SHORT win32tibsel; 170 161 TEB *winteb; … … 177 168 178 169 //Restore our win32 FS selector 179 SetFS(win32tibsel);170 return SetReturnFS(win32tibsel); 180 171 } 181 172 else DebugInt3(); 182 #endif 173 174 return 0; 183 175 } 184 176 /******************************************************************************/ 185 //SvL: 4-10-'98: Put in separate procedure, as ICC changes FS:0 when there 186 // are new or delete calls present. 187 //****************************************************************************** 188 void RegisterExe(LONG Win32TableId, LONG NameTableId, LONG VersionResId, 189 LONG Pe2lxVersion, HINSTANCE hinstance) 177 //****************************************************************************** 178 void WIN32API RegisterExe(WIN32EXEENTRY EntryPoint, PIMAGE_TLS_CALLBACK *TlsCallbackAddr, 179 LPDWORD TlsIndexAddr, ULONG TlsInitSize, 180 ULONG TlsTotalSize, LPVOID TlsAddress, 181 LONG Win32TableId, LONG NameTableId, LONG VersionResId, 182 LONG Pe2lxVersion, HINSTANCE hinstance, ULONG dwReserved) 190 183 { 191 184 if(WinExe != NULL) //should never happen 192 185 delete(WinExe); 193 186 187 CheckVersion(Pe2lxVersion, OS2GetDllName(hinstance)); 188 189 if(getenv("WIN32_IOPL2")) { 190 io_init1(); 191 } 192 194 193 //SvL: Use 0 instead of the real instance handle (for resource lookup) 195 194 Win32Exe *winexe = new Win32Exe(0, NameTableId, Win32TableId); 195 196 196 if(winexe) { 197 winexe->setVersionId(VersionResId); 198 winexe->setOS2InstanceHandle(hinstance); 197 dprintf(("RegisterExe Win32TableId = %x", Win32TableId)); 198 dprintf(("RegisterExe NameTableId = %x", NameTableId)); 199 dprintf(("RegisterExe VersionResId = %x", VersionResId)); 200 dprintf(("RegisterExe Pe2lxVersion = %x", Pe2lxVersion)); 201 202 winexe->setVersionId(VersionResId); 203 winexe->setOS2InstanceHandle(hinstance); 204 winexe->setEntryPoint((ULONG)EntryPoint); 205 winexe->setTLSAddress(TlsAddress); 206 winexe->setTLSInitSize(TlsInitSize); 207 winexe->setTLSTotalSize(TlsTotalSize); 208 winexe->setTLSIndexAddr(TlsIndexAddr); 209 winexe->setTLSCallBackAddr(TlsCallbackAddr); 210 211 char *modname = getenv("WIN32MODULE"); 212 213 if(modname != NULL) 214 { 215 dprintf(("Set full path for exe to %s", modname)); 216 winexe->setFullPath(modname); 217 } 218 winexe->start(); 199 219 } 200 220 else { 201 eprintf(("Win32Exe creation failed!\n")); 202 DebugInt3(); 203 } 204 205 char *modname = getenv("WIN32MODULE"); 206 207 if(modname != NULL) 208 { 209 dprintf(("Set full path for exe to %s", modname)); 210 winexe->setFullPath(modname); 211 } 212 213 fExeStarted = TRUE; 214 } 215 //****************************************************************************** 216 //****************************************************************************** 217 VOID WIN32API RegisterResourceUsage(LONG Win32TableId, LONG NameTableId, 218 LONG VersionResId, LONG Pe2lxVersion, 219 HINSTANCE hinstance) 220 { 221 SetWin32TIB(); 222 223 if(getenv("WIN32_IOPL2")) { 224 io_init1(); 225 } 226 dprintf(("RegisterResourceUsage %X resid = %d\n", hinstance, VersionResId)); 227 228 CheckVersion(Pe2lxVersion, OS2GetDllName(hinstance)); 229 230 RegisterExe(Win32TableId, NameTableId, VersionResId, Pe2lxVersion, hinstance); 231 232 dprintf(("RegisterResourceUsage: FS(%x):[0] = %x", GetFS(), QueryExceptionChain())); 233 } 234 //****************************************************************************** 235 //****************************************************************************** 236 void CreateDll(LONG Win32TableId, LONG NameTableId, LONG VersionResId, 237 HINSTANCE hinstance, WIN32DLLENTRY pfnDllEntry) 238 { 221 eprintf(("Win32Exe creation failed!\n")); 222 DebugInt3(); 223 return; 224 } 225 } 226 //****************************************************************************** 227 //****************************************************************************** 228 ULONG WIN32API RegisterDll(WIN32DLLENTRY pfnDllEntry, PIMAGE_TLS_CALLBACK *TlsCallbackAddr, 229 LPDWORD TlsIndexAddr, ULONG TlsInitSize, 230 ULONG TlsTotalSize, LPVOID TlsAddress, 231 LONG Win32TableId, LONG NameTableId, LONG VersionResId, 232 LONG Pe2lxVersion, HINSTANCE hinstance, ULONG dwAttachType) 233 { 234 char *name; 235 239 236 Win32Dll *winmod = Win32Dll::findModule(hinstance); 240 241 if(winmod != NULL) { 242 //dll manually loaded by PE loader (Win32Dll::init) 243 winmod->OS2DllInit(hinstance, NameTableId, Win32TableId, pfnDllEntry); 244 return; 245 } 246 247 //converted win32 dll loaded by OS/2 loader 248 winmod = new Win32Dll(hinstance, NameTableId, Win32TableId, pfnDllEntry); 249 if(winmod == NULL) { 250 eprintf(("Failed to allocate module object!\n")); 251 DebugInt3(); 252 return; 253 } 254 //SvL: 19-8-'98 255 winmod->AddRef(); 256 winmod->setVersionId(VersionResId); 257 } 258 //****************************************************************************** 259 //****************************************************************************** 260 VOID WIN32API RegisterDll(LONG Win32TableId, LONG NameTableId, 261 LONG VersionResId, LONG Pe2lxVersion, 262 HINSTANCE hinstance) 263 { 264 WIN32DLLENTRY pfnDllEntry; 265 char *name; 266 267 pfnDllEntry = (WIN32DLLENTRY)GetDllEntryPoint(); //== return address 268 269 if(getenv("WIN32_IOPL2")) { 270 io_init1(); 271 } 272 name = OS2GetDllName(hinstance); 273 CheckVersion(Pe2lxVersion, name); 274 275 dprintf(("RegisterDll %X %s\n", hinstance, name)); 276 277 CreateDll(Win32TableId, NameTableId, VersionResId, hinstance, pfnDllEntry); 278 279 /* @@@PH 1998/03/17 console devices initialization */ 280 iConsoleDevicesRegister(); 281 282 SetWin32TIB(); 283 dprintf(("RegisterDll: FS = %x", GetFS())); 237 if(dwAttachType == 0) 238 { //Process attach 239 if(getenv("WIN32_IOPL2")) { 240 io_init1(); 241 } 242 name = OS2GetDllName(hinstance); 243 CheckVersion(Pe2lxVersion, name); 244 245 dprintf(("RegisterDll %X %s reason %d\n", hinstance, name, dwAttachType)); 246 dprintf(("RegisterDll Win32TableId = %x", Win32TableId)); 247 dprintf(("RegisterDll NameTableId = %x", NameTableId)); 248 dprintf(("RegisterDll VersionResId = %x", VersionResId)); 249 dprintf(("RegisterDll Pe2lxVersion = %x", Pe2lxVersion)); 250 251 if(winmod != NULL) { 252 //dll manually loaded by PE loader (Win32Dll::init) 253 winmod->OS2DllInit(hinstance, NameTableId, Win32TableId, pfnDllEntry); 254 } 255 else { 256 //converted win32 dll loaded by OS/2 loader 257 winmod = new Win32Dll(hinstance, NameTableId, Win32TableId, pfnDllEntry); 258 if(winmod == NULL) { 259 eprintf(("Failed to allocate module object!\n")); 260 DebugInt3(); 261 return 0; //fail dll load 262 } 263 } 264 winmod->setTLSAddress(TlsAddress); 265 winmod->setTLSInitSize(TlsInitSize); 266 winmod->setTLSTotalSize(TlsTotalSize); 267 winmod->setTLSIndexAddr(TlsIndexAddr); 268 winmod->setTLSCallBackAddr(TlsCallbackAddr); 269 270 /* @@@PH 1998/03/17 console devices initialization */ 271 iConsoleDevicesRegister(); 272 273 //SvL: 19-8-'98 274 winmod->AddRef(); 275 winmod->setVersionId(VersionResId); 276 277 winmod->attachProcess(); 278 } 279 else {//process detach 280 if(winmod != NULL && !fFreeLibrary) { 281 return 0; //don't unload (OS/2 dll unload bug) 282 } 283 //Runtime environment could already be gone, so don't do this 284 // dprintf(("KERNEL32: Dll Removed by FreeLibrary or ExitProcess\n")); 285 } 286 return 1; //success 284 287 } 285 288 //****************************************************************************** … … 294 297 } 295 298 return; 296 }297 //******************************************************************************298 //Called when a dll is detached (either at process exit or when FreeLibrary is called)299 //******************************************************************************300 BOOL WIN32API DLLExitList(HINSTANCE hInstance)301 {302 // dprintf(("DLLExitList"));303 Win32Dll *winmod = Win32Dll::findModule(hInstance);304 305 if(winmod == NULL) {//probably called after we manually unloaded it in ExitProcess306 return(1); //remove it from memory307 }308 dprintf(("DllExitList for %s (%X)\n", OS2GetDllName(winmod->getInstanceHandle()), winmod->getInstanceHandle()));309 delete(winmod);310 311 if(fFreeLibrary) {312 dprintf(("KERNEL32: DLLExitList Ditched by FreeLibrary\n"));313 return(1); //remove it as we no longer need it314 }315 return(0); //don't remove it (OS/2 can unload them at process exit in the wrong order!)316 299 } 317 300 //****************************************************************************** … … 513 496 514 497 dprintf(("KERNEL32: GetCommandLine %s\n", cmdline)); 515 #ifdef WIN32_TIBSEL516 498 dprintf(("KERNEL32: FS = %x\n", GetFS())); 517 #else518 //SvL: Replace original startup code exception handler519 ReplaceExceptionHandler();520 #endif521 499 return(cmdline); 522 500 } … … 528 506 char *asciicmdline = NULL; 529 507 530 #ifdef WIN32_TIBSEL531 508 dprintf(("KERNEL32: FS = %x\n", GetFS())); 532 #else533 //SvL: Replace original startup code exception handler534 ReplaceExceptionHandler();535 #endif536 509 537 510 if(UnicodeCmdLine)
Note:
See TracChangeset
for help on using the changeset viewer.