[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] perror: test for output mismatch
From: |
Bruno Haible |
Subject: |
Re: [PATCH] perror: test for output mismatch |
Date: |
Sat, 22 Oct 2011 14:22:09 +0200 |
User-agent: |
KMail/1.13.6 (Linux/2.6.37.6-0.5-desktop; KDE/4.6.0; x86_64; ; ) |
Eric Blake wrote on 2011-06-21:
> diff --git a/ChangeLog b/ChangeLog
> index 07f3819..36d72ae 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,5 +1,9 @@
> 2011-06-21 Eric Blake <address@hidden>
>
> + perror: test for output mismatch
> + * m4/perror.m4 (gl_FUNC_PERROR): Add test, in order to replace
> + perror on IRIX.
> +
> strerror_r: fix OpenBSD behavior on out-of-range
> * lib/strerror_r.c (strerror_r): Always use maximal string.
> * doc/posix-functions/strerror_r.texi (strerror_r): Document it.
> diff --git a/m4/perror.m4 b/m4/perror.m4
> index d08f365..86e2020 100644
> --- a/m4/perror.m4
> +++ b/m4/perror.m4
> @@ -1,4 +1,4 @@
> -# perror.m4 serial 2
> +# perror.m4 serial 3
> dnl Copyright (C) 2008-2011 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,13 +9,45 @@ AC_DEFUN([gl_FUNC_PERROR],
> AC_REQUIRE([gl_STDIO_H_DEFAULTS])
> AC_REQUIRE([gl_HEADER_ERRNO_H])
> AC_REQUIRE([gl_FUNC_STRERROR_R])
> - if test -n "$ERRNO_H"; then
> + AC_REQUIRE([gl_FUNC_STRERROR_0])
> + dnl We intentionally do not check for the broader REPLACE_STRERROR_R,
> + dnl since on glibc systems, strerror_r is replaced only for signature
> + dnl issues, and perror is just fine. Rather, we only want to
> + dnl replace perror if strerror_r was replaced for a content fix.
> + if test "$ERRNO_H:$REPLACE_STRERROR_0" != :0; then
> dnl The system's perror() cannot know about the new errno values we add
> - dnl to <errno.h>. Replace it.
> + dnl to <errno.h>, or any fix for strerror(0). Replace it.
> REPLACE_PERROR=1
> fi
> case ${gl_cv_func_strerror_r_works-unset} in
> - unset|*yes) ;;
> + unset|*yes)
> + AC_CACHE_CHECK([whether perror matches strerror],
> + [gl_cv_func_perror_works],
> + [AC_RUN_IFELSE(
> + [AC_LANG_PROGRAM(
> + [[#include <errno.h>
> + #include <stdio.h>
> + ]],
> + [[char *str = strerror (-1);
> + if (!getenv("CONFTEST_OUTPUT")) return 0;
> + if (!str) str = "";
> + puts (str);
> + errno = -1;
> + perror ("");
> + ]])],
> + [CONFTEST_OUTPUT=1 ./conftest$EXEEXT >conftest.txt1
> 2>conftest.txt2
> + if cmp conftest.txt1 conftest.txt2 >/dev/null; then
> + gl_cv_func_perror_works=yes
> + else
> + gl_cv_func_perror_works=no
> + fi
> + rm -rf conftest.txt1 conftest.txt2],
> + [gl_cv_func_perror_works=no],
> + [dnl Guess no when cross-compiling.
> + gl_cv_func_perror_works="guessing no"])])
> + if test "$gl_cv_func_perror_works" != yes; then
> + REPLACE_PERROR=1
> + fi ;;
> *) dnl The system's perror() probably inherits the bugs in the
> dnl system's strerror_r(). Replace it.
> REPLACE_PERROR=1 ;;
Sorry, but the indentation in this patch is not consistent: 2 vs. 3 spaces
in the same case alternative. I'm fixing it like this.
Probably the tendency to put all closing ])])]) parentheses and brackets
on the end of the same line contributed to this mistake. I'm in favour
of aligning corresponding brackets vertically if it can avoid misindentation
or - worse - confusion about which is the corresponding opening bracket.
2011-10-22 Bruno Haible <address@hidden>
perror: Fix indentation.
* m4/perror.m4 (gl_FUNC_PERROR): Fix indentation.
*** m4/perror.m4.orig Sat Oct 22 14:20:29 2011
--- m4/perror.m4 Sat Oct 22 14:16:55 2011
***************
*** 1,4 ****
! # perror.m4 serial 4
dnl Copyright (C) 2008-2011 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
--- 1,4 ----
! # perror.m4 serial 5
dnl Copyright (C) 2008-2011 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
***************
*** 46,57 ****
rm -rf conftest.txt1 conftest.txt2],
[gl_cv_func_perror_works=no],
[dnl Guess no when cross-compiling.
! gl_cv_func_perror_works="guessing no"])])
! if test "$gl_cv_func_perror_works" != yes; then
! REPLACE_PERROR=1
! fi ;;
! *) dnl The system's perror() probably inherits the bugs in the
! dnl system's strerror_r(). Replace it.
! REPLACE_PERROR=1 ;;
esac
])
--- 46,62 ----
rm -rf conftest.txt1 conftest.txt2],
[gl_cv_func_perror_works=no],
[dnl Guess no when cross-compiling.
! gl_cv_func_perror_works="guessing no"
! ])
! ])
! if test "$gl_cv_func_perror_works" != yes; then
! REPLACE_PERROR=1
! fi
! ;;
! *)
! dnl The system's perror() probably inherits the bugs in the
! dnl system's strerror_r(). Replace it.
! REPLACE_PERROR=1
! ;;
esac
])
--
In memoriam Nunilo and Alodia <http://en.wikipedia.org/wiki/Nunilo_and_Alodia>
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH] perror: test for output mismatch,
Bruno Haible <=