XEmacs 21.4.5 "Civil Service".
[chise/xemacs-chise.git.1] / src / process-unix.c
index 3523f6c..c0d1989 100644 (file)
@@ -220,6 +220,7 @@ allocate_pty (void)
      allocate_pty() tries all the different known easy ways of opening
      a pty.  In case of failure, we resort to the old BSD-style pty
      grovelling code in allocate_pty_the_old_fashioned_way(). */
+#ifndef FORCE_ALLOCATE_PTY_THE_OLD_FASHIONED_WAY
   int master_fd = -1;
   const char *slave_name = NULL;
   const char *clone = NULL;
@@ -342,6 +343,7 @@ allocate_pty (void)
  lose:
   if (master_fd >= 0)
     close (master_fd);
+#endif /* ndef FORCE_ALLOCATE_PTY_THE_OLD_FASHIONED_WAY */
   return allocate_pty_the_old_fashioned_way ();
 }
 
@@ -1288,7 +1290,7 @@ unix_send_process (Lisp_Object proc, struct lstream* lstream)
 
       while (1)
        {
-         ssize_t writeret;
+         Lstream_data_count writeret;
 
          chunklen = Lstream_read (lstream, chunkbuf, 512);
          if (chunklen <= 0)
@@ -1407,9 +1409,9 @@ static void
 try_to_initialize_subtty (struct unix_process_data *upd)
 {
   if (upd->pty_flag
-      && (upd->subtty = -1 || ! isatty (upd->subtty))
+      && (upd->subtty == -1 || ! isatty (upd->subtty))
       && STRINGP (upd->tty_name))
-    upd->subtty = open (XSTRING_DATA (upd->tty_name), O_RDWR, 0);
+    upd->subtty = open ((char *) XSTRING_DATA (upd->tty_name), O_RDWR, 0);
 }
 
 /* Send signal number SIGNO to PROCESS.
@@ -1475,9 +1477,21 @@ unix_kill_child_process (Lisp_Object proc, int signo,
      ioctl TIOCGPGRP it is supposed to obsolete.  Sometimes we have to
      use TIOCGPGRP on the master end, sometimes the slave end
      (probably an AIX bug).  So we better get a fd for the slave if we
-     haven't got it yet.  On some systems none of these work, so then
-     we just fall back to the non-current_group behavior and kill the
-     process group of the child. */
+     haven't got it yet.
+
+     Anal operating systems like SGI Irix and Compaq Tru64 adhere
+     strictly to the letter of the law, so our hack doesn't work.
+     The following fragment from an Irix header file is suggestive:
+
+     #ifdef __notdef__
+     // this is not currently supported
+     #define TIOCSIGNAL      (tIOC|31)       // pty: send signal to slave
+     #endif
+
+     On those systems where none of our tricks work, we just fall back
+     to the non-current_group behavior and kill the process group of
+     the child.
+  */
   if (current_group)
     {
       try_to_initialize_subtty (d);
@@ -1529,8 +1543,17 @@ unix_kill_child_process (Lisp_Object proc, int signo,
 
   /* Finally send the signal. */
   if (EMACS_KILLPG (pgid, signo) == -1)
-    error ("kill (%ld, %ld) failed: %s",
-          (long) pgid, (long) signo, strerror (errno));
+    {
+      /* It's not an error if our victim is already dead.
+        And we can't rely on the result of killing a zombie, since
+        XPG 4.2 requires that killing a zombie fail with ESRCH,
+        while FIPS 151-2 requires that it succeeds! */
+#ifdef ESRCH
+      if (errno != ESRCH)
+#endif
+       error ("kill (%ld, %ld) failed: %s",
+              (long) pgid, (long) signo, strerror (errno));
+    }
 }
 
 /* Send signal SIGCODE to any process in the system given its PID.
@@ -1566,7 +1589,11 @@ unix_canonicalize_host_name (Lisp_Object host)
 
   xzero (hints);
   hints.ai_flags = AI_CANONNAME;
+#ifdef IPV6_CANONICALIZE
   hints.ai_family = AF_UNSPEC;
+#else
+  hints.ai_family = PF_INET;
+#endif
   hints.ai_socktype = SOCK_STREAM;
   hints.ai_protocol = 0;
   LISP_STRING_TO_EXTERNAL (host, ext_host, Qnative);
@@ -1743,6 +1770,7 @@ unix_open_network_stream (Lisp_Object name, Lisp_Object host, Lisp_Object servic
 
            failed_connect = 1;
            close (s);
+           s = -1;
 
            speed_up_interrupts ();
 
@@ -1955,7 +1983,7 @@ unix_open_multicast_group (Lisp_Object name, Lisp_Object dest,
   memset (&sa, 0, sizeof(sa));
   sa.sin_family = AF_INET;
   sa.sin_port = theport;
-  sa.sin_addr.s_addr = htonl (inet_addr ((char *) XSTRING_DATA (dest)));
+  sa.sin_addr.s_addr = inet_addr ((char *) XSTRING_DATA (dest));
 
   /* Socket configuration for reading ------------------------ */
 
@@ -1975,7 +2003,7 @@ unix_open_multicast_group (Lisp_Object name, Lisp_Object dest,
     }
 
   /* join multicast group */
-  imr.imr_multiaddr.s_addr = htonl (inet_addr ((char *) XSTRING_DATA (dest)));
+  imr.imr_multiaddr.s_addr = inet_addr ((char *) XSTRING_DATA (dest));
   imr.imr_interface.s_addr = htonl (INADDR_ANY);
   if (setsockopt (rs, IPPROTO_IP, IP_ADD_MEMBERSHIP,
                  &imr, sizeof (struct ip_mreq)) < 0)