Port to OpenBSD.
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 19 Jul 2011 17:33:06 +0000 (10:33 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 19 Jul 2011 17:33:06 +0000 (10:33 -0700)
See http://lists.gnu.org/archive/html/emacs-devel/2011-07/msg00688.html
and the surrounding thread.
* minibuf.c (read_minibuf_noninteractive): Rewrite to use getchar
rather than fgets, and retry after EINTR.  Otherwise, 'emacs
--batch -f byte-compile-file' fails on OpenBSD if an inactivity
timer goes off.
* s/openbsd.h (BROKEN_SIGIO): Define.
* unexelf.c (unexec) [__OpenBSD__]:
Don't update the .mdebug section of the Alpha COFF symbol table.

src/ChangeLog
src/minibuf.c
src/s/openbsd.h
src/unexelf.c

index ccb2d1d..e098e53 100644 (file)
@@ -1,3 +1,16 @@
+2011-07-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port to OpenBSD.
+       See http://lists.gnu.org/archive/html/emacs-devel/2011-07/msg00688.html
+       and the surrounding thread.
+       * minibuf.c (read_minibuf_noninteractive): Rewrite to use getchar
+       rather than fgets, and retry after EINTR.  Otherwise, 'emacs
+       --batch -f byte-compile-file' fails on OpenBSD if an inactivity
+       timer goes off.
+       * s/openbsd.h (BROKEN_SIGIO): Define.
+       * unexelf.c (unexec) [__OpenBSD__]:
+       Don't update the .mdebug section of the Alpha COFF symbol table.
+
 2011-07-19  Lars Magne Ingebrigtsen  <larsi@gnus.org>
 
        * lread.c (syms_of_lread): Clarify when `lexical-binding' is used
index cf37c33..7e59cf1 100644 (file)
@@ -19,6 +19,7 @@ along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.  */
 
 
 #include <config.h>
+#include <errno.h>
 #include <stdio.h>
 #include <setjmp.h>
 
@@ -236,8 +237,9 @@ read_minibuf_noninteractive (Lisp_Object map, Lisp_Object initial,
                             int allow_props, int inherit_input_method)
 {
   ptrdiff_t size, len;
-  char *line, *s;
+  char *line;
   Lisp_Object val;
+  int c;
 
   fprintf (stdout, "%s", SDATA (prompt));
   fflush (stdout);
@@ -246,22 +248,30 @@ read_minibuf_noninteractive (Lisp_Object map, Lisp_Object initial,
   size = 100;
   len = 0;
   line = (char *) xmalloc (size);
-  while ((s = fgets (line + len, size - len, stdin)) != NULL
-        && (len = strlen (line),
-            len == size - 1 && line[len - 1] != '\n'))
+
+  while ((c = getchar ()) != '\n')
     {
-      if (STRING_BYTES_BOUND / 2 < size)
-       memory_full (SIZE_MAX);
-      size *= 2;
-      line = (char *) xrealloc (line, size);
+      if (c < 0)
+       {
+         if (errno != EINTR)
+           break;
+       }
+      else
+       {
+         if (len == size)
+           {
+             if (STRING_BYTES_BOUND / 2 < size)
+               memory_full (SIZE_MAX);
+             size *= 2;
+             line = (char *) xrealloc (line, size);
+           }
+         line[len++] = c;
+       }
     }
 
-  if (s)
+  if (len)
     {
-      char *nl = strchr (line, '\n');
-      if (nl)
-       *nl = '\0';
-      val = build_string (line);
+      val = make_string (line, len);
       xfree (line);
     }
   else
index 175d61d..0a8bab2 100644 (file)
@@ -1,5 +1,9 @@
 /* System file for openbsd.  */
 
-/* The same as NetBSD.  Note there are differences in configure.  */
+/* Nearly the same as NetBSD.  Note there are differences in configure.  */
 #include "netbsd.h"
 
+/* The symbol SIGIO is defined, but the feature doesn't work in the
+   way Emacs needs it to.  See
+   <http://article.gmane.org/gmane.os.openbsd.ports/46831>.  */
+#define BROKEN_SIGIO
index 951e7c0..a169ffc 100644 (file)
@@ -1053,7 +1053,7 @@ temacs:
       memcpy (NEW_SECTION_H (nn).sh_offset + new_base, src,
              NEW_SECTION_H (nn).sh_size);
 
-#ifdef __alpha__
+#if defined __alpha__ && !defined __OpenBSD__
       /* Update Alpha COFF symbol table: */
       if (strcmp (old_section_names + OLD_SECTION_H (n).sh_name, ".mdebug")
          == 0)
@@ -1072,7 +1072,7 @@ temacs:
          symhdr->cbRfdOffset += new_data2_size;
          symhdr->cbExtOffset += new_data2_size;
        }
-#endif /* __alpha__ */
+#endif /* __alpha__ && !__OpenBSD__ */
 
 #if defined (_SYSTYPE_SYSV)
       if (NEW_SECTION_H (nn).sh_type == SHT_MIPS_DEBUG