]> code.delx.au - gnu-emacs/blobdiff - src/sysdep.c
Fix pr-interface-map initialization
[gnu-emacs] / src / sysdep.c
index ff7a4f5f42c85cebf157a2d8ee095f4553dee819..d1f378a3f8744aa87a55ec64f40124549b11b9fa 100644 (file)
@@ -46,7 +46,11 @@ extern void srandom P_ ((unsigned int));
 #endif
 #endif
 
+/* The w32 build defines select stuff in w32.h, which is included by
+   sys/select.h (included below).   */
+#ifndef WINDOWSNT
 #include "sysselect.h"
+#endif
 
 #include "blockinput.h"
 
@@ -1188,7 +1192,7 @@ int inherited_pgroup;
    redirect the tty device handle FD to point to our own process
    group.  We need to be in our own process group to receive SIGIO
    properly.  */
-void
+static void
 narrow_foreground_group (int fd)
 {
   int me = getpid ();
@@ -1206,7 +1210,7 @@ narrow_foreground_group (int fd)
 }
 
 /* Set the tty to our original foreground group.  */
-void
+static void
 widen_foreground_group (int fd)
 {
   if (inherited_pgroup != getpid ())
@@ -1748,8 +1752,9 @@ init_sys_modes (tty_out)
       fcntl (fileno (tty_out->input), F_SETOWN, getpid ());
       init_sigio (fileno (tty_out->input));
 #ifdef HAVE_GPM
-      if (term_gpm)
+      if (gpm_tty == tty_out)
        {
+         /* Arrange for mouse events to give us SIGIO signals.  */
          fcntl (gpm_fd, F_SETOWN, getpid ());
          fcntl (gpm_fd, F_SETFL, fcntl (gpm_fd, F_GETFL, 0) | O_NONBLOCK);
          init_sigio (gpm_fd);
@@ -1777,7 +1782,8 @@ init_sys_modes (tty_out)
   setbuf (tty_out->output, (char *) _sobuf);
 #endif
 
-  tty_set_terminal_modes (tty_out->terminal);
+  if (tty_out->terminal->set_terminal_modes_hook)
+    tty_out->terminal->set_terminal_modes_hook (tty_out->terminal);
 
   if (!tty_out->term_initted)
     {
@@ -1989,7 +1995,8 @@ reset_sys_modes (tty_out)
   }
 #endif
 
-  tty_reset_terminal_modes (tty_out->terminal);
+  if (tty_out->terminal->reset_terminal_modes_hook)
+    tty_out->terminal->reset_terminal_modes_hook (tty_out->terminal);
 
 #ifdef BSD_SYSTEM
 #ifndef BSD4_1
@@ -2511,10 +2518,50 @@ init_system_name ()
 #endif /* not CANNOT_DUMP */
     if (! index (hostname, '.'))
       {
-       struct hostent *hp;
        int count;
+#ifdef HAVE_GETADDRINFO
+        struct addrinfo *res;
+        struct addrinfo hints;
+        int ret;
+
+        memset (&hints, 0, sizeof(hints));
+        hints.ai_socktype = SOCK_STREAM;
+        hints.ai_flags = AI_CANONNAME;
+
        for (count = 0;; count++)
          {
+            if ((ret = getaddrinfo (hostname, NULL, &hints, &res)) == 0
+                || ret != EAI_AGAIN)
+              break;
+
+            if (count >= 5)
+             break;
+           Fsleep_for (make_number (1), Qnil);
+         }
+
+        if (ret == 0)
+          {
+            struct addrinfo *it = res;
+            while (it)
+              {
+                char *fqdn = it->ai_canonname;
+                if (fqdn && index (fqdn, '.')
+                    && strcmp (fqdn, "localhost.localdomain") != 0)
+                  break;
+                it = it->ai_next;
+              }
+            if (it)
+              {
+                hostname = alloca (strlen (it->ai_canonname) + 1);
+                strcpy (hostname, it->ai_canonname);
+              }
+            freeaddrinfo (res);
+          }
+#else /* !HAVE_GETADDRINFO */
+        struct hostent *hp;
+       for (count = 0;; count++)
+         {
+
 #ifdef TRY_AGAIN
            h_errno = 0;
 #endif
@@ -2522,11 +2569,14 @@ init_system_name ()
 #ifdef TRY_AGAIN
            if (! (hp == 0 && h_errno == TRY_AGAIN))
 #endif
+
              break;
+
            if (count >= 5)
              break;
            Fsleep_for (make_number (1), Qnil);
          }
+
        if (hp)
          {
            char *fqdn = (char *) hp->h_name;
@@ -2560,6 +2610,7 @@ init_system_name ()
              }
 #endif
          }
+#endif /* !HAVE_GETADDRINFO */
       }
 #endif /* HAVE_SOCKETS */
   /* We used to try using getdomainname here,
@@ -3435,6 +3486,15 @@ emacs_close (fd)
   int did_retry = 0;
   register int rtnval;
 
+#if defined (MAC_OSX) && defined (HAVE_CARBON)
+  {
+    extern int mac_try_close_socket P_ ((int));
+
+    if (mac_try_close_socket (fd))
+      return 0;
+  }
+#endif
+
   while ((rtnval = close (fd)) == -1
         && (errno == EINTR))
     did_retry = 1;