237 lines
4.8 KiB
C
237 lines
4.8 KiB
C
/* $NetBSD: sysdep.c,v 1.1 2004/09/23 21:35:27 tshiozak 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.1 2004/09/23 21:35:27 tshiozak Exp $");
|
|
#endif /* LIBC_SCCS and not lint */
|
|
|
|
#include <sys/param.h>
|
|
#include <sys/types.h>
|
|
#include <assert.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 "";
|
|
}
|