bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Make errno.h define EILSEQ on old LynxOS systems.


From: Joel Brobecker
Subject: Re: [PATCH] Make errno.h define EILSEQ on old LynxOS systems.
Date: Mon, 5 Nov 2012 06:56:05 -0800
User-agent: Mutt/1.5.21 (2010-09-15)

> The patch needs to modify a few more files to be complete, I think.
> Also, I don't think we need to make a special case for LynxOS -- any
> system that doesn't define EILSEQ can benefit from the change.  So,
> how about the following patch instead?

Thanks, Paul.  The only issue I have with your approach is the fact
that some systems define EILSEQ in wchar.h rather than errno.h
(I am not sure whether I had a list of some such systems at some
point, or not).  If someone happens to include both errno.h and then
wchar.h, we'll probably get a warning/error due to the values being
different. One of the avenues I contemplated in order to handle
this situation was to include wchar.h if EILSEQ isn't defined, and then
only define EILSEQ if still not defined.  Something like this:

    #ifndef EILSEQ
    #  ifdef HAVE_WCHAR_H
    #    include <wchar.h>
    #  endif
    #  ifndef EILSEQ
    #    define EILSEQ 2015
    #    define GNULIB_defined_EILSEQ
    #  endif
    #endif

I did not follow this up, because if feels awkward to be including
another header file, particularly when we're not even sure that
it is in fact going to contain the definition we're looking for.
But I don't think it would be the first time we're doing something
like that (stdint.h).

Cheers,
-- 
Joel

> 
> >From 28f490315e02177c9747e03e6e86e27987343797 Mon Sep 17 00:00:00 2001
> From: Paul Eggert <address@hidden>
> Date: Thu, 1 Nov 2012 15:29:14 -0700
> Subject: [PATCH] errno: port to LynxOS 178 2.2.2
> 
> Problem reported by Joel Brobecker in
> <http://lists.gnu.org/archive/html/bug-gnulib/2012-10/msg00088.html>.
> * doc/posix-headers/errno.texi (errno.h): Document this.
> * lib/errno.in.h (EILSEQ, GNULIB_defined_EILSEQ) [!EILSEQ]: New macros.
> * lib/strerror-override.c, lib/strerror-override.h (strerror_override):
> Supply a string for EILSEQ.
> * m4/errno_h.m4 (gl_HEADER_ERRNO_H): Check for EILSEQ.
> ---
>  ChangeLog                    | 11 +++++++++++
>  doc/posix-headers/errno.texi |  3 +++
>  lib/errno.in.h               |  5 +++++
>  lib/strerror-override.c      |  5 +++++
>  lib/strerror-override.h      |  3 ++-
>  m4/errno_h.m4                |  5 ++++-
>  6 files changed, 30 insertions(+), 2 deletions(-)
> 
> diff --git a/ChangeLog b/ChangeLog
> index 720b7a2..c74d311 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,14 @@
> +2012-11-01  Paul Eggert  <address@hidden>
> +
> +     errno: port to LynxOS 178 2.2.2
> +     Problem reported by Joel Brobecker in
> +     <http://lists.gnu.org/archive/html/bug-gnulib/2012-10/msg00088.html>.
> +     * doc/posix-headers/errno.texi (errno.h): Document this.
> +     * lib/errno.in.h (EILSEQ, GNULIB_defined_EILSEQ) [!EILSEQ]: New macros.
> +     * lib/strerror-override.c, lib/strerror-override.h (strerror_override):
> +     Supply a string for EILSEQ.
> +     * m4/errno_h.m4 (gl_HEADER_ERRNO_H): Check for EILSEQ.
> +
>  2012-11-01  Akim Demaille  <address@hidden>
>  
>       quote: provide a means to escape strings with nul characters
> diff --git a/doc/posix-headers/errno.texi b/doc/posix-headers/errno.texi
> index 54e0249..0166ddc 100644
> --- a/doc/posix-headers/errno.texi
> +++ b/doc/posix-headers/errno.texi
> @@ -42,6 +42,9 @@ The macros @code{EOWNERDEAD}, @code{ENOTRECOVERABLE} are 
> not defined on
>  some platforms:
>  glibc/Linux 2.3.6, glibc/Hurd 2.15, glibc/kFreeBSD 2.15,
>  Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8, AIX 5.1, 
> HP-UX 11, IRIX 6.5, OSF/1 5.1, Cygwin, mingw without pthreads-win32, MSVC 9, 
> Interix 3.5, BeOS.
> address@hidden
> +The macro @code{EILSEQ} is not defined on some platforms:
> +LynxOS 178 2.2.2.
>  @end itemize
>  
>  Portability problems not fixed by Gnulib:
> diff --git a/lib/errno.in.h b/lib/errno.in.h
> index 4fba101..ec18b41 100644
> --- a/lib/errno.in.h
> +++ b/lib/errno.in.h
> @@ -270,5 +270,10 @@
>  #  define GNULIB_defined_ENOTRECOVERABLE 1
>  # endif
>  
> +# ifndef EILSEQ
> +#  define EILSEQ 2015
> +#  define GNULIB_defined_EILSEQ 1
> +# endif
> +
>  #endif /* address@hidden@_ERRNO_H */
>  #endif /* address@hidden@_ERRNO_H */
> diff --git a/lib/strerror-override.c b/lib/strerror-override.c
> index 9f55cfa..f7cac65 100644
> --- a/lib/strerror-override.c
> +++ b/lib/strerror-override.c
> @@ -291,6 +291,11 @@ strerror_override (int errnum)
>        return "State not recoverable";
>  #endif
>  
> +#if GNULIB_defined_EILSEQ
> +    case EILSEQ:
> +      return "Invalid or incomplete multibyte or wide character";
> +#endif
> +
>      default:
>        return NULL;
>      }
> diff --git a/lib/strerror-override.h b/lib/strerror-override.h
> index fe1fb2c..6468681 100644
> --- a/lib/strerror-override.h
> +++ b/lib/strerror-override.h
> @@ -46,7 +46,8 @@
>       || GNULIB_defined_EDQUOT \
>       || GNULIB_defined_ECANCELED \
>       || GNULIB_defined_EOWNERDEAD \
> -     || GNULIB_defined_ENOTRECOVERABLE
> +     || GNULIB_defined_ENOTRECOVERABLE \
> +     || GNULIB_defined_EILSEQ
>  extern const char *strerror_override (int errnum);
>  # else
>  #  define strerror_override(ignored) NULL
> diff --git a/m4/errno_h.m4 b/m4/errno_h.m4
> index 1e76ba2..4e33ba8 100644
> --- a/m4/errno_h.m4
> +++ b/m4/errno_h.m4
> @@ -1,4 +1,4 @@
> -# errno_h.m4 serial 11
> +# errno_h.m4 serial 12
>  dnl Copyright (C) 2004, 2006, 2008-2012 Free Software Foundation, Inc.
>  dnl This file is free software; the Free Software Foundation
>  dnl gives unlimited permission to copy and/or distribute it,
> @@ -58,6 +58,9 @@ booboo
>  #if !defined ENOTRECOVERABLE
>  booboo
>  #endif
> +#if !defined EILSEQ
> +booboo
> +#endif
>        ],
>        [gl_cv_header_errno_h_complete=no],
>        [gl_cv_header_errno_h_complete=yes])
> -- 
> 1.7.11.7

-- 
Joel



reply via email to

[Prev in Thread] Current Thread [Next in Thread]