static void _mingw32_init_fmode () { /* Don't set the std file mode if the user hasn't set any value for it. */ if (_CRT_fmode) { _fmode = _CRT_fmode; /* * This overrides the default file mode settings for stdin, * stdout and stderr. At first I thought you would have to * test with isatty, but it seems that the DOS console at * least is smart enough to handle _O_BINARY stdout and * still display correctly. */ if (stdin) { _setmode (_fileno (stdin), _CRT_fmode); } if (stdout) { _setmode (_fileno (stdout), _CRT_fmode); } if (stderr) { _setmode (_fileno (stderr), _CRT_fmode); } } /* Now sync the dll _fmode to the one for this .exe. */ *__p__fmode() = _fmode; }
void fn1310E4E5(Eq_281 * fs) { word32 * eax_14 = fs->ptr0000; fs->ptr0000 = fp - 0x00000014; __set_app_type(); __p__fmode(); *eax_14 = 0x00000000; __p__commode(); *eax_14 = 0x00000000; word32 eax_51 = Mem49[_adjust_fdiv:word32]; fn1310E63E(); word32 esp_193 = fp + 0xFFFFFF68; if (eax_51 == 0x00000000) { __setusermatherr(); esp_193 = fp + 0xFFFFFF64; } fn1310E629(); Eq_318 * esp_59 = esp_193 - 0x00000004; esp_59->dw0000 = fp - 0x00000080; esp_59->dw0000 = fp - 0x00000080; _initterm(); esp_59->tFFFFFFF4 = fp - 0x00000070; esp_59->dwFFFFFFF0 = eax_51; esp_59->dwFFFFFFEC = fp - 0x00000068; esp_59->dwFFFFFFE8 = fp - 0x00000074; esp_59->dwFFFFFFE4 = fp - 0x00000064; __getmainargs(); esp_59->dwFFFFFFDC = fp - 0x00000080; esp_59->dwFFFFFFD8 = fp - 0x00000080; _initterm(); word32 esi_161 = Mem85[_acmdln:word32]; if (esi_161->b0000 == 0x22) { l1310E597: do { esi_161 = esi_161 + 1; bcu8 al_171 = esi_161->b0000; } while (al_171 == 0x00 || al_171 == 0x22); if (esi_161->b0000 == 0x22) { l1310E5AA: esi_161 = esi_161 + 1; l1310E5AE: bcu8 al_98 = esi_161->b0000; if (al_98 != 0x00 && al_98 <=u 0x20) goto l1310E5AA; } else goto l1310E5AE; } else while (esi_161->b0000 >u 0x20) esi_161 = esi_161 + 1; Eq_57 eax_113; esp_59->tFFFFFFF4 = fp - 0x00000060; GetStartupInfoA(esp_59->tFFFFFFF4); word32 esp_109 = &esp_59->tFFFFFFF4; if (0x00 != 0x00) eax_113 = (word32) wLoc30; else { esp_59->tFFFFFFF4.u0 = 0x0000000A; eax_113 = esp_59->tFFFFFFF4; esp_109 = &esp_59->tFFFFFFF4; } Eq_439 * esp_115 = esp_109 - 0x00000004; esp_115->t0000 = eax_113; Mem118[esp_115 - 0x00000004:word32] = esi_161; esp_115->t0000.u0 = 0x00000000; esp_115->t0000.u0 = 0x00000000; Mem126[esp_115 - 0x0000000C:word32] = GetModuleHandleA(esp_115->t0000); esp_115->dw0016 = fn1310E09B(); exit(esp_115->dw0016); word32 ecx_137 = **dwLoc18; esp_115->ptr0012 = dwLoc18; esp_115->dw000E = ecx_137; _XcptFilter(); return; }
void fn004019E0(word32 ebp, Eq_3 * fs) { word32 * eax_14 = fs->ptr0000; fs->ptr0000 = fp - 0x00000014; __set_app_type(); globals->dw40312C = 0xFFFFFFFF; globals->dw403130 = 0xFFFFFFFF; __p__fmode(); *eax_14 = globals->dw403120; __p__commode(); *eax_14 = globals->dw40311C; Mem46[0x00403128:word32] = Mem43[_adjust_fdiv:word32]; fn00401BE0(); word32 esp_193 = fp + 0xFFFFFF6C; if (globals->dw403040 == 0x00000000) { __setusermatherr(); esp_193 = fp + 0xFFFFFF68; } fn00401BB0(); Eq_51 * esp_54 = esp_193 - 0x00000004; esp_54->dw0000 = 0x00403014; esp_54->dw0000 = 0x00403010; _initterm(); esp_54->dw0000 = fp - 0x00000070; esp_54->dw0000 = globals->dw403114; esp_54->dw0000 = fp - 0x00000068; Mem74[esp_54 - 0x00000010:word32] = fp - 0x00000074; esp_54->dw0000 = fp - 0x00000064; __getmainargs(); esp_54->dwFFFFFFF8 = 0x0040300C; esp_54->dwFFFFFFF4 = 0x00403000; _initterm(); __p__acmdln(); Eq_85 * esi_161 = dwLoc74; if (dwLoc74->b0000 == 0x22) { do { esi_161 = esi_161 + 1; bcu8 al_169 = esi_161->b0000; } while (al_169 == 0x00 || al_169 == 0x22); if (esi_161->b0000 == 0x22) { esi_161 = esi_161 + 1; goto l00401AEE; } } while (esi_161->b0000 >u 0x20) esi_161 = esi_161 + 1; l00401AEE: bcu8 al_99 = esi_161->b0000; while (al_99 != 0x00 && al_99 <=u 0x20) { esi_161 = esi_161 + 1; al_99 = esi_161->b0000; } Eq_80 eax_117; esp_54->tFFFFFFF0 = fp - 0x00000060; GetStartupInfoA(esp_54->tFFFFFFF0); if (0x00 != 0x00) eax_117 = dwLoc30 & 0x0000FFFF; else eax_117.u0 = 0x0000000A; esp_54->tFFFFFFF0 = eax_117; esp_54->ptrFFFFFFEC = esi_161; esp_54->dwFFFFFFE8 = 0x00000000; esp_54->tFFFFFFE4.u0 = 0x00000000; Eq_80 eax_127 = GetModuleHandleA(esp_54->tFFFFFFE4); esp_54->tFFFFFFE4 = eax_127; fn00401BFC(ebp, dwArg00, dwArg04, dwArg08); esp_54->tFFFFFFF0 = eax_127; exit(esp_54->tFFFFFFF0); fp->dwFFFFFFF8 = 0xFFFFFFFF; fs->ptr0000 = eax_14; return; }
/********************************************************************* * _wpopen (MSVCRT.@) * * Unicode version of _popen */ MSVCRT_FILE* CDECL MSVCRT__wpopen(const MSVCRT_wchar_t* command, const MSVCRT_wchar_t* mode) { MSVCRT_FILE *ret; BOOL readPipe = TRUE; int textmode, fds[2], fdToDup, fdToOpen, fdStdHandle = -1, fdStdErr = -1; const MSVCRT_wchar_t *p; MSVCRT_wchar_t *comspec, *fullcmd; unsigned int len; static const MSVCRT_wchar_t flag[] = {' ','/','c',' ',0}; TRACE("(command=%s, mode=%s)\n", debugstr_w(command), debugstr_w(mode)); if (!command || !mode) return NULL; textmode = *__p__fmode() & (MSVCRT__O_BINARY | MSVCRT__O_TEXT); for (p = mode; *p; p++) { switch (*p) { case 'W': case 'w': readPipe = FALSE; break; case 'B': case 'b': textmode |= MSVCRT__O_BINARY; textmode &= ~MSVCRT__O_TEXT; break; case 'T': case 't': textmode |= MSVCRT__O_TEXT; textmode &= ~MSVCRT__O_BINARY; break; } } if (MSVCRT__pipe(fds, 0, textmode) == -1) return NULL; fdToDup = readPipe ? 1 : 0; fdToOpen = readPipe ? 0 : 1; if ((fdStdHandle = MSVCRT__dup(fdToDup)) == -1) goto error; if (MSVCRT__dup2(fds[fdToDup], fdToDup) != 0) goto error; if (readPipe) { if ((fdStdErr = MSVCRT__dup(MSVCRT_STDERR_FILENO)) == -1) goto error; if (MSVCRT__dup2(fds[fdToDup], MSVCRT_STDERR_FILENO) != 0) goto error; } MSVCRT__close(fds[fdToDup]); if (!(comspec = msvcrt_get_comspec())) goto error; len = strlenW(comspec) + strlenW(flag) + strlenW(command) + 1; if (!(fullcmd = HeapAlloc(GetProcessHeap(), 0, len * sizeof(MSVCRT_wchar_t)))) goto error; strcpyW(fullcmd, comspec); strcatW(fullcmd, flag); strcatW(fullcmd, command); HeapFree(GetProcessHeap(), 0, comspec); if (msvcrt_spawn(MSVCRT__P_NOWAIT, NULL, fullcmd, NULL, 1) == -1) { MSVCRT__close(fds[fdToOpen]); ret = NULL; } else { ret = MSVCRT__wfdopen(fds[fdToOpen], mode); if (!ret) MSVCRT__close(fds[fdToOpen]); } HeapFree(GetProcessHeap(), 0, fullcmd); MSVCRT__dup2(fdStdHandle, fdToDup); MSVCRT__close(fdStdHandle); if (readPipe) { MSVCRT__dup2(fdStdErr, MSVCRT_STDERR_FILENO); MSVCRT__close(fdStdErr); } return ret; error: if (fdStdHandle != -1) MSVCRT__close(fdStdHandle); if (fdStdErr != -1) MSVCRT__close(fdStdErr); MSVCRT__close(fds[0]); MSVCRT__close(fds[1]); return NULL; }