======
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.
=== modified file 'src/minibuf.c'
--- src/minibuf.c 2011-06-24 21:25:22 +0000
+++ src/minibuf.c 2011-07-19 15:46:18 +0000
@@ -19,6 +19,7 @@
#include <config.h>
+#include <errno.h>
#include <stdio.h>
#include <setjmp.h>
@@ -236,8 +237,9 @@
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 @@
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
=== modified file 'src/s/openbsd.h'
--- src/s/openbsd.h 2011-01-15 23:16:57 +0000
+++ src/s/openbsd.h 2011-07-19 17:19:32 +0000
@@ -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
=== modified file 'src/unexelf.c'
--- src/unexelf.c 2011-06-13 05:55:57 +0000
+++ src/unexelf.c 2011-07-19 16:47:05 +0000
@@ -1053,7 +1053,7 @@
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 @@
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