Mercurial > hg > xemacs-beta
diff src/process.c @ 359:8e84bee8ddd0 r21-1-9
Import from CVS: tag r21-1-9
author | cvs |
---|---|
date | Mon, 13 Aug 2007 10:57:55 +0200 |
parents | e11d67e05968 |
children | cc15677e0335 |
line wrap: on
line diff
--- a/src/process.c Mon Aug 13 10:57:07 2007 +0200 +++ b/src/process.c Mon Aug 13 10:57:55 2007 +0200 @@ -59,7 +59,7 @@ #include "systty.h" #include "syswait.h" -Lisp_Object Qprocessp; +Lisp_Object Qprocessp, Qprocess_live_p; /* Process methods */ struct process_methods the_process_methods; @@ -256,6 +256,14 @@ return PROCESSP (obj) ? Qt : Qnil; } +DEFUN ("process-live-p", Fprocess_live_p, 1, 1, 0, /* +Return t if OBJECT is a process that is alive. +*/ + (obj)) +{ + return PROCESSP (obj) && PROCESS_LIVE_P (XPROCESS (obj)) ? Qt : Qnil; +} + DEFUN ("process-list", Fprocess_list, 0, 0, 0, /* Return a list of all processes. */ @@ -509,7 +517,7 @@ pid = PROCMETH (create_process, (p, argv, nargv, program, cur_dir)); p->pid = make_int (pid); - if (!NILP(p->pipe_instream)) + if (PROCESS_LIVE_P (p)) event_stream_select_process (p); } @@ -815,7 +823,7 @@ Really, the loop in execute_internal_event() should check itself for a process-filter change, like in status_notify(); but the struct Lisp_Process is not exported outside of this file. */ - if (NILP(p->pipe_instream)) + if (!PROCESS_LIVE_P (p)) return -1; /* already closed */ if (!NILP (p->filter) && (p->filter_does_read)) @@ -1024,7 +1032,7 @@ set_process_filter (Lisp_Object proc, Lisp_Object filter, int filter_does_read) { CHECK_PROCESS (proc); - if (PROCESS_LIVE_P (proc)) { + if (PROCESS_LIVE_P (XPROCESS (proc))) { if (EQ (filter, Qt)) event_stream_unselect_process (XPROCESS (proc)); else @@ -1113,6 +1121,7 @@ (process)) { process = get_process (process); + CHECK_LIVE_PROCESS (process); return decoding_stream_coding_system (XLSTREAM (XPROCESS (process)->coding_instream) ); } @@ -1122,6 +1131,7 @@ (process)) { process = get_process (process); + CHECK_LIVE_PROCESS (process); return encoding_stream_coding_system (XLSTREAM (XPROCESS (process)->coding_outstream)); } @@ -1131,6 +1141,7 @@ (process)) { process = get_process (process); + CHECK_LIVE_PROCESS (process); return Fcons (decoding_stream_coding_system (XLSTREAM (XPROCESS (process)->coding_instream)), encoding_stream_coding_system @@ -1145,6 +1156,8 @@ { codesys = Fget_coding_system (codesys); process = get_process (process); + CHECK_LIVE_PROCESS (process); + set_decoding_stream_coding_system (XLSTREAM (XPROCESS (process)->coding_instream), codesys); return Qnil; @@ -1158,6 +1171,8 @@ { codesys = Fget_coding_system (codesys); process = get_process (process); + CHECK_LIVE_PROCESS (process); + set_encoding_stream_coding_system (XLSTREAM (XPROCESS (process)->coding_outstream), codesys); return Qnil; @@ -1519,9 +1534,7 @@ if (network_connection_p (proc)) error ("Network connection %s is not a subprocess", XSTRING_DATA (XPROCESS(proc)->name)); - if (!PROCESS_LIVE_P (proc)) - error ("Process %s is not active", - XSTRING_DATA (XPROCESS(proc)->name)); + CHECK_LIVE_PROCESS (proc); MAYBE_PROCMETH (kill_child_process, (proc, signo, current_group, nomsg)); } @@ -1875,7 +1888,7 @@ p->tick++; process_tick++; } - else if (!NILP(p->pipe_instream)) + else if (PROCESS_LIVE_P (p)) { Fkill_process (proc, Qnil); /* Do this now, since remove_process will make sigchld_handler do nothing. */ @@ -1907,7 +1920,7 @@ { if (network_connection_p (proc)) Fdelete_process (proc); - else if (!NILP (XPROCESS (proc)->pipe_instream)) + else if (PROCESS_LIVE_P (XPROCESS (proc))) process_send_signal (proc, SIGHUP, 0, 1); } } @@ -1966,6 +1979,7 @@ syms_of_process (void) { defsymbol (&Qprocessp, "processp"); + defsymbol (&Qprocess_live_p, "process-live-p"); defsymbol (&Qrun, "run"); defsymbol (&Qstop, "stop"); defsymbol (&Qopen, "open"); @@ -1978,6 +1992,7 @@ #endif DEFSUBR (Fprocessp); + DEFSUBR (Fprocess_live_p); DEFSUBR (Fget_process); DEFSUBR (Fget_buffer_process); DEFSUBR (Fdelete_process);