📄 uposixwin.c
字号:
Bit 3: Share standard error if bit is set. Returns: zero return value indicates failure.*/static int C_fcallC_process(const char * app, const char * cmdlin, const char ** env, int * phandle, int * pstdin_fd, int * pstdout_fd, int * pstderr_fd, int params){ int i; int success = TRUE; const int f_share_io[3] = { params & 1, params & 2, params & 4}; int io_fds[3] = { -1, -1, -1 }; HANDLE child_io_handles[3] = { NULL, NULL, NULL }, standard_io_handles[3] = { GetStdHandle(STD_INPUT_HANDLE), GetStdHandle(STD_OUTPUT_HANDLE), GetStdHandle(STD_ERROR_HANDLE)}; const char modes[3] = "rww"; HANDLE cur_process = GetCurrentProcess(), child_process = NULL; void* envblk = NULL; /****** create io handles & fds ***/ for (i=0; i<3 && success; ++i) { if (f_share_io[i]) { success = DuplicateHandle( cur_process, standard_io_handles[i], cur_process, &child_io_handles[i], 0, FALSE, DUPLICATE_SAME_ACCESS); } else { HANDLE a, b; success = CreatePipe(&a,&b,NULL,0); if(success) { HANDLE parent_end; if (modes[i]=='r') { child_io_handles[i]=a; parent_end=b; } else { parent_end=a; child_io_handles[i]=b; } success = (io_fds[i] = _open_osfhandle((long)parent_end,0)) >= 0; } } } /****** make handles inheritable */ for (i=0; i<3 && success; ++i) success = SetHandleInformation(child_io_handles[i], HANDLE_FLAG_INHERIT, -1);#if 0 /* Requires a sorted list by key! */ /****** create environment block if necessary ****/ if (env && success) { char** p; int len = 0; for (p = env; *p; ++p) len += strlen(*p) + 1; if (envblk = C_malloc(len + 1)) { char* pb = (char*)envblk; for (p = env; *p; ++p) { strcpy(pb, *p); pb += strlen(*p) + 1; } *pb = '\0'; } else success = FALSE; }#endif /****** finally spawn process ****/ if (success) { PROCESS_INFORMATION pi; STARTUPINFO si; ZeroMemory(&pi,sizeof pi); ZeroMemory(&si,sizeof si); si.cb = sizeof si; si.dwFlags = STARTF_USESTDHANDLES; si.hStdInput = child_io_handles[0]; si.hStdOutput = child_io_handles[1]; si.hStdError = child_io_handles[2]; /* FIXME passing 'app' param causes failure & possible stack corruption */ success = CreateProcess( NULL, (char*)cmdlin, NULL, NULL, TRUE, 0, envblk, NULL, &si, &pi); if (success) { child_process=pi.hProcess; CloseHandle(pi.hThread); } else set_last_errno(); } else set_last_errno(); /****** cleanup & return *********/ /* parent must close child end */ for (i=0; i<3; ++i) CloseHandle(child_io_handles[i]); if (success) { *phandle = (int)child_process; *pstdin_fd = io_fds[0]; *pstdout_fd = io_fds[1]; *pstderr_fd = io_fds[2]; } else { for (i=0; i<3; ++i) _close(io_fds[i]); } return success;}static C_PTABLE_ENTRY *create_ptable(void);C_noret_decl(C_scheduler_toplevel)C_externimport void C_ccall C_scheduler_toplevel(C_word c,C_word d,C_word k) C_noret;C_noret_decl(C_regex_toplevel)C_externimport void C_ccall C_regex_toplevel(C_word c,C_word d,C_word k) C_noret;C_noret_decl(C_extras_toplevel)C_externimport void C_ccall C_extras_toplevel(C_word c,C_word d,C_word k) C_noret;C_noret_decl(C_utils_toplevel)C_externimport void C_ccall C_utils_toplevel(C_word c,C_word d,C_word k) C_noret;C_noret_decl(C_files_toplevel)C_externimport void C_ccall C_files_toplevel(C_word c,C_word d,C_word k) C_noret;static C_TLS C_word lf[399];static double C_possibly_force_alignment;/* from k3978 */static C_word C_fcall stub654(C_word C_buf,C_word C_a0,C_word C_a1,C_word C_a2,C_word C_a3,C_word C_a4,C_word C_a5,C_word C_a6,C_word C_a7) C_regparm;C_regparm static C_word C_fcall stub654(C_word C_buf,C_word C_a0,C_word C_a1,C_word C_a2,C_word C_a3,C_word C_a4,C_word C_a5,C_word C_a6,C_word C_a7){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;char * t0=(char * )C_string_or_null(C_a0);char * t1=(char * )C_string_or_null(C_a1);void * t2=(void * )C_c_pointer_or_null(C_a2);int *t3=(int *)C_c_pointer_or_null(C_a3);int *t4=(int *)C_c_pointer_or_null(C_a4);int *t5=(int *)C_c_pointer_or_null(C_a5);int *t6=(int *)C_c_pointer_or_null(C_a6);int t7=(int )C_unfix(C_a7);C_r=C_mk_bool(C_process(t0,t1,t2,t3,t4,t5,t6,t7));return C_r;}/* from close-handle in k2775 in k1570 in k1566 in k1562 in k1558 in k1554 in k1550 in k1176 in k1173 in k1170 in k1167 in k1164 in k1161 */static C_word C_fcall stub642(C_word C_buf,C_word C_a0) C_regparm;C_regparm static C_word C_fcall stub642(C_word C_buf,C_word C_a0){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;int t0=(int )C_truep(C_a0);C_r=C_fix((C_word)close_handle(t0));return C_r;}/* from current-process-id in k2775 in k1570 in k1566 in k1562 in k1558 in k1554 in k1550 in k1176 in k1173 in k1170 in k1167 in k1164 in k1161 */static C_word C_fcall stub630(C_word C_buf) C_regparm;C_regparm static C_word C_fcall stub630(C_word C_buf){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;C_r=C_fix((C_word)C_getpid());return C_r;}/* from k3620 */static C_word C_fcall stub533(C_word C_buf,C_word C_a0,C_word C_a1,C_word C_a2) C_regparm;C_regparm static C_word C_fcall stub533(C_word C_buf,C_word C_a0,C_word C_a1,C_word C_a2){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;int t0=(int )C_unfix(C_a0);void * t1=(void * )C_data_pointer_or_null(C_a1);int t2=(int )C_unfix(C_a2);C_set_exec_env(t0,t1,t2);return C_r;}/* from k3614 */static C_word C_fcall stub523(C_word C_buf,C_word C_a0,C_word C_a1,C_word C_a2) C_regparm;C_regparm static C_word C_fcall stub523(C_word C_buf,C_word C_a0,C_word C_a1,C_word C_a2){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;int t0=(int )C_unfix(C_a0);void * t1=(void * )C_data_pointer_or_null(C_a1);int t2=(int )C_unfix(C_a2);C_set_exec_arg(t0,t1,t2);return C_r;}/* from ex0 */static C_word C_fcall stub452(C_word C_buf,C_word C_a0) C_regparm;C_regparm static C_word C_fcall stub452(C_word C_buf,C_word C_a0){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;int t0=(int )C_unfix(C_a0);_exit(t0);return C_r;}/* from local-timezone-abbreviation in k2775 in k1570 in k1566 in k1562 in k1558 in k1554 in k1550 in k1176 in k1173 in k1170 in k1167 in k1164 in k1161 */#define return(x) C_cblock C_r = (C_mpointer(&C_a,(void*)(x))); goto C_ret; C_cblockendstatic C_word C_fcall stub447(C_word C_buf) C_regparm;C_regparm static C_word C_fcall stub447(C_word C_buf){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;char *z = (daylight ? _tzname[1] : _tzname[0]);return(z);C_ret:#undef returnreturn C_r;}/* from strftime */static C_word C_fcall stub427(C_word C_buf,C_word C_a0,C_word C_a1) C_regparm;C_regparm static C_word C_fcall stub427(C_word C_buf,C_word C_a0,C_word C_a1){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;C_word t0=(C_word )(C_a0);C_word t1=(C_word )(C_a1);C_r=C_mpointer(&C_a,(void*)C_strftime(t0,t1));return C_r;}/* from asctime */static C_word C_fcall stub421(C_word C_buf,C_word C_a0) C_regparm;C_regparm static C_word C_fcall stub421(C_word C_buf,C_word C_a0){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;C_word t0=(C_word )(C_a0);C_r=C_mpointer(&C_a,(void*)C_asctime(t0));return C_r;}/* from ctime */static C_word C_fcall stub412(C_word C_buf,C_word C_a0) C_regparm;C_regparm static C_word C_fcall stub412(C_word C_buf,C_word C_a0){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;int t0=(int )C_num_to_int(C_a0);C_r=C_mpointer(&C_a,(void*)C_ctime(t0));return C_r;}/* from get */static C_word C_fcall stub395(C_word C_buf,C_word C_a0) C_regparm;C_regparm static C_word C_fcall stub395(C_word C_buf,C_word C_a0){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;int t0=(int )C_unfix(C_a0);C_r=C_mpointer(&C_a,(void*)C_getenventry(t0));return C_r;}/* from strerror */static C_word C_fcall stub3(C_word C_buf,C_word C_a0) C_regparm;C_regparm static C_word C_fcall stub3(C_word C_buf,C_word C_a0){C_word C_r=C_SCHEME_UNDEFINED,*C_a=(C_word*)C_buf;int t0=(int )C_unfix(C_a0);C_r=C_mpointer(&C_a,(void*)strerror(t0));return C_r;}C_noret_decl(C_posix_toplevel)C_externexport void C_ccall C_posix_toplevel(C_word c,C_word t0,C_word t1) C_noret;C_noret_decl(f_1163)static void C_ccall f_1163(C_word c,C_word t0,C_word t1) C_noret;C_noret_decl(f_1166)static void C_ccall f_1166(C_word c,C_word t0,C_word t1) C_noret;C_noret_decl(f_1169)static void C_ccall f_1169(C_word c,C_word t0,C_word t1) C_noret;C_noret_decl(f_1172)static void C_ccall f_1172(C_word c,C_word t0,C_word t1) C_noret;C_noret_decl(f_1175)static void C_ccall f_1175(C_word c,C_word t0,C_word t1) C_noret;C_noret_decl(f_1178)static void C_ccall f_1178(C_word c,C_word t0,C_word t1) C_noret;C_noret_decl(f_1552)static void C_ccall f_1552(C_word c,C_word t0,C_word t1) C_noret;C_noret_decl(f_1556)static void C_ccall f_1556(C_word c,C_word t0,C_word t1) C_noret;C_noret_decl(f_1560)static void C_ccall f_1560(C_word c,C_word t0,C_word t1) C_noret;C_noret_decl(f_1564)static void C_ccall f_1564(C_word c,C_word t0,C_word t1) C_noret;C_noret_decl(f_1568)static void C_ccall f_1568(C_word c,C_word t0,C_word t1) C_noret;C_noret_decl(f_1572)static void C_ccall f_1572(C_word c,C_word t0,C_word t1) C_noret;C_noret_decl(f_2777)static void C_ccall f_2777(C_word c,C_word t0,C_word t1) C_noret;C_noret_decl(f_4935)static void C_ccall f_4935(C_word c,C_word t0,C_word t1,C_word t2) C_noret;C_noret_decl(f_4932)static void C_ccall f_4932(C_word c,C_word t0,C_word t1,C_word t2) C_noret;C_noret_decl(f_4925)static void C_ccall f_4925(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4919)static void C_ccall f_4919(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4913)static void C_ccall f_4913(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4907)static void C_ccall f_4907(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4901)static void C_ccall f_4901(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4895)static void C_ccall f_4895(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4889)static void C_ccall f_4889(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4883)static void C_ccall f_4883(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4877)static void C_ccall f_4877(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4871)static void C_ccall f_4871(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4865)static void C_ccall f_4865(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4859)static void C_ccall f_4859(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4853)static void C_ccall f_4853(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4847)static void C_ccall f_4847(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4841)static void C_ccall f_4841(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4835)static void C_ccall f_4835(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4829)static void C_ccall f_4829(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4823)static void C_ccall f_4823(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4817)static void C_ccall f_4817(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4811)static void C_ccall f_4811(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4805)static void C_ccall f_4805(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4799)static void C_ccall f_4799(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4793)static void C_ccall f_4793(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4787)static void C_ccall f_4787(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4781)static void C_ccall f_4781(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4775)static void C_ccall f_4775(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4769)static void C_ccall f_4769(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4763)static void C_ccall f_4763(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4757)static void C_ccall f_4757(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4751)static void C_ccall f_4751(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4745)static void C_ccall f_4745(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4739)static void C_ccall f_4739(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4733)static void C_ccall f_4733(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4727)static void C_ccall f_4727(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4721)static void C_ccall f_4721(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4715)static void C_ccall f_4715(C_word c,C_word t0,C_word t1,...) C_noret;C_noret_decl(f_4709)static void C_ccall f_4709(C_word c,C_word t0,C_word t1,...) C_noret;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -