mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-30 10:45:40 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			88 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Awk
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Awk
		
	
	
	
	
	
| # Script to produce bits/errno.h for NaCl.
 | |
| 
 | |
| # Copyright (C) 2015-2016 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, see
 | |
| # <http://www.gnu.org/licenses/>.
 | |
| 
 | |
| BEGIN { maxerrno = 0 }
 | |
| 
 | |
| $1 == "#define" && $2 ~ /NACL_ABI_E[A-Z0-9_]+/ && $3 ~ /[0-9]+/ {
 | |
|   ename = $2;
 | |
|   sub(/NACL_ABI_/, "", ename);
 | |
|   errno = $3 + 0;
 | |
|   if (errno > maxerrno) maxerrno = errno;
 | |
|   errnos[errno] = ename;
 | |
|   errnos_by_name[ename] = errno;
 | |
|   if ($4 == "/*" && !(ename in errno_text)) {
 | |
|     etext = $5;
 | |
|     for (i = 6; i <= NF && $i != "*/"; ++i)
 | |
|       etext = etext " " $i;
 | |
|     errno_text[ename] = etext;
 | |
|   }
 | |
|   next;
 | |
| }
 | |
| 
 | |
| $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" {
 | |
|   ename = $4;
 | |
|   errno_text[ename] = etext;
 | |
|   next;
 | |
| }
 | |
| 
 | |
| function define_errno(errno, ename) {
 | |
|   etext = errno_text[ename];
 | |
|   if (length(ename) < 8) ename = ename "\t";
 | |
|   printf "#define\t%s\t%d\t/* %s */\n", ename, errno, etext;
 | |
| }
 | |
| 
 | |
| END {
 | |
|   print "\
 | |
| /* This file generated by errnos.awk.  */\n\
 | |
| \n\
 | |
| #if !defined __Emath_defined && (defined _ERRNO_H || defined __need_Emath)\n\
 | |
| #undef	__need_Emath\n\
 | |
| #define	__Emath_defined	1";
 | |
|   emath["EDOM"] = emath["EILSEQ"] = emath["ERANGE"] = 1;
 | |
|   for (ename in emath) {
 | |
|     errno = errnos_by_name[ename];
 | |
|     define_errno(errno, ename);
 | |
|     delete errnos[errno];
 | |
|   }
 | |
|   print "\
 | |
| #endif\n\
 | |
| \n\
 | |
| #ifdef _ERRNO_H\n";
 | |
| 
 | |
|   for (i = 1; i <= maxerrno; ++i)
 | |
|     if (i in errnos) define_errno(i, errnos[i]);
 | |
| 
 | |
|   print "\n\
 | |
| #define	EWOULDBLOCK	EAGAIN\n\
 | |
| #define	ENOTSUP		EOPNOTSUPP\n\
 | |
| \n\
 | |
| extern __thread int errno __attribute__ ((__tls_model__ (\"initial-exec\")));\n\
 | |
| #define errno errno\n\
 | |
| \n\
 | |
| #endif";
 | |
| }
 |