mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-31 22:10:34 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			169 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Awk
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Awk
		
	
	
	
	
	
| # Copyright (C) 1991,92,93,94,95,96,97,2000,01,02
 | |
| #	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/>.
 | |
| 
 | |
| # errno.texinfo contains lines like:
 | |
| # @comment errno.h
 | |
| # @comment POSIX.1: Function not implemented
 | |
| # @deftypevr Macro int ENOSYS
 | |
| # @comment errno 123
 | |
| 
 | |
| BEGIN {
 | |
|     print "/* This file generated by errnos.awk.  */";
 | |
|     print "";
 | |
|     print "/* The Hurd uses Mach error system 0x10, currently only subsystem 0. */";
 | |
|     print "#ifndef _HURD_ERRNO";
 | |
|     print "#define _HURD_ERRNO(n)\t((0x10 << 26) | ((n) & 0x3fff))";
 | |
|     print "#endif";
 | |
|     print "";
 | |
|     print "#ifdef _ERRNO_H\n";
 | |
|     print "enum __error_t_codes\n{";
 | |
|     errnoh = 0;
 | |
|     maxerrno = 0;
 | |
|     in_mach_errors = "";
 | |
|     in_math = 0;
 | |
|     edom = erange = "";
 | |
|     print "#undef EDOM\n#undef ERANGE";
 | |
|     lno = 0;
 | |
|   }
 | |
| 
 | |
| $1 == "@comment" && $2 == "errno.h" { errnoh=1; next }
 | |
| $1 == "@comment" && errnoh == 1 \
 | |
|   {
 | |
|     ++errnoh;
 | |
|     etext = "";
 | |
|     for (i = 3; i <= NF; ++i)
 | |
|       etext = etext " " $i;
 | |
|     next;
 | |
|   }
 | |
| 
 | |
| errnoh == 2 && $1 == "@deftypevr"  && $2 == "Macro" && $3 == "int" \
 | |
|   { ++errnoh; e = $4; next; }
 | |
| 
 | |
| errnoh == 3 && $1 == "@comment" && $2 == "errno" {
 | |
|     if (e == "EWOULDBLOCK")
 | |
|       {
 | |
| 	lines[lno++]="#define EWOULDBLOCK EAGAIN /* Operation would block */";
 | |
| 	next;
 | |
|       }
 | |
|     errno = $3 + 0;
 | |
|     if (errno == 0)
 | |
|       next;
 | |
|     if (errno > maxerrno) maxerrno = errno;
 | |
|     x = sprintf ("%-40s/*%s */", sprintf ("%-24s%s", "#define\t" e,
 | |
| 					  "_HURD_ERRNO (" errno ")"),
 | |
| 		 etext);
 | |
|     if (e == "EDOM")
 | |
|       edom = x;
 | |
|     else if (e == "ERANGE")
 | |
|       erange = x;
 | |
|     comma[lno] = 1;
 | |
|     lines[lno++] = sprintf("\t%-16s= _HURD_ERRNO (%d)", e, errno);
 | |
|     lines[lno++] = x;
 | |
|     next;
 | |
|   }
 | |
| { errnoh=0 }
 | |
| 
 | |
| NF == 3 && $1 == "#define" && $2 == "MACH_SEND_IN_PROGRESS" \
 | |
|   {
 | |
|     in_mach_errors = FILENAME;
 | |
|     lines[lno++] = "\n\t/* Errors from <mach/message.h>.  */";
 | |
|   }
 | |
| NF == 3 && $1 == "#define" && $2 == "KERN_SUCCESS" \
 | |
|   {
 | |
|     in_mach_errors = FILENAME;
 | |
|     lines[lno++] = "\n\t/* Errors from <mach/kern_return.h>.  */";
 | |
|     next;
 | |
|   }
 | |
| 
 | |
| in_mach_errors != "" && $2 == "MACH_IPC_COMPAT" \
 | |
|   {
 | |
|     in_mach_errors = "";
 | |
|   }
 | |
| 
 | |
| in_mach_errors == FILENAME && NF == 3 && $1 == "#define" \
 | |
|   {
 | |
|     comma[lno] = 1;
 | |
|     lines[lno++] = sprintf("\t%-32s= %s", "E" $2, $3);
 | |
|   }
 | |
| 
 | |
| $1 == "#define" && $2 == "_MACH_MIG_ERRORS_H_" \
 | |
|   {
 | |
|     in_mig_errors = 1;
 | |
|     lines[lno++] = "\n\t/* Errors from <mach/mig_errors.h>.  */";
 | |
|     next;
 | |
|   }
 | |
| in_mig_errors && $1 == "#endif" && $3 == "_MACH_MIG_ERRORS_H_" \
 | |
|   {
 | |
|     in_mig_errors = 0;
 | |
|   }
 | |
| 
 | |
| (in_mig_errors && $1 == "#define" && $3 <= -300) || \
 | |
| (in_device_errors && $1 == "#define" && /D_/ && NF > 3) \
 | |
|   {
 | |
|     comment = "";
 | |
|     for (i = 4; i <= NF; ++i)
 | |
|       comment = comment " " $i;
 | |
|     comma[lno] = 1;
 | |
|     lines[lno++] = sprintf("%-32s", sprintf ("\t%-24s= %s", "E" $2, $3)) comment;
 | |
|   }
 | |
| 
 | |
| $1 == "#define" && $2 == "D_SUCCESS" \
 | |
|   {
 | |
|     in_device_errors = 1;
 | |
|     lines[lno++] = "\n\t/* Errors from <device/device_types.h>.  */";
 | |
|     next;
 | |
|   }
 | |
| in_device_errors && $1 == "#endif" \
 | |
|   {
 | |
|     in_device_errors = 0;
 | |
|   }
 | |
| 
 | |
| 
 | |
| END \
 | |
|   {
 | |
|     for (i = 0; i < lno - 1; ++i)
 | |
|       printf "%s%s\n", lines[i], (comma[i] ? "," : "");
 | |
|     print lines[i];
 | |
|     print "";
 | |
|     print "};";
 | |
|     print "";
 | |
|     printf "#define\t_HURD_ERRNOS\t%d\n", maxerrno+1;
 | |
|     print "";
 | |
|     print "\
 | |
| /* User-visible type of error codes.  It is ok to use `int' or\n\
 | |
|    `kern_return_t' for these, but with `error_t' the debugger prints\n\
 | |
|    symbolic values.  */";
 | |
|     print "#ifdef __USE_GNU";
 | |
|     print "typedef enum __error_t_codes error_t;"
 | |
|     print "#define __error_t_defined\t1"
 | |
|     print "#endif";
 | |
|     print "";
 | |
|     print "\
 | |
| /* Return the current thread's location for `errno'.\n\
 | |
|    The syntax of this function allows redeclarations like `int errno'.  */\n\
 | |
| extern int *__errno_location (void) __THROW __attribute__ ((__const__));\n\
 | |
| \n\
 | |
| #define errno			(*__errno_location ())\n\
 | |
| ";
 | |
|     print "#endif /* <errno.h> included.  */";
 | |
|     print "";
 | |
|     print "#if !defined (_ERRNO_H) && defined (__need_Emath)";
 | |
|     print edom; print erange;
 | |
|     print "#endif /* <errno.h> not included and need math error codes.  */";
 | |
|   }
 |