| # Copyright (C) 1991-1999,2002,2004,2005 Free Software Foundation, Inc. |
| # This file is part of the GNU C Library. |
| |
| # The GNU C Library is free software; you can redistribute it and/or |
| # modify it under the terms of the GNU Lesser General Public |
| # License as published by the Free Software Foundation; either |
| # version 2.1 of the License, or (at your option) any later version. |
| |
| # The GNU C Library 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 |
| # Lesser General Public License for more details. |
| |
| # You should have received a copy of the GNU Lesser General Public |
| # License along with the GNU C Library; if not, write to the Free |
| # Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA |
| # 02111-1307 USA. |
| |
| # errno.texi contains lines like: |
| # @comment errno.h |
| # @comment POSIX.1: Function not implemented |
| # @deftypevr Macro int ENOSYS |
| # @comment errno 78 |
| # Descriptive paragraph... |
| # @end deftypevr |
| |
| BEGIN { |
| |
| # Here we list the E* names that might be duplicate names for the |
| # same integer value on some systems. This causes the code below |
| # to generate ``#if defined (ALIAS) && ALIAS != ORIGINAL'' in the code, |
| # so the output does not presume that these are in fact aliases. |
| # We list here all the known potential cases on any system, |
| # so that the C source we produce will do the right thing based |
| # on the actual #define'd values it's compiled with. |
| alias["EWOULDBLOCK"]= "EAGAIN"; |
| alias["EDEADLOCK"] = "EDEADLK"; |
| alias["ENOTSUP"] = "EOPNOTSUPP"; |
| |
| print "/* This file is generated from errno.texi by errlist.awk. */" |
| print ""; |
| print "#include <errno.h>"; |
| print "#include <libintl.h>"; |
| print ""; |
| print "#ifndef ERR_REMAP"; |
| print "# define ERR_REMAP(n) n"; |
| print "#endif"; |
| print ""; |
| |
| print "#if !defined EMIT_ERR_MAX && !defined ERRLIST_NO_COMPAT"; |
| print "# include <errlist-compat.h>"; |
| print "#endif"; |
| print "#ifdef ERR_MAX"; |
| print "# define ERRLIST_SIZE ERR_MAX + 1"; |
| print "#else" |
| print "# define ERRLIST_SIZE"; |
| print "#endif"; |
| |
| print "const char *const _sys_errlist_internal[ERRLIST_SIZE] ="; |
| print " {"; |
| print " [0] = N_(\"Success\")," |
| } |
| |
| $1 == "@comment" && $2 == "errno.h" { errnoh=1; next } |
| errnoh == 1 && $1 == "@comment" \ |
| { |
| ++errnoh; |
| etext = $3; |
| for (i = 4; i <= NF; ++i) |
| etext = etext " " $i; |
| next; |
| } |
| errnoh == 2 && $1 == "@deftypevr" && $2 == "Macro" && $3 == "int" \ |
| { |
| e = $4; errnoh++; next; |
| } |
| errnoh == 3 && $1 == "@comment" && $2 == "errno" \ |
| { |
| errno = $3 + 0; |
| if (alias[e]) |
| printf "#if defined (%s) && %s != %s\n", e, e, alias[e]; |
| else |
| printf "#ifdef %s\n", e; |
| errnoh = 4; |
| desc=""; |
| next; |
| } |
| errnoh == 4 && $1 == "@end" && $2 == "deftypevr" \ |
| { |
| printf "/*%s */\n", desc; |
| printf " [ERR_REMAP (%s)] = N_(\"%s\"),\n", e, etext; |
| printf "# if %s > ERR_MAX\n", e; |
| print "# undef ERR_MAX"; |
| printf "# define ERR_MAX %s\n", e; |
| print "# endif"; |
| print "#endif"; |
| errnoh = 0; |
| next; |
| } |
| errnoh == 4 \ |
| { |
| # This magic tag in C comments gets them copied into libc.pot. |
| desc = desc "\nTRANS " $0; next |
| } |
| { errnoh=0 } |
| END { |
| print " };"; |
| print ""; |
| print "#define NERR \\"; |
| print " (sizeof _sys_errlist_internal / sizeof _sys_errlist_internal [0])"; |
| print "const int _sys_nerr_internal = NERR;" |
| print ""; |
| print "#if !defined NOT_IN_libc && !ERRLIST_NO_COMPAT"; |
| print "# include <errlist-compat.c>"; |
| print "#endif"; |
| print ""; |
| print "#ifdef EMIT_ERR_MAX"; |
| print "void dummy (void)" |
| print "{ asm volatile (\" @@@ %0 @@@ \" : : \"i\" (ERR_REMAP (ERR_MAX))); }" |
| print "#endif"; |
| } |