X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fcallproc.c;h=1ce04b012e8628aa78c66faaff5e3bb21d6c64ed;hb=2cbece6401b2279497293e6dc54cda607f49db2f;hp=8694b3867b660f14315b228cecadd896efb4677b;hpb=376658ea71d16dced8acff36c3e385ac3738d868;p=chise%2Fxemacs-chise.git- diff --git a/src/callproc.c b/src/callproc.c index 8694b38..1ce04b0 100644 --- a/src/callproc.c +++ b/src/callproc.c @@ -43,7 +43,6 @@ Boston, MA 02111-1307, USA. */ #ifdef WINDOWSNT #define _P_NOWAIT 1 /* from process.h */ -#include #include "nt.h" #endif @@ -68,7 +67,7 @@ Lisp_Object Vprocess_environment; volatile int synch_process_alive; /* Nonzero => this is a string explaining death of synchronous subprocess. */ -CONST char *synch_process_death; +const char *synch_process_death; /* If synch_process_death is zero, this is exit code of synchronous subprocess. */ @@ -102,11 +101,8 @@ call_process_kill (Lisp_Object fdpid) static Lisp_Object call_process_cleanup (Lisp_Object fdpid) { - int fd = XINT (Fcar (fdpid)); + int fd = XINT (Fcar (fdpid)); int pid = XINT (Fcdr (fdpid)); -#ifdef WINDOWSNT - HANDLE pHandle; -#endif if (!call_process_exited && EMACS_KILLPG (pid, SIGINT) == 0) @@ -118,13 +114,14 @@ call_process_cleanup (Lisp_Object fdpid) message ("Waiting for process to die...(type C-g again to kill it instantly)"); #ifdef WINDOWSNT - pHandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); - if (pHandle == NULL) - { + { + HANDLE pHandle = OpenProcess (PROCESS_ALL_ACCESS, 0, pid); + if (pHandle == NULL) warn_when_safe (Qprocess, Qwarning, "cannot open process (PID %d) for cleanup", pid); - } - wait_for_termination (pHandle); + else + wait_for_termination (pHandle); + } #else wait_for_termination (pid); #endif @@ -155,7 +152,7 @@ report_fork_error (char *string, Lisp_Object data) } #endif /* unused */ -DEFUN ("call-process-internal", Fcall_process_internal, 1, MANY, 0, /* +DEFUN ("old-call-process-internal", Fold_call_process_internal, 1, MANY, 0, /* Call PROGRAM synchronously in separate process, with coding-system specified. Arguments are (PROGRAM &optional INFILE BUFFER DISPLAY &rest ARGS). @@ -191,7 +188,7 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you char *bufptr = buf; int bufsize = 16384; int speccount = specpdl_depth (); - struct gcpro gcpro1, gcpro2; + struct gcpro gcpro1, gcpro2, gcpro3; char **new_argv = alloca_array (char *, max (2, nargs - 2)); /* File to use for stderr in the child. @@ -238,7 +235,7 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you NUNGCPRO; } - GCPRO1 (current_dir); + GCPRO2 (current_dir, path); if (nargs >= 2 && ! NILP (args[1])) { @@ -253,7 +250,7 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you UNGCPRO; - GCPRO2 (infile, current_dir); /* Fexpand_file_name might trash it */ + GCPRO3 (infile, current_dir, path); /* Fexpand_file_name might trash it */ if (nargs >= 3) { @@ -351,7 +348,7 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you fd_error = open (NULL_DEVICE, O_WRONLY | OPEN_BINARY); else if (STRINGP (error_file)) { - fd_error = open ((CONST char *) XSTRING_DATA (error_file), + fd_error = open ((const char *) XSTRING_DATA (error_file), #ifdef DOS_NT O_WRONLY | O_TRUNC | O_CREAT | O_TEXT, S_IREAD | S_IWRITE @@ -504,10 +501,12 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you if (nread == 0) break; +#if 0 #ifdef DOS_NT /* Until we pull out of MULE things like make_decoding_input_stream(), we do the following which is less elegant. --marcpa */ + /* We did. -- kkm */ { int lf_count = 0; if (NILP (Vbinary_process_output)) { @@ -515,6 +514,7 @@ If you quit, the process is killed with SIGINT, or SIGKILL if you } } #endif +#endif total_read += nread; @@ -608,7 +608,7 @@ int void #endif child_setup (int in, int out, int err, char **new_argv, - CONST char *current_dir) + const char *current_dir) { char **env; char *pwd; @@ -684,9 +684,10 @@ child_setup (int in, int out, int err, char **new_argv, { char **ep = env; char *envvar_external; - Bufbyte *envvar_internal = XSTRING_DATA (XCAR (tail)); - GET_C_CHARPTR_EXT_FILENAME_DATA_ALLOCA (envvar_internal, envvar_external); + TO_EXTERNAL_FORMAT (LISP_STRING, XCAR (tail), + C_STRING_ALLOCA, envvar_external, + Qfile_name); /* See if envvar_external duplicates any string already in the env. If so, don't put it in. @@ -762,8 +763,8 @@ child_setup (int in, int out, int err, char **new_argv, #ifdef WINDOWSNT /* Spawn the child. (See ntproc.c:Spawnve). */ - cpid = spawnve (_P_NOWAIT, new_argv[0], (CONST char* CONST*)new_argv, - (CONST char* CONST*)env); + cpid = spawnve (_P_NOWAIT, new_argv[0], (const char* const*)new_argv, + (const char* const*)env); if (cpid == -1) /* An error occurred while trying to spawn the process. */ report_file_error ("Spawning child process", Qnil); @@ -782,7 +783,7 @@ child_setup (int in, int out, int err, char **new_argv, } static int -getenv_internal (CONST Bufbyte *var, +getenv_internal (const Bufbyte *var, Bytecount varlen, Bufbyte **value, Bytecount *valuelen) @@ -845,12 +846,12 @@ When invoked interactively, prints the value in the echo area. /* A version of getenv that consults process_environment, easily callable from C. */ char * -egetenv (CONST char *var) +egetenv (const char *var) { Bufbyte *value; Bytecount valuelen; - if (getenv_internal ((CONST Bufbyte *) var, strlen (var), &value, &valuelen)) + if (getenv_internal ((const Bufbyte *) var, strlen (var), &value, &valuelen)) return (char *) value; else return 0; @@ -868,19 +869,17 @@ init_callproc (void) char **envp; Vprocess_environment = Qnil; for (envp = environ; envp && *envp; envp++) - { - Vprocess_environment = Fcons (build_ext_string (*envp, FORMAT_OS), - Vprocess_environment); - } + Vprocess_environment = + Fcons (build_ext_string (*envp, Qfile_name), Vprocess_environment); } { /* Initialize shell-file-name from environment variables or best guess. */ #ifdef WINDOWSNT - CONST char *shell = egetenv ("COMSPEC"); + const char *shell = egetenv ("COMSPEC"); if (!shell) shell = "\\WINNT\\system32\\cmd.exe"; #else /* not WINDOWSNT */ - CONST char *shell = egetenv ("SHELL"); + const char *shell = egetenv ("SHELL"); if (!shell) shell = "/bin/sh"; #endif @@ -907,7 +906,7 @@ set_process_environment (void) void syms_of_callproc (void) { - DEFSUBR (Fcall_process_internal); + DEFSUBR (Fold_call_process_internal); DEFSUBR (Fgetenv); }