/* $NetBSD: sysdep.c,v 1.2 2005/04/27 09:50:26 yamt Exp $ */ /*- * Copyright (c)2004 Citrus Project, * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include <sys/cdefs.h> #if defined(LIBC_SCCS) && !defined(lint) __RCSID("$NetBSD: sysdep.c,v 1.2 2005/04/27 09:50:26 yamt Exp $"); #endif /* LIBC_SCCS and not lint */ #include <sys/param.h> #include <sys/types.h> #include <inttypes.h> #include <stdlib.h> #include <string.h> #include "libintl_local.h" struct sysdep_pair { const char *tag; const char *string; size_t len; }; #define T_(tag) { #tag, tag, sizeof (tag)-1 } #define numof(a) (sizeof (a) / sizeof ((a)[0])) const struct sysdep_pair sysdep_pair_table[] = { /* this table must be sorted in the dictionary order. */ T_(PRIX16), T_(PRIX32), T_(PRIX64), T_(PRIX8), T_(PRIXFAST16), T_(PRIXFAST32), T_(PRIXFAST64), T_(PRIXFAST8), T_(PRIXLEAST16), T_(PRIXLEAST32), T_(PRIXLEAST64), T_(PRIXLEAST8), T_(PRIXMAX), T_(PRIXPTR), T_(PRId16), T_(PRId32), T_(PRId64), T_(PRId8), T_(PRIdFAST16), T_(PRIdFAST32), T_(PRIdFAST64), T_(PRIdFAST8), T_(PRIdLEAST16), T_(PRIdLEAST32), T_(PRIdLEAST64), T_(PRIdLEAST8), T_(PRIdMAX), T_(PRIdPTR), T_(PRIi16), T_(PRIi32), T_(PRIi64), T_(PRIi8), T_(PRIiFAST16), T_(PRIiFAST32), T_(PRIiFAST64), T_(PRIiFAST8), T_(PRIiLEAST16), T_(PRIiLEAST32), T_(PRIiLEAST64), T_(PRIiLEAST8), T_(PRIiMAX), T_(PRIiPTR), T_(PRIo16), T_(PRIo32), T_(PRIo64), T_(PRIo8), T_(PRIoFAST16), T_(PRIoFAST32), T_(PRIoFAST64), T_(PRIoFAST8), T_(PRIoLEAST16), T_(PRIoLEAST32), T_(PRIoLEAST64), T_(PRIoLEAST8), T_(PRIoMAX), T_(PRIoPTR), T_(PRIu16), T_(PRIu32), T_(PRIu64), T_(PRIu8), T_(PRIuFAST16), T_(PRIuFAST32), T_(PRIuFAST64), T_(PRIuFAST8), T_(PRIuLEAST16), T_(PRIuLEAST32), T_(PRIuLEAST64), T_(PRIuLEAST8), T_(PRIuMAX), T_(PRIuPTR), T_(PRIx16), T_(PRIx32), T_(PRIx64), T_(PRIx8), T_(PRIxFAST16), T_(PRIxFAST32), T_(PRIxFAST64), T_(PRIxFAST8), T_(PRIxLEAST16), T_(PRIxLEAST32), T_(PRIxLEAST64), T_(PRIxLEAST8), T_(PRIxMAX), T_(PRIxPTR), T_(SCNd16), T_(SCNd32), T_(SCNd64), T_(SCNd8), T_(SCNdFAST16), T_(SCNdFAST32), T_(SCNdFAST64), T_(SCNdFAST8), T_(SCNdLEAST16), T_(SCNdLEAST32), T_(SCNdLEAST64), T_(SCNdLEAST8), T_(SCNdMAX), T_(SCNdPTR), T_(SCNi16), T_(SCNi32), T_(SCNi64), T_(SCNi8), T_(SCNiFAST16), T_(SCNiFAST32), T_(SCNiFAST64), T_(SCNiFAST8), T_(SCNiLEAST16), T_(SCNiLEAST32), T_(SCNiLEAST64), T_(SCNiLEAST8), T_(SCNiMAX), T_(SCNiPTR), T_(SCNo16), T_(SCNo32), T_(SCNo64), T_(SCNo8), T_(SCNoFAST16), T_(SCNoFAST32), T_(SCNoFAST64), T_(SCNoFAST8), T_(SCNoLEAST16), T_(SCNoLEAST32), T_(SCNoLEAST64), T_(SCNoLEAST8), T_(SCNoMAX), T_(SCNoPTR), T_(SCNu16), T_(SCNu32), T_(SCNu64), T_(SCNu8), T_(SCNuFAST16), T_(SCNuFAST32), T_(SCNuFAST64), T_(SCNuFAST8), T_(SCNuLEAST16), T_(SCNuLEAST32), T_(SCNuLEAST64), T_(SCNuLEAST8), T_(SCNuMAX), T_(SCNuPTR), T_(SCNx16), T_(SCNx32), T_(SCNx64), T_(SCNx8), T_(SCNxFAST16), T_(SCNxFAST32), T_(SCNxFAST64), T_(SCNxFAST8), T_(SCNxLEAST16), T_(SCNxLEAST32), T_(SCNxLEAST64), T_(SCNxLEAST8), T_(SCNxMAX), T_(SCNxPTR) }; static int cmp_sysdep_tag(const void *tag, const void *elem) { const struct sysdep_pair *pair = elem; return strcmp(tag, pair->tag); } const char * __intl_sysdep_get_string_by_tag(const char *tag, size_t *rlen) { const struct sysdep_pair *found; found = bsearch(tag, sysdep_pair_table, numof(sysdep_pair_table), sizeof(sysdep_pair_table[0]), &cmp_sysdep_tag); if (found) { if (rlen) *rlen = found->len; return found->string; } if (rlen) *rlen = 0; return ""; }