/********************************************************************* * raise (MSVCRT.@) */ int CDECL MSVCRT_raise(int sig) { MSVCRT___sighandler_t handler; TRACE("(%d)\n", sig); switch (sig) { case MSVCRT_SIGFPE: case MSVCRT_SIGILL: case MSVCRT_SIGSEGV: handler = sighandlers[sig]; if (handler == MSVCRT_SIG_DFL) MSVCRT__exit(3); if (handler != MSVCRT_SIG_IGN) { EXCEPTION_POINTERS **ep = (EXCEPTION_POINTERS**)MSVCRT___pxcptinfoptrs(), *old_ep; sighandlers[sig] = MSVCRT_SIG_DFL; old_ep = *ep; *ep = NULL; if (sig == MSVCRT_SIGFPE) ((float_handler)handler)(sig, MSVCRT__FPE_EXPLICITGEN); else handler(sig); *ep = old_ep; } break; case MSVCRT_SIGABRT: case MSVCRT_SIGINT: case MSVCRT_SIGTERM: case MSVCRT_SIGBREAK: handler = sighandlers[sig]; if (handler == MSVCRT_SIG_DFL) MSVCRT__exit(3); if (handler != MSVCRT_SIG_IGN) { sighandlers[sig] = MSVCRT_SIG_DFL; handler(sig); } break; default: return -1; } return 0; }
/********************************************************************* * __security_error_handler (MSVCR70.@) */ void CDECL __security_error_handler(int code, void *data) { if(security_error_handler) security_error_handler(code, data); else FIXME("(%d, %p) stub\n", code, data); MSVCRT__exit(3); }
static MSVCRT_intptr_t msvcrt_spawn(int flags, const MSVCRT_wchar_t* exe, MSVCRT_wchar_t* cmdline, MSVCRT_wchar_t* env, int use_path) { STARTUPINFOW si; PROCESS_INFORMATION pi; MSVCRT_wchar_t fullname[MAX_PATH]; TRACE("%x %s %s %s %d\n", flags, debugstr_w(exe), debugstr_w(cmdline), debugstr_w(env), use_path); if ((unsigned)flags > MSVCRT__P_DETACH) { *MSVCRT__errno() = MSVCRT_EINVAL; return -1; } msvcrt_search_executable(exe, fullname, use_path); memset(&si, 0, sizeof(si)); si.cb = sizeof(si); msvcrt_create_io_inherit_block(&si.cbReserved2, &si.lpReserved2); if (!CreateProcessW(fullname, cmdline, NULL, NULL, TRUE, flags == MSVCRT__P_DETACH ? DETACHED_PROCESS : 0, env, NULL, &si, &pi)) { msvcrt_set_errno(GetLastError()); MSVCRT_free(si.lpReserved2); return -1; } MSVCRT_free(si.lpReserved2); switch(flags) { case MSVCRT__P_WAIT: WaitForSingleObject(pi.hProcess, INFINITE); GetExitCodeProcess(pi.hProcess,&pi.dwProcessId); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return pi.dwProcessId; case MSVCRT__P_DETACH: CloseHandle(pi.hProcess); pi.hProcess = 0; /* fall through */ case MSVCRT__P_NOWAIT: case MSVCRT__P_NOWAITO: CloseHandle(pi.hThread); return (MSVCRT_intptr_t)pi.hProcess; case MSVCRT__P_OVERLAY: MSVCRT__exit(0); } return -1; /* can't reach here */ }
/********************************************************************* * _invalid_parameter_noinfo_noreturn (MSVCR80.@) */ void CDECL _invalid_parameter_noinfo_noreturn(void) { MSVCRT__invalid_parameter( NULL, NULL, NULL, 0, 0 ); MSVCRT__exit( STATUS_INVALID_CRUNTIME_PARAMETER ); }