1 | /*************************************** 2 | $Revision: 1.3 $ 3 | 4 | Error reporting (er) er_arrays.c - auxiliary routines for parameter arrays 5 | 6 | Status: NOT REVUED, PARTLY TESTED 7 | 8 | Design and implementation by: Marek Bukowy 9 | 10 | ******************/ /****************** 11 | Copyright (c) 1999,2000 RIPE NCC 12 | 13 | All Rights Reserved 14 | 15 | Permission to use, copy, modify, and distribute this software and its 16 | documentation for any purpose and without fee is hereby granted, 17 | provided that the above copyright notice appear in all copies and that 18 | both that copyright notice and this permission notice appear in 19 | supporting documentation, and that the name of the author not be 20 | used in advertising or publicity pertaining to distribution of the 21 | software without specific, written prior permission. 22 | 23 | THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 24 | ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL 25 | AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY 26 | DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN 27 | AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 28 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 29 | ***************************************/ 30 | 31 | #include "erroutines.h" 32 | 33 | #include "er_arrays.h" 34 | 35 | er_ret_t er_getsevval(char *sev) 36 | { 37 | int i; 38 | 39 | for(i=0; er_level_a[i].sev != 0; i++) { 40 | if( strcasecmp(er_level_a[i].chr, sev) == 0 ) { 41 | return er_level_a[i].sev; 42 | } 43 | } 44 | 45 | return 0; 46 | } 47 | 48 | char *er_getsevsym( int sev, int mode ) 49 | { 50 | int i; 51 | 52 | for(i=0; er_level_a[i].sev != 0; i++) { 53 | if (er_level_a[i].sev == sev) { 54 | break; 55 | } 56 | } 57 | 58 | switch( mode & 0x03 ) { 59 | case ER_M_SEVCHAR: /* one-letter severity indication */ 60 | return er_level_a[i].chr; 61 | case ER_M_SEVLONG: /* long severity indication */ 62 | return er_level_a[i].txt; 63 | } 64 | 65 | /* no severity indication */ 66 | return ""; /* "" goes to program text, so returning a 67 | pointer to it is OK */ 68 | } 69 | 70 | char *er_getfacsym(er_fac_code_t faccode) 71 | { 72 | int facidx; 73 | 74 | if( faccode != FAC_NONE ) { 75 | for (facidx=0; facidx<FAC_LAST; facidx++) { 76 | if( er_fac_err[facidx].code == faccode ) { 77 | break; 78 | } 79 | } 80 | return er_fac_err[facidx].name; 81 | } 82 | else return ""; 83 | } 84 | 85 | er_mask_t er_getfacval(char *key) 86 | { 87 | int i; 88 | 89 | for(i=0; er_fac_err[i].code != -1; i++) { 90 | if(strcasecmp(key,er_fac_err[i].name) == 0) { 91 | return er_fac_err[i].code; 92 | } 93 | } 94 | 95 | return 0; 96 | } 97 | 98 | mask_t er_getfacallmask(void) 99 | { 100 | int i = FAC_NONE; 101 | mask_t all = MA_new(MA_END); 102 | 103 | while( ++i != FAC_LAST ) { 104 | MA_set(&all, (unsigned) i, 1); 105 | } 106 | return all; 107 | } 108 | 109 | unsigned int er_getaspval(char *key) 110 | { 111 | int i; 112 | 113 | for(i=0; er_asparr[i].n != NULL; i++) { 114 | if(strcasecmp(key,er_asparr[i].n) == 0) { 115 | return er_asparr[i].v; 116 | } 117 | } 118 | 119 | return 0; 120 | } 121 | 122 | 123 | 124 | 125 | void er_getaspsym(mask_t facmask, int asp, GString *g_reply) 126 | { 127 | int i, found=0; 128 | 129 | for(i=0; er_asparr[i].n != NULL; i++) { 130 | if( MA_isset(facmask, er_asparr[i].f) && asp == er_asparr[i].v) { 131 | g_string_sprintfa(g_reply, "%s|", er_asparr[i].n); 132 | found = 1; 133 | } 134 | } 135 | 136 | if( !found ) { 137 | g_string_sprintfa(g_reply, "0x%x|", asp); 138 | } 139 | 140 | g_string_truncate(g_reply, (int)strlen(g_reply->str)-1); 141 | 142 | } 143 | 144 | er_path_mt er_getpathval(char *key) 145 | { 146 | int i; 147 | 148 | for(i=0; er_pathtypes[i] != NULL; i++) { 149 | if(strcasecmp(key,er_pathtypes[i]) == 0) { 150 | return i; 151 | } 152 | } 153 | 154 | return -1; 155 | } 156 | 157 | int er_getformatval(char *key) 158 | { 159 | int i; 160 | 161 | for(i=0; er_formarr[i].n != NULL; i++) { 162 | if(strcasecmp(key,er_formarr[i].n) == 0) { 163 | return er_formarr[i].v; 164 | } 165 | } 166 | 167 | return -1; 168 | }