Mercurial > hg > octave-lyh > gnulib-hg
changeset 9622:7b32838d1079
Replace strsignal if it does not work fine.
author | Bruno Haible <bruno@clisp.org> |
---|---|
date | Tue, 15 Jan 2008 02:25:14 +0100 |
parents | d4bef14f119a |
children | 69d9307c0aa0 |
files | ChangeLog lib/string.in.h m4/string_h.m4 m4/strsignal.m4 modules/string tests/test-strsignal.c |
diffstat | 6 files changed, 67 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2008-01-14 Colin Watson <cjwatson@debian.org> + Bruno Haible <bruno@clisp.org> + + * m4/strsignal.m4 (gl_FUNC_STRSIGNAL): Also check whether strsignal + works fine; if not, set REPLACE_STRSIGNAL. + (gl_PREREQ_STRSIGNAL): Require AC_DECL_SYS_SIGLIST. + * m4/string_h.m4 (gl_HEADER_STRING_H_DEFAULTS): Initialize + REPLACE_STRSIGNAL. + * lib/string.in.h (strsignal): Consider REPLACE_STRSIGNAL. + * modules/string (Makefile.am): Substitute REPLACE_STRSIGNAL. + * tests/test-strsignal.c (main): Check out-of-range signal numbers. + 2008-01-14 Bruno Haible <bruno@clisp.org> * modules/strsignal (Include): Change to <string.h>.
--- a/lib/string.in.h +++ b/lib/string.in.h @@ -542,7 +542,10 @@ #endif #if @GNULIB_STRSIGNAL@ -# if ! @HAVE_DECL_STRSIGNAL@ +# if @REPLACE_STRSIGNAL@ +# define strsignal rpl_strsignal +# endif +# if ! @HAVE_DECL_STRSIGNAL@ || @REPLACE_STRSIGNAL@ extern char *strsignal (int __sig); # endif #elif defined GNULIB_POSIXCHECK
--- a/m4/string_h.m4 +++ b/m4/string_h.m4 @@ -5,7 +5,7 @@ # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. -# serial 3 +# serial 4 # Written by Paul Eggert. @@ -80,6 +80,7 @@ HAVE_DECL_STRERROR=1; AC_SUBST([HAVE_DECL_STRERROR]) HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) + REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) ])
--- a/m4/strsignal.m4 +++ b/m4/strsignal.m4 @@ -1,4 +1,4 @@ -# strsignal.m4 serial 1 +# strsignal.m4 serial 2 dnl Copyright (C) 2008 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, @@ -9,16 +9,47 @@ dnl Persuade glibc <string.h> to declare strsignal(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - AC_REQUIRE([AC_DECL_SYS_SIGLIST]) + AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles - AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) - AC_REPLACE_FUNCS([strsignal]) AC_CHECK_DECLS_ONCE([strsignal]) if test $ac_cv_have_decl_strsignal = no; then HAVE_DECL_STRSIGNAL=0 + fi + + AC_CHECK_FUNCS([strsignal]) + if test $ac_cv_func_strsignal = yes; then + dnl Check if strsignal behaves reasonably for out-of-range signal numbers. + dnl On Solaris it returns NULL; on AIX 5.1 it returns (char *) -1. + AC_CACHE_CHECK([whether strsignal always returns a string], + [gl_cv_func_working_strsignal], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include <string.h> + ]], + [[char *s = strsignal (-1); + return !(s != (char *) 0 && s != (char *) -1);]])], + [gl_cv_func_working_strsignal=yes], + [gl_cv_func_working_strsignal=no], + [case "$host_os" in + solaris* | aix*) gl_cv_func_working_strsignal=no;; + *) gl_cv_func_working_strsignal="guessing yes";; + esac])]) + else + gl_cv_func_working_strsignal=no + fi + + if test "$gl_cv_func_working_strsignal" = no; then + if test $ac_cv_func_strsignal = yes; then + REPLACE_STRSIGNAL=1 + fi + AC_LIBOBJ([strsignal]) gl_PREREQ_STRSIGNAL fi ]) # Prerequisites of lib/strsignal.c. -AC_DEFUN([gl_PREREQ_STRSIGNAL], [:]) +AC_DEFUN([gl_PREREQ_STRSIGNAL], [ + AC_REQUIRE([AC_DECL_SYS_SIGLIST]) + : +])
--- a/modules/string +++ b/modules/string @@ -72,6 +72,7 @@ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ + -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e '/definition of GL_LINK_WARNING/r $(LINK_WARNING_H)' \ < $(srcdir)/string.in.h; \ } > $@-t
--- a/tests/test-strsignal.c +++ b/tests/test-strsignal.c @@ -65,5 +65,17 @@ ASSERT_DESCRIPTION (str, "Interrupt"); #endif + /* Test that for out-of-range signal numbers the result is usable. */ + + str = strsignal (-1); + ASSERT (str); + ASSERT (str != (char *) -1); + ASSERT (strlen (str)); + + str = strsignal (9249234); + ASSERT (str); + ASSERT (str != (char *) -1); + ASSERT (strlen (str)); + return 0; }