1 1.2 yamt /* $NetBSD: sysdep.c,v 1.2 2005/04/27 09:50:26 yamt Exp $ */ 2 1.1 tshiozak 3 1.1 tshiozak /*- 4 1.1 tshiozak * Copyright (c)2004 Citrus Project, 5 1.1 tshiozak * All rights reserved. 6 1.1 tshiozak * 7 1.1 tshiozak * Redistribution and use in source and binary forms, with or without 8 1.1 tshiozak * modification, are permitted provided that the following conditions 9 1.1 tshiozak * are met: 10 1.1 tshiozak * 1. Redistributions of source code must retain the above copyright 11 1.1 tshiozak * notice, this list of conditions and the following disclaimer. 12 1.1 tshiozak * 2. Redistributions in binary form must reproduce the above copyright 13 1.1 tshiozak * notice, this list of conditions and the following disclaimer in the 14 1.1 tshiozak * documentation and/or other materials provided with the distribution. 15 1.1 tshiozak * 16 1.1 tshiozak * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 17 1.1 tshiozak * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 1.1 tshiozak * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 19 1.1 tshiozak * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 20 1.1 tshiozak * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 1.1 tshiozak * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 22 1.1 tshiozak * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 1.1 tshiozak * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 24 1.1 tshiozak * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 25 1.1 tshiozak * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 1.1 tshiozak * SUCH DAMAGE. 27 1.1 tshiozak */ 28 1.1 tshiozak 29 1.1 tshiozak #include <sys/cdefs.h> 30 1.1 tshiozak #if defined(LIBC_SCCS) && !defined(lint) 31 1.2 yamt __RCSID("$NetBSD: sysdep.c,v 1.2 2005/04/27 09:50:26 yamt Exp $"); 32 1.1 tshiozak #endif /* LIBC_SCCS and not lint */ 33 1.1 tshiozak 34 1.1 tshiozak #include <sys/param.h> 35 1.1 tshiozak #include <sys/types.h> 36 1.2 yamt 37 1.1 tshiozak #include <inttypes.h> 38 1.1 tshiozak #include <stdlib.h> 39 1.1 tshiozak #include <string.h> 40 1.1 tshiozak 41 1.1 tshiozak #include "libintl_local.h" 42 1.1 tshiozak 43 1.1 tshiozak struct sysdep_pair 44 1.1 tshiozak { 45 1.1 tshiozak const char *tag; 46 1.1 tshiozak const char *string; 47 1.1 tshiozak size_t len; 48 1.1 tshiozak }; 49 1.1 tshiozak 50 1.1 tshiozak #define T_(tag) { #tag, tag, sizeof (tag)-1 } 51 1.1 tshiozak #define numof(a) (sizeof (a) / sizeof ((a)[0])) 52 1.1 tshiozak 53 1.1 tshiozak const struct sysdep_pair sysdep_pair_table[] = { 54 1.1 tshiozak /* this table must be sorted in the dictionary order. */ 55 1.1 tshiozak T_(PRIX16), 56 1.1 tshiozak T_(PRIX32), 57 1.1 tshiozak T_(PRIX64), 58 1.1 tshiozak T_(PRIX8), 59 1.1 tshiozak T_(PRIXFAST16), 60 1.1 tshiozak T_(PRIXFAST32), 61 1.1 tshiozak T_(PRIXFAST64), 62 1.1 tshiozak T_(PRIXFAST8), 63 1.1 tshiozak T_(PRIXLEAST16), 64 1.1 tshiozak T_(PRIXLEAST32), 65 1.1 tshiozak T_(PRIXLEAST64), 66 1.1 tshiozak T_(PRIXLEAST8), 67 1.1 tshiozak T_(PRIXMAX), 68 1.1 tshiozak T_(PRIXPTR), 69 1.1 tshiozak T_(PRId16), 70 1.1 tshiozak T_(PRId32), 71 1.1 tshiozak T_(PRId64), 72 1.1 tshiozak T_(PRId8), 73 1.1 tshiozak T_(PRIdFAST16), 74 1.1 tshiozak T_(PRIdFAST32), 75 1.1 tshiozak T_(PRIdFAST64), 76 1.1 tshiozak T_(PRIdFAST8), 77 1.1 tshiozak T_(PRIdLEAST16), 78 1.1 tshiozak T_(PRIdLEAST32), 79 1.1 tshiozak T_(PRIdLEAST64), 80 1.1 tshiozak T_(PRIdLEAST8), 81 1.1 tshiozak T_(PRIdMAX), 82 1.1 tshiozak T_(PRIdPTR), 83 1.1 tshiozak T_(PRIi16), 84 1.1 tshiozak T_(PRIi32), 85 1.1 tshiozak T_(PRIi64), 86 1.1 tshiozak T_(PRIi8), 87 1.1 tshiozak T_(PRIiFAST16), 88 1.1 tshiozak T_(PRIiFAST32), 89 1.1 tshiozak T_(PRIiFAST64), 90 1.1 tshiozak T_(PRIiFAST8), 91 1.1 tshiozak T_(PRIiLEAST16), 92 1.1 tshiozak T_(PRIiLEAST32), 93 1.1 tshiozak T_(PRIiLEAST64), 94 1.1 tshiozak T_(PRIiLEAST8), 95 1.1 tshiozak T_(PRIiMAX), 96 1.1 tshiozak T_(PRIiPTR), 97 1.1 tshiozak T_(PRIo16), 98 1.1 tshiozak T_(PRIo32), 99 1.1 tshiozak T_(PRIo64), 100 1.1 tshiozak T_(PRIo8), 101 1.1 tshiozak T_(PRIoFAST16), 102 1.1 tshiozak T_(PRIoFAST32), 103 1.1 tshiozak T_(PRIoFAST64), 104 1.1 tshiozak T_(PRIoFAST8), 105 1.1 tshiozak T_(PRIoLEAST16), 106 1.1 tshiozak T_(PRIoLEAST32), 107 1.1 tshiozak T_(PRIoLEAST64), 108 1.1 tshiozak T_(PRIoLEAST8), 109 1.1 tshiozak T_(PRIoMAX), 110 1.1 tshiozak T_(PRIoPTR), 111 1.1 tshiozak T_(PRIu16), 112 1.1 tshiozak T_(PRIu32), 113 1.1 tshiozak T_(PRIu64), 114 1.1 tshiozak T_(PRIu8), 115 1.1 tshiozak T_(PRIuFAST16), 116 1.1 tshiozak T_(PRIuFAST32), 117 1.1 tshiozak T_(PRIuFAST64), 118 1.1 tshiozak T_(PRIuFAST8), 119 1.1 tshiozak T_(PRIuLEAST16), 120 1.1 tshiozak T_(PRIuLEAST32), 121 1.1 tshiozak T_(PRIuLEAST64), 122 1.1 tshiozak T_(PRIuLEAST8), 123 1.1 tshiozak T_(PRIuMAX), 124 1.1 tshiozak T_(PRIuPTR), 125 1.1 tshiozak T_(PRIx16), 126 1.1 tshiozak T_(PRIx32), 127 1.1 tshiozak T_(PRIx64), 128 1.1 tshiozak T_(PRIx8), 129 1.1 tshiozak T_(PRIxFAST16), 130 1.1 tshiozak T_(PRIxFAST32), 131 1.1 tshiozak T_(PRIxFAST64), 132 1.1 tshiozak T_(PRIxFAST8), 133 1.1 tshiozak T_(PRIxLEAST16), 134 1.1 tshiozak T_(PRIxLEAST32), 135 1.1 tshiozak T_(PRIxLEAST64), 136 1.1 tshiozak T_(PRIxLEAST8), 137 1.1 tshiozak T_(PRIxMAX), 138 1.1 tshiozak T_(PRIxPTR), 139 1.1 tshiozak T_(SCNd16), 140 1.1 tshiozak T_(SCNd32), 141 1.1 tshiozak T_(SCNd64), 142 1.1 tshiozak T_(SCNd8), 143 1.1 tshiozak T_(SCNdFAST16), 144 1.1 tshiozak T_(SCNdFAST32), 145 1.1 tshiozak T_(SCNdFAST64), 146 1.1 tshiozak T_(SCNdFAST8), 147 1.1 tshiozak T_(SCNdLEAST16), 148 1.1 tshiozak T_(SCNdLEAST32), 149 1.1 tshiozak T_(SCNdLEAST64), 150 1.1 tshiozak T_(SCNdLEAST8), 151 1.1 tshiozak T_(SCNdMAX), 152 1.1 tshiozak T_(SCNdPTR), 153 1.1 tshiozak T_(SCNi16), 154 1.1 tshiozak T_(SCNi32), 155 1.1 tshiozak T_(SCNi64), 156 1.1 tshiozak T_(SCNi8), 157 1.1 tshiozak T_(SCNiFAST16), 158 1.1 tshiozak T_(SCNiFAST32), 159 1.1 tshiozak T_(SCNiFAST64), 160 1.1 tshiozak T_(SCNiFAST8), 161 1.1 tshiozak T_(SCNiLEAST16), 162 1.1 tshiozak T_(SCNiLEAST32), 163 1.1 tshiozak T_(SCNiLEAST64), 164 1.1 tshiozak T_(SCNiLEAST8), 165 1.1 tshiozak T_(SCNiMAX), 166 1.1 tshiozak T_(SCNiPTR), 167 1.1 tshiozak T_(SCNo16), 168 1.1 tshiozak T_(SCNo32), 169 1.1 tshiozak T_(SCNo64), 170 1.1 tshiozak T_(SCNo8), 171 1.1 tshiozak T_(SCNoFAST16), 172 1.1 tshiozak T_(SCNoFAST32), 173 1.1 tshiozak T_(SCNoFAST64), 174 1.1 tshiozak T_(SCNoFAST8), 175 1.1 tshiozak T_(SCNoLEAST16), 176 1.1 tshiozak T_(SCNoLEAST32), 177 1.1 tshiozak T_(SCNoLEAST64), 178 1.1 tshiozak T_(SCNoLEAST8), 179 1.1 tshiozak T_(SCNoMAX), 180 1.1 tshiozak T_(SCNoPTR), 181 1.1 tshiozak T_(SCNu16), 182 1.1 tshiozak T_(SCNu32), 183 1.1 tshiozak T_(SCNu64), 184 1.1 tshiozak T_(SCNu8), 185 1.1 tshiozak T_(SCNuFAST16), 186 1.1 tshiozak T_(SCNuFAST32), 187 1.1 tshiozak T_(SCNuFAST64), 188 1.1 tshiozak T_(SCNuFAST8), 189 1.1 tshiozak T_(SCNuLEAST16), 190 1.1 tshiozak T_(SCNuLEAST32), 191 1.1 tshiozak T_(SCNuLEAST64), 192 1.1 tshiozak T_(SCNuLEAST8), 193 1.1 tshiozak T_(SCNuMAX), 194 1.1 tshiozak T_(SCNuPTR), 195 1.1 tshiozak T_(SCNx16), 196 1.1 tshiozak T_(SCNx32), 197 1.1 tshiozak T_(SCNx64), 198 1.1 tshiozak T_(SCNx8), 199 1.1 tshiozak T_(SCNxFAST16), 200 1.1 tshiozak T_(SCNxFAST32), 201 1.1 tshiozak T_(SCNxFAST64), 202 1.1 tshiozak T_(SCNxFAST8), 203 1.1 tshiozak T_(SCNxLEAST16), 204 1.1 tshiozak T_(SCNxLEAST32), 205 1.1 tshiozak T_(SCNxLEAST64), 206 1.1 tshiozak T_(SCNxLEAST8), 207 1.1 tshiozak T_(SCNxMAX), 208 1.1 tshiozak T_(SCNxPTR) 209 1.1 tshiozak }; 210 1.1 tshiozak 211 1.1 tshiozak static int 212 1.1 tshiozak cmp_sysdep_tag(const void *tag, const void *elem) 213 1.1 tshiozak { 214 1.1 tshiozak const struct sysdep_pair *pair = elem; 215 1.1 tshiozak 216 1.1 tshiozak return strcmp(tag, pair->tag); 217 1.1 tshiozak } 218 1.1 tshiozak 219 1.1 tshiozak const char * 220 1.1 tshiozak __intl_sysdep_get_string_by_tag(const char *tag, size_t *rlen) 221 1.1 tshiozak { 222 1.1 tshiozak const struct sysdep_pair *found; 223 1.1 tshiozak 224 1.1 tshiozak found = bsearch(tag, sysdep_pair_table, numof(sysdep_pair_table), 225 1.1 tshiozak sizeof(sysdep_pair_table[0]), &cmp_sysdep_tag); 226 1.1 tshiozak 227 1.1 tshiozak if (found) { 228 1.1 tshiozak if (rlen) 229 1.1 tshiozak *rlen = found->len; 230 1.1 tshiozak return found->string; 231 1.1 tshiozak } 232 1.1 tshiozak 233 1.1 tshiozak if (rlen) 234 1.1 tshiozak *rlen = 0; 235 1.1 tshiozak return ""; 236 1.1 tshiozak } 237