"Gary V.Vaughan" <gary@xxxxxxx> writes: > the code needs to be checked carefully for similiar instances, in 1.4.1 OK, I systematically did that by looking for all uses of errno in the code, looking for cases where errno's value may be garbage. I generated a proposed new release here: ftp://alpha.gnu.org/gnu/bison/m4-1.4.2.tar.gz ftp://alpha.gnu.org/gnu/bison/m4-1.4.2.tar.gz.sig Here are the changes embodied in this proposed release. If they look good to you, can you please copy it to <ftp://ftp.gnu.org/gnu/m4/>? Thanks. 2004-08-19 Paul Eggert <eggert@xxxxxxxxxxx> * Release 1.4.2. * configure.in (VERSION): Bump to 1.4.2. * NEWS: Describe 1.4.2's changes. * src/m4.c (reference_error): Preserve errno, since M4ERROR relies on this. * src/builtin.c (m4_esyscmd): Clear errno before calling popen. (m4_maketemp): Clear errno before calling mkstemp. * src/path.c (path_search): Don't let "free" trash errno when returning NULL. * src/output.c (insert_file): Don't assume errno has a valid value simply because fread returns zero. This fixes a portability bug reported by Marion Hakanson in <http://lists.gnu.org/archive/html/bug-m4/2004-07/msg00029.html>. =================================================================== RCS file: NEWS,v retrieving revision 1.4.1.0 retrieving revision 1.4.1.1 diff -pu -r1.4.1.0 -r1.4.1.1 --- NEWS 2004/06/03 22:10:03 1.4.1.0 +++ NEWS 2004/08/20 03:45:58 1.4.1.1 @@ -1,6 +1,10 @@ GNU m4 NEWS - User visible changes. Copyright (C) 1992, 1993, 1994, 2004 Free Software Foundation, Inc. +Version 1.4.2 - August 2004, by Paul Eggert + +* No user visible changes; portability bug fixes only. + Version 1.4.1 - June 2004, by Paul Eggert * maketemp now creates an empty file with the given name, instead of merely =================================================================== RCS file: configure.in,v retrieving revision 1.4.1.0 retrieving revision 1.4.1.1 diff -pu -r1.4.1.0 -r1.4.1.1 --- configure.in 2004/06/03 21:31:21 1.4.1.0 +++ configure.in 2004/08/20 03:45:58 1.4.1.1 @@ -7,7 +7,7 @@ AC_CONFIG_HEADER(config.h) AC_ARG_PROGRAM PRODUCT=m4 -VERSION=1.4.1 +VERSION=1.4.2 AC_DEFINE_UNQUOTED(PRODUCT, "$PRODUCT") AC_DEFINE_UNQUOTED(VERSION, "$VERSION") AC_SUBST(PRODUCT) =================================================================== RCS file: src/builtin.c,v retrieving revision 1.4.1.0 retrieving revision 1.4.1.1 diff -pu -r1.4.1.0 -r1.4.1.1 --- src/builtin.c 2004/06/03 21:25:09 1.4.1.0 +++ src/builtin.c 2004/08/20 03:42:42 1.4.1.1 @@ -1,6 +1,6 @@ /* GNU m4 -- A simple macro processor - Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2000 Free + Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2000, 2004 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify @@ -767,6 +767,7 @@ m4_esyscmd (struct obstack *obs, int arg return; debug_flush_files (); + errno = 0; pin = popen (ARG (1), "r"); if (pin == NULL) { @@ -1081,6 +1082,7 @@ m4_maketemp (struct obstack *obs, int ar int fd; if (bad_argc (argv[0], argc, 2, 2)) return; + errno = 0; if ((fd = mkstemp (ARG (1))) < 0) { M4ERROR ((warning_status, errno, "Cannot create tempfile %s", ARG (1))); =================================================================== RCS file: src/m4.c,v retrieving revision 1.4.1.0 retrieving revision 1.4.1.1 diff -pu -r1.4.1.0 -r1.4.1.1 --- src/m4.c 2003/09/28 09:05:43 1.4.1.0 +++ src/m4.c 2004/08/20 03:41:59 1.4.1.1 @@ -1,5 +1,7 @@ /* GNU m4 -- A simple macro processor - Copyright (C) 1989, 90, 91, 92, 93, 94 Free Software Foundation, Inc. + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2004 Free + Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -91,8 +93,10 @@ typedef struct macro_definition macro_de void reference_error (void) { + int e = errno; fflush (stdout); fprintf (stderr, "%s:%d: ", current_file, current_line); + errno = e; } #ifdef USE_STACKOVF =================================================================== RCS file: src/output.c,v retrieving revision 1.4.1.0 retrieving revision 1.4.1.1 diff -pu -r1.4.1.0 -r1.4.1.1 --- src/output.c 2003/09/28 09:05:43 1.4.1.0 +++ src/output.c 2004/08/20 03:45:13 1.4.1.1 @@ -1,5 +1,7 @@ /* GNU m4 -- A simple macro processor - Copyright (C) 1989, 90, 91, 92, 93, 94 Free Software Foundation, Inc. + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 1994, 2004 Free + Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -467,12 +469,15 @@ insert_file (FILE *file) /* Insert output by big chunks. */ - errno = 0; - while (length = fread (buffer, 1, COPY_BUFFER_SIZE, file), - length != 0) - output_text (buffer, length); - if (errno) - M4ERROR ((EXIT_FAILURE, errno, "ERROR: Reading inserted file")); + for (;;) + { + length = fread (buffer, 1, COPY_BUFFER_SIZE, file); + if (ferror (file)) + M4ERROR ((EXIT_FAILURE, errno, "ERROR: Reading inserted file")); + if (length == 0) + break; + output_text (buffer, length); + } } /*-------------------------------------------------------------------------. =================================================================== RCS file: src/path.c,v retrieving revision 1.4.1.0 retrieving revision 1.4.1.1 diff -pu -r1.4.1.0 -r1.4.1.1 --- src/path.c 1994/08/28 00:56:28 1.4.1.0 +++ src/path.c 2004/08/20 03:43:39 1.4.1.1 @@ -1,5 +1,7 @@ /* GNU m4 -- A simple macro processor - Copyright (C) 1989, 90, 91, 92, 93 Free Software Foundation, Inc. + + Copyright (C) 1989, 1990, 1991, 1992, 1993, 2004 Free Software + Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -102,6 +104,7 @@ path_search (const char *dir) FILE *fp; includes *incl; char *name; /* buffer for constructed name */ + int e; /* Look in current working directory first. */ fp = fopen (dir, "r"); @@ -111,6 +114,7 @@ path_search (const char *dir) /* If file not found, and filename absolute, fail. */ if (*dir == '/' || no_gnu_extensions) return NULL; + e = errno; name = (char *) xmalloc (dir_max_length + 1 + strlen (dir) + 1); @@ -133,6 +137,7 @@ path_search (const char *dir) } } xfree (name); + errno = e; return fp; } _______________________________________________ Autoconf mailing list Autoconf@xxxxxxx http://lists.gnu.org/mailman/listinfo/autoconf