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.
This commit is contained in:
Paul Eggert 2011-07-19 10:33:06 -07:00
parent f41628b253
commit 590bd46743
4 changed files with 43 additions and 16 deletions

View 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

View 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

View 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

View file

@ -1053,7 +1053,7 @@ unexec (const char *new_name, const char *old_name)
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 @@ unexec (const char *new_name, const char *old_name)
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