X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=src%2Fprocess-unix.c;h=ebe75c6683ee32fa1e101f63faf4210a3f80162c;hb=c3e6c84e9bbe713806f38e80f7549000171bbd3d;hp=c9ac0a1403ad4291c56ad09dfbf29dc46384b318;hpb=2fd9701a4f902054649dde9143a3f77809afee8f;p=chise%2Fxemacs-chise.git- diff --git a/src/process-unix.c b/src/process-unix.c index c9ac0a1..ebe75c6 100644 --- a/src/process-unix.c +++ b/src/process-unix.c @@ -779,7 +779,7 @@ unix_create_process (Lisp_Process *p, UNIX_DATA(p)->subtty = forkin; { -#if !defined(__CYGWIN32__) +#if !defined(CYGWIN) /* child_setup must clobber environ on systems with true vfork. Protect it from permanent change. */ char **save_environ = environ; @@ -938,7 +938,7 @@ unix_create_process (Lisp_Process *p, } /**** End of child code ****/ /**** Back in parent process ****/ -#if !defined(__CYGWIN32__) +#if !defined(CYGWIN) environ = save_environ; #endif } @@ -1139,6 +1139,14 @@ unix_send_process (Lisp_Object proc, struct lstream* lstream) volatile Lisp_Object vol_proc = proc; Lisp_Process *volatile p = XPROCESS (proc); + /* #### JV: layering violation? + + This function knows too much about the relation between the encodingstream + (DATA_OUTSTREAM) and te actual output stream p->output_stream. + + If encoding streams properly forwarded all calls, we could simply + use DATA_OUTSTREAM everywhere. */ + if (!SETJMP (send_process_frame)) { /* use a reasonable-sized buffer (somewhere around the size of the @@ -1173,6 +1181,9 @@ unix_send_process (Lisp_Object proc, struct lstream* lstream) that may allow the program to finish doing output and read more. */ Faccept_process_output (Qnil, make_int (1), Qnil); + /* It could have *really* finished, deleting the process */ + if (NILP(p->pipe_outstream)) + return; old_sigpipe = (SIGTYPE (*) (int)) signal (SIGPIPE, send_process_trap); Lstream_flush (XLSTREAM (p->pipe_outstream)); @@ -1844,7 +1855,7 @@ unix_open_multicast_group (Lisp_Object name, Lisp_Object dest, Lisp_Object port, imr.imr_multiaddr.s_addr = htonl (inet_addr ((char *) XSTRING_DATA (dest))); imr.imr_interface.s_addr = htonl (INADDR_ANY); if (setsockopt (rs, IPPROTO_IP, IP_ADD_MEMBERSHIP, - (char *) &imr, sizeof (struct ip_mreq)) < 0) + &imr, sizeof (struct ip_mreq)) < 0) { close (ws); close (rs); @@ -1910,7 +1921,7 @@ unix_open_multicast_group (Lisp_Object name, Lisp_Object dest, Lisp_Object port, /* scope */ if (setsockopt (ws, IPPROTO_IP, IP_MULTICAST_TTL, - (char *) &thettl, sizeof (thettl)) < 0) + &thettl, sizeof (thettl)) < 0) { close (rs); close (ws);