mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-20 17:53:02 +00:00
* m4/strerror_r.m4: New.
* m4/error.m4: Run AC_FUNC_STRERROR_R. * lib/error.h, lib/error.c: Update.
This commit is contained in:
@@ -1,3 +1,9 @@
|
|||||||
|
2001-03-16 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
|
* m4/strerror_r.m4: New.
|
||||||
|
* m4/error.m4: Run AC_FUNC_STRERROR_R.
|
||||||
|
* lib/error.h, lib/error.c: Update.
|
||||||
|
|
||||||
2001-03-16 Akim Demaille <akim@epita.fr>
|
2001-03-16 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
* src/getargs.c (longopts): Clean up.
|
* src/getargs.c (longopts): Clean up.
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
|||||||
$(ACLOCAL_M4): configure.in m4/atconfig.m4 m4/c-bs-a.m4 m4/error.m4 \
|
$(ACLOCAL_M4): configure.in m4/atconfig.m4 m4/c-bs-a.m4 m4/error.m4 \
|
||||||
m4/gettext.m4 m4/lcmessage.m4 m4/m4.m4 m4/malloc.m4 \
|
m4/gettext.m4 m4/lcmessage.m4 m4/m4.m4 m4/malloc.m4 \
|
||||||
m4/mbstate_t.m4 m4/prereq.m4 m4/progtest.m4 \
|
m4/mbstate_t.m4 m4/prereq.m4 m4/progtest.m4 \
|
||||||
m4/realloc.m4 m4/warning.m4
|
m4/realloc.m4 m4/strerror_r.m4 m4/warning.m4
|
||||||
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
||||||
|
|
||||||
config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
||||||
|
|||||||
92
aclocal.m4
vendored
92
aclocal.m4
vendored
@@ -423,6 +423,86 @@ AC_DEFUN(AC_MBSTATE_T,
|
|||||||
[Define to a type if <wchar.h> does not define.])
|
[Define to a type if <wchar.h> does not define.])
|
||||||
fi])
|
fi])
|
||||||
|
|
||||||
|
#serial 1
|
||||||
|
|
||||||
|
dnl FIXME: put these prerequisite-only *.m4 files in a separate
|
||||||
|
dnl directory -- otherwise, they'll conflict with existing files.
|
||||||
|
|
||||||
|
dnl These are the prerequisite macros for GNU's error.c file.
|
||||||
|
AC_DEFUN(jm_PREREQ_ERROR,
|
||||||
|
[
|
||||||
|
AC_CHECK_FUNCS(strerror strerror_r vprintf doprnt)
|
||||||
|
AC_HEADER_STDC
|
||||||
|
AC_FUNC_STRERROR_R
|
||||||
|
])
|
||||||
|
|
||||||
|
#serial 1002
|
||||||
|
# Experimental replacement for the function in the latest CVS autoconf.
|
||||||
|
# If the compile-test says strerror_r doesn't work, then resort to a
|
||||||
|
# `run'-test that works on BeOS and segfaults on DEC Unix.
|
||||||
|
# Use with the error.c file in ../lib.
|
||||||
|
|
||||||
|
undefine([AC_FUNC_STRERROR_R])
|
||||||
|
|
||||||
|
# AC_FUNC_STRERROR_R
|
||||||
|
# ------------------
|
||||||
|
AC_DEFUN([AC_FUNC_STRERROR_R],
|
||||||
|
[AC_CHECK_DECLS([strerror_r])
|
||||||
|
AC_CHECK_FUNCS([strerror_r])
|
||||||
|
if test $ac_cv_func_strerror_r = yes; then
|
||||||
|
AC_CHECK_HEADERS(string.h)
|
||||||
|
AC_CACHE_CHECK([for working strerror_r],
|
||||||
|
ac_cv_func_strerror_r_works,
|
||||||
|
[
|
||||||
|
AC_TRY_COMPILE(
|
||||||
|
[
|
||||||
|
# include <stdio.h>
|
||||||
|
# if HAVE_STRING_H
|
||||||
|
# include <string.h>
|
||||||
|
# endif
|
||||||
|
],
|
||||||
|
[
|
||||||
|
char buf[100];
|
||||||
|
char x = *strerror_r (0, buf, sizeof buf);
|
||||||
|
],
|
||||||
|
ac_cv_func_strerror_r_works=yes,
|
||||||
|
ac_cv_func_strerror_r_works=no
|
||||||
|
)
|
||||||
|
if test $ac_cv_func_strerror_r_works = no; then
|
||||||
|
# strerror_r seems not to work, but now we have to choose between
|
||||||
|
# systems that have relatively inaccessible declarations for the
|
||||||
|
# function. BeOS and DEC UNIX 4.0 fall in this category, but the
|
||||||
|
# former has a strerror_r that returns char*, while the latter
|
||||||
|
# has a strerror_r that returns `int'.
|
||||||
|
# This test should segfault on the DEC system.
|
||||||
|
AC_TRY_RUN(
|
||||||
|
[
|
||||||
|
# include <stdio.h>
|
||||||
|
# include <string.h>
|
||||||
|
# include <ctype.h>
|
||||||
|
|
||||||
|
extern char *strerror_r ();
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
char buf[100];
|
||||||
|
char x = *strerror_r (0, buf, sizeof buf);
|
||||||
|
exit (!isalpha (x));
|
||||||
|
}
|
||||||
|
],
|
||||||
|
ac_cv_func_strerror_r_works=yes,
|
||||||
|
ac_cv_func_strerror_r_works=no,
|
||||||
|
ac_cv_func_strerror_r_works=no)
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
if test $ac_cv_func_strerror_r_works = yes; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WORKING_STRERROR_R, 1,
|
||||||
|
[Define to 1 if `strerror_r' returns a string.])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
])# AC_FUNC_STRERROR_R
|
||||||
|
|
||||||
# Macro to add for using GNU gettext.
|
# Macro to add for using GNU gettext.
|
||||||
# Ulrich Drepper <drepper@cygnus.com>, 1995.
|
# Ulrich Drepper <drepper@cygnus.com>, 1995.
|
||||||
#
|
#
|
||||||
@@ -813,15 +893,3 @@ AC_DEFUN(AM_LC_MESSAGES,
|
|||||||
fi
|
fi
|
||||||
fi])
|
fi])
|
||||||
|
|
||||||
#serial 1
|
|
||||||
|
|
||||||
dnl FIXME: put these prerequisite-only *.m4 files in a separate
|
|
||||||
dnl directory -- otherwise, they'll conflict with existing files.
|
|
||||||
|
|
||||||
dnl These are the prerequisite macros for GNU's error.c file.
|
|
||||||
AC_DEFUN(jm_PREREQ_ERROR,
|
|
||||||
[
|
|
||||||
AC_CHECK_FUNCS(strerror strerror_r vprintf doprnt)
|
|
||||||
AC_HEADER_STDC
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,10 @@
|
|||||||
*/
|
*/
|
||||||
#undef HAVE_DECL_STPCPY
|
#undef HAVE_DECL_STPCPY
|
||||||
|
|
||||||
|
/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you
|
||||||
|
don't. */
|
||||||
|
#undef HAVE_DECL_STRERROR_R
|
||||||
|
|
||||||
/* Define to 1 if you have the declaration of `strndup', and to 0 if you
|
/* Define to 1 if you have the declaration of `strndup', and to 0 if you
|
||||||
don't. */
|
don't. */
|
||||||
#undef HAVE_DECL_STRNDUP
|
#undef HAVE_DECL_STRNDUP
|
||||||
@@ -171,6 +175,9 @@
|
|||||||
/* Define if you have the <wctype.h> header file. */
|
/* Define if you have the <wctype.h> header file. */
|
||||||
#undef HAVE_WCTYPE_H
|
#undef HAVE_WCTYPE_H
|
||||||
|
|
||||||
|
/* Define to 1 if `strerror_r' returns a string. */
|
||||||
|
#undef HAVE_WORKING_STRERROR_R
|
||||||
|
|
||||||
/* Define if you have the `__argz_count' function. */
|
/* Define if you have the `__argz_count' function. */
|
||||||
#undef HAVE___ARGZ_COUNT
|
#undef HAVE___ARGZ_COUNT
|
||||||
|
|
||||||
|
|||||||
@@ -69,10 +69,10 @@ AC_REPLACE_FUNCS(stpcpy strndup strnlen memchr)
|
|||||||
jm_FUNC_MALLOC
|
jm_FUNC_MALLOC
|
||||||
jm_FUNC_REALLOC
|
jm_FUNC_REALLOC
|
||||||
jm_PREREQ_QUOTEARG
|
jm_PREREQ_QUOTEARG
|
||||||
|
jm_PREREQ_ERROR
|
||||||
|
|
||||||
ALL_LINGUAS="de es et fr ja nl ru"
|
ALL_LINGUAS="de es et fr ja nl ru"
|
||||||
AM_GNU_GETTEXT
|
AM_GNU_GETTEXT
|
||||||
jm_PREREQ_ERROR
|
|
||||||
|
|
||||||
# This is necessary so that .o files in LIBOBJS are also built via
|
# This is necessary so that .o files in LIBOBJS are also built via
|
||||||
# the ANSI2KNR-filtering rules.
|
# the ANSI2KNR-filtering rules.
|
||||||
|
|||||||
17
lib/error.c
17
lib/error.c
@@ -1,5 +1,5 @@
|
|||||||
/* Error handler for noninteractive utilities
|
/* Error handler for noninteractive utilities
|
||||||
Copyright (C) 1990-2000 Free Software Foundation, Inc.
|
Copyright (C) 1990-1998, 2000 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of the GNU C Library. Its master source is NOT part of
|
This file is part of the GNU C Library. Its master source is NOT part of
|
||||||
the C library, however. The master source lives in /gd/gnu/lib.
|
the C library, however. The master source lives in /gd/gnu/lib.
|
||||||
@@ -26,6 +26,9 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#if HAVE_LIBINTL_H
|
||||||
|
# include <libintl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if HAVE_VPRINTF || HAVE_DOPRNT || _LIBC
|
#if HAVE_VPRINTF || HAVE_DOPRNT || _LIBC
|
||||||
# if __STDC__
|
# if __STDC__
|
||||||
@@ -49,6 +52,13 @@ void exit ();
|
|||||||
|
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_DECL_STRERROR_R
|
||||||
|
"this configure-time declaration test was not run"
|
||||||
|
#endif
|
||||||
|
#if !HAVE_DECL_STRERROR_R
|
||||||
|
char *strerror_r ();
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef _
|
#ifndef _
|
||||||
# define _(String) String
|
# define _(String) String
|
||||||
#endif
|
#endif
|
||||||
@@ -76,6 +86,11 @@ unsigned int error_message_count;
|
|||||||
# define error __error
|
# define error __error
|
||||||
# define error_at_line __error_at_line
|
# define error_at_line __error_at_line
|
||||||
|
|
||||||
|
# ifdef USE_IN_LIBIO
|
||||||
|
# include <libio/iolibio.h>
|
||||||
|
# define fflush(s) _IO_fflush (s)
|
||||||
|
# endif
|
||||||
|
|
||||||
#else /* not _LIBC */
|
#else /* not _LIBC */
|
||||||
|
|
||||||
/* The calling program should define program_name and set it to the
|
/* The calling program should define program_name and set it to the
|
||||||
|
|||||||
78
lib/error.h
78
lib/error.h
@@ -76,81 +76,3 @@ extern int error_one_per_line;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* error.h */
|
#endif /* error.h */
|
||||||
/* Declaration for error-reporting function
|
|
||||||
Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
|
|
||||||
NOTE: The canonical source of this file is maintained with the GNU C Library.
|
|
||||||
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
|
|
||||||
|
|
||||||
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 the
|
|
||||||
Free Software Foundation; either version 2, or (at your option) any
|
|
||||||
later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
|
||||||
USA. */
|
|
||||||
|
|
||||||
#ifndef _ERROR_H
|
|
||||||
#define _ERROR_H 1
|
|
||||||
|
|
||||||
#ifndef __attribute__
|
|
||||||
/* This feature is available in gcc versions 2.5 and later. */
|
|
||||||
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
|
|
||||||
# define __attribute__(Spec) /* empty */
|
|
||||||
# endif
|
|
||||||
/* The __-protected variants of `format' and `printf' attributes
|
|
||||||
are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */
|
|
||||||
# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
|
|
||||||
# define __format__ format
|
|
||||||
# define __printf__ printf
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined (__STDC__) && __STDC__
|
|
||||||
|
|
||||||
/* Print a message with `fprintf (stderr, FORMAT, ...)';
|
|
||||||
if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM).
|
|
||||||
If STATUS is nonzero, terminate the program with `exit (STATUS)'. */
|
|
||||||
|
|
||||||
extern void error (int status, int errnum, const char *format, ...)
|
|
||||||
__attribute__ ((__format__ (__printf__, 3, 4)));
|
|
||||||
|
|
||||||
extern void error_at_line (int status, int errnum, const char *fname,
|
|
||||||
unsigned int lineno, const char *format, ...)
|
|
||||||
__attribute__ ((__format__ (__printf__, 5, 6)));
|
|
||||||
|
|
||||||
/* If NULL, error will flush stdout, then print on stderr the program
|
|
||||||
name, a colon and a space. Otherwise, error will call this
|
|
||||||
function without parameters instead. */
|
|
||||||
extern void (*error_print_progname) (void);
|
|
||||||
|
|
||||||
#else
|
|
||||||
void error ();
|
|
||||||
void error_at_line ();
|
|
||||||
extern void (*error_print_progname) ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* This variable is incremented each time `error' is called. */
|
|
||||||
extern unsigned int error_message_count;
|
|
||||||
|
|
||||||
/* Sometimes we want to have at most one error per line. This
|
|
||||||
variable controls whether this mode is selected or not. */
|
|
||||||
extern int error_one_per_line;
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* error.h */
|
|
||||||
|
|||||||
@@ -10,5 +10,6 @@ malloc.m4 \
|
|||||||
mbstate_t.m4 \
|
mbstate_t.m4 \
|
||||||
prereq.m4 \
|
prereq.m4 \
|
||||||
progtest.m4 \
|
progtest.m4 \
|
||||||
|
strerror_r.m4 \
|
||||||
realloc.m4 \
|
realloc.m4 \
|
||||||
warning.m4
|
warning.m4
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ VERSION = @VERSION@
|
|||||||
WARNING_CFLAGS = @WARNING_CFLAGS@
|
WARNING_CFLAGS = @WARNING_CFLAGS@
|
||||||
l = @l@
|
l = @l@
|
||||||
|
|
||||||
EXTRA_DIST = atconfig.m4 c-bs-a.m4 error.m4 gettext.m4 lcmessage.m4 m4.m4 malloc.m4 mbstate_t.m4 prereq.m4 progtest.m4 realloc.m4 warning.m4
|
EXTRA_DIST = atconfig.m4 c-bs-a.m4 error.m4 gettext.m4 lcmessage.m4 m4.m4 malloc.m4 mbstate_t.m4 prereq.m4 progtest.m4 strerror_r.m4 realloc.m4 warning.m4
|
||||||
|
|
||||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||||
CONFIG_HEADER = ../config.h
|
CONFIG_HEADER = ../config.h
|
||||||
|
|||||||
@@ -8,4 +8,5 @@ AC_DEFUN(jm_PREREQ_ERROR,
|
|||||||
[
|
[
|
||||||
AC_CHECK_FUNCS(strerror strerror_r vprintf doprnt)
|
AC_CHECK_FUNCS(strerror strerror_r vprintf doprnt)
|
||||||
AC_HEADER_STDC
|
AC_HEADER_STDC
|
||||||
|
AC_FUNC_STRERROR_R
|
||||||
])
|
])
|
||||||
|
|||||||
66
m4/strerror_r.m4
Normal file
66
m4/strerror_r.m4
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
#serial 1002
|
||||||
|
# Experimental replacement for the function in the latest CVS autoconf.
|
||||||
|
# If the compile-test says strerror_r doesn't work, then resort to a
|
||||||
|
# `run'-test that works on BeOS and segfaults on DEC Unix.
|
||||||
|
# Use with the error.c file in ../lib.
|
||||||
|
|
||||||
|
undefine([AC_FUNC_STRERROR_R])
|
||||||
|
|
||||||
|
# AC_FUNC_STRERROR_R
|
||||||
|
# ------------------
|
||||||
|
AC_DEFUN([AC_FUNC_STRERROR_R],
|
||||||
|
[AC_CHECK_DECLS([strerror_r])
|
||||||
|
AC_CHECK_FUNCS([strerror_r])
|
||||||
|
if test $ac_cv_func_strerror_r = yes; then
|
||||||
|
AC_CHECK_HEADERS(string.h)
|
||||||
|
AC_CACHE_CHECK([for working strerror_r],
|
||||||
|
ac_cv_func_strerror_r_works,
|
||||||
|
[
|
||||||
|
AC_TRY_COMPILE(
|
||||||
|
[
|
||||||
|
# include <stdio.h>
|
||||||
|
# if HAVE_STRING_H
|
||||||
|
# include <string.h>
|
||||||
|
# endif
|
||||||
|
],
|
||||||
|
[
|
||||||
|
char buf[100];
|
||||||
|
char x = *strerror_r (0, buf, sizeof buf);
|
||||||
|
],
|
||||||
|
ac_cv_func_strerror_r_works=yes,
|
||||||
|
ac_cv_func_strerror_r_works=no
|
||||||
|
)
|
||||||
|
if test $ac_cv_func_strerror_r_works = no; then
|
||||||
|
# strerror_r seems not to work, but now we have to choose between
|
||||||
|
# systems that have relatively inaccessible declarations for the
|
||||||
|
# function. BeOS and DEC UNIX 4.0 fall in this category, but the
|
||||||
|
# former has a strerror_r that returns char*, while the latter
|
||||||
|
# has a strerror_r that returns `int'.
|
||||||
|
# This test should segfault on the DEC system.
|
||||||
|
AC_TRY_RUN(
|
||||||
|
[
|
||||||
|
# include <stdio.h>
|
||||||
|
# include <string.h>
|
||||||
|
# include <ctype.h>
|
||||||
|
|
||||||
|
extern char *strerror_r ();
|
||||||
|
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
char buf[100];
|
||||||
|
char x = *strerror_r (0, buf, sizeof buf);
|
||||||
|
exit (!isalpha (x));
|
||||||
|
}
|
||||||
|
],
|
||||||
|
ac_cv_func_strerror_r_works=yes,
|
||||||
|
ac_cv_func_strerror_r_works=no,
|
||||||
|
ac_cv_func_strerror_r_works=no)
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
if test $ac_cv_func_strerror_r_works = yes; then
|
||||||
|
AC_DEFINE_UNQUOTED(HAVE_WORKING_STRERROR_R, 1,
|
||||||
|
[Define to 1 if `strerror_r' returns a string.])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
])# AC_FUNC_STRERROR_R
|
||||||
@@ -10,5 +10,5 @@ stderr
|
|||||||
stdout
|
stdout
|
||||||
testsuite
|
testsuite
|
||||||
calc.[chy]
|
calc.[chy]
|
||||||
calc.c.*
|
calc.tab.*
|
||||||
calc
|
calc
|
||||||
|
|||||||
Reference in New Issue
Block a user