2005-10-01 Marcus Brinkmann <marcus@g10code.de>
[gpgme.git] / assuan / mkerrors
1 #!/bin/sh
2 # mkerrors - Extract error strings from assuan.h
3 #            and create C source for assuan_strerror
4 #       Copyright (C) 2001, 2002 Free Software Foundation, Inc.
5 #
6 # This file is part of Assuan.
7 #
8 # Assuan is free software; you can redistribute it and/or modify it
9 # under the terms of the GNU Lesser General Public License as
10 # published by the Free Software Foundation; either version 2.1 of
11 # the License, or (at your option) any later version.
12 #
13 # Assuan is distributed in the hope that it will be useful, but
14 # WITHOUT ANY WARRANTY; without even the implied warranty of
15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 # Lesser General Public License for more details.
17 #
18 # You should have received a copy of the GNU Lesser General Public
19 # License along with this program; if not, write to the Free Software
20 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 
21
22 cat <<EOF
23 /* Generated automatically by mkerrors */
24 /* Do not edit! */
25
26 #ifdef HAVE_CONFIG_H
27 #include <config.h>
28 #endif
29
30 #include <stdio.h>
31 #include "assuan.h"
32
33 /**
34  * assuan_strerror:
35  * @err:  Error code 
36  * 
37  * This function returns a textual representaion of the given
38  * errorcode. If this is an unknown value, a string with the value
39  * is returned (Beware: it is hold in a static buffer).
40  * 
41  * Return value: String with the error description.
42  **/
43 const char *
44 assuan_strerror (AssuanError err)
45 {
46   const char *s;
47   static char buf[50];
48
49   switch (err)
50     {
51 EOF
52
53 awk '
54 /ASSUAN_No_Error/    { okay=1 }
55 !okay              {next}
56 /}/                { exit 0 }
57 /ASSUAN_[A-Za-z_]*/ { print_code($1) }
58
59
60 function print_code( s )
61 {
62 printf "    case %s: s=\"", s ;
63 gsub(/_/, " ", s );
64 printf "%s\"; break;\n", tolower(substr(s,8));
65 }
66 '
67
68 cat <<EOF
69     default: 
70       {
71         unsigned int source, code;
72
73         source = ((err >> 24) & 0xff);
74         code = (err & 0x00ffffff);
75         if (source) /* Assume this is an libgpg-error. */
76           sprintf (buf, "ec=%u.%u", source, code ); 
77         else
78           sprintf (buf, "ec=%d", err ); 
79         s=buf; break;
80       }
81     }
82
83   return s;
84 }
85
86 EOF