[BACK]Return to sysdep.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / lib / libintl

File: [cvs.NetBSD.org] / src / lib / libintl / sysdep.c (download)

Revision 1.2, Wed Apr 27 09:50:26 2005 UTC (14 years, 5 months ago) by yamt
Branch: MAIN
CVS Tags: yamt-pf42-baseX, yamt-pf42-base4, yamt-pf42-base3, yamt-pf42-base2, yamt-pf42-base, yamt-pf42, yamt-pagecache-tag8, yamt-pagecache-base9, yamt-pagecache-base8, yamt-pagecache-base7, yamt-pagecache-base6, yamt-pagecache-base5, yamt-pagecache-base4, yamt-pagecache-base3, yamt-pagecache-base2, yamt-pagecache-base, yamt-pagecache, wrstuden-revivesa-base-3, wrstuden-revivesa-base-2, wrstuden-revivesa-base-1, wrstuden-revivesa-base, wrstuden-revivesa, wrstuden-fixsa-newbase, wrstuden-fixsa-base-1, wrstuden-fixsa-base, wrstuden-fixsa, tls-maxphys-base, tls-maxphys, tls-earlyentropy-base, tls-earlyentropy, riastradh-xf86-video-intel-2-7-1-pre-2-21-15, riastradh-drm2-base3, riastradh-drm2-base2, riastradh-drm2-base1, riastradh-drm2-base, riastradh-drm2, prg-localcount2-base3, prg-localcount2-base2, prg-localcount2-base1, prg-localcount2-base, prg-localcount2, phil-wifi-base, phil-wifi-20190609, phil-wifi, pgoyette-localcount-base, pgoyette-localcount-20170426, pgoyette-localcount-20170320, pgoyette-localcount-20170107, pgoyette-localcount-20161104, pgoyette-localcount-20160806, pgoyette-localcount-20160726, pgoyette-localcount, pgoyette-compat-merge-20190127, pgoyette-compat-base, pgoyette-compat-20190127, pgoyette-compat-20190118, pgoyette-compat-1226, pgoyette-compat-1126, pgoyette-compat-1020, pgoyette-compat-0930, pgoyette-compat-0906, pgoyette-compat-0728, pgoyette-compat-0625, pgoyette-compat-0521, pgoyette-compat-0502, pgoyette-compat-0422, pgoyette-compat-0415, pgoyette-compat-0407, pgoyette-compat-0330, pgoyette-compat-0322, pgoyette-compat-0315, pgoyette-compat, perseant-stdc-iso10646-base, perseant-stdc-iso10646, netbsd-9-base, netbsd-9, netbsd-8-base, netbsd-8-1-RELEASE, netbsd-8-1-RC1, netbsd-8-0-RELEASE, netbsd-8-0-RC2, netbsd-8-0-RC1, netbsd-8, netbsd-7-nhusb-base-20170116, netbsd-7-nhusb-base, netbsd-7-nhusb, netbsd-7-base, netbsd-7-2-RELEASE, netbsd-7-1-RELEASE, netbsd-7-1-RC2, netbsd-7-1-RC1, netbsd-7-1-2-RELEASE, netbsd-7-1-1-RELEASE, netbsd-7-1, netbsd-7-0-RELEASE, netbsd-7-0-RC3, netbsd-7-0-RC2, netbsd-7-0-RC1, netbsd-7-0-2-RELEASE, netbsd-7-0-1-RELEASE, netbsd-7-0, netbsd-7, netbsd-6-base, netbsd-6-1-RELEASE, netbsd-6-1-RC4, netbsd-6-1-RC3, netbsd-6-1-RC2, netbsd-6-1-RC1, netbsd-6-1-5-RELEASE, netbsd-6-1-4-RELEASE, netbsd-6-1-3-RELEASE, netbsd-6-1-2-RELEASE, netbsd-6-1-1-RELEASE, netbsd-6-1, netbsd-6-0-RELEASE, netbsd-6-0-RC2, netbsd-6-0-RC1, netbsd-6-0-6-RELEASE, netbsd-6-0-5-RELEASE, netbsd-6-0-4-RELEASE, netbsd-6-0-3-RELEASE, netbsd-6-0-2-RELEASE, netbsd-6-0-1-RELEASE, netbsd-6-0, netbsd-6, netbsd-5-base, netbsd-5-2-RELEASE, netbsd-5-2-RC1, netbsd-5-2-3-RELEASE, netbsd-5-2-2-RELEASE, netbsd-5-2-1-RELEASE, netbsd-5-2, netbsd-5-1-RELEASE, netbsd-5-1-RC4, netbsd-5-1-RC3, netbsd-5-1-RC2, netbsd-5-1-RC1, netbsd-5-1-5-RELEASE, netbsd-5-1-4-RELEASE, netbsd-5-1-3-RELEASE, netbsd-5-1-2-RELEASE, netbsd-5-1-1-RELEASE, netbsd-5-1, netbsd-5-0-RELEASE, netbsd-5-0-RC4, netbsd-5-0-RC3, netbsd-5-0-RC2, netbsd-5-0-RC1, netbsd-5-0-2-RELEASE, netbsd-5-0-1-RELEASE, netbsd-5-0, netbsd-5, netbsd-4-base, netbsd-4-0-RELEASE, netbsd-4-0-RC5, netbsd-4-0-RC4, netbsd-4-0-RC3, netbsd-4-0-RC2, netbsd-4-0-RC1, netbsd-4-0-1-RELEASE, netbsd-4-0, netbsd-4, mjf-devfs2-base, mjf-devfs2, matt-premerge-20091211, matt-nb8-mediatek-base, matt-nb8-mediatek, matt-nb6-plus-nbase, matt-nb6-plus-base, matt-nb6-plus, matt-nb5-pq3-base, matt-nb5-pq3, matt-nb5-mips64-u2-k2-k4-k7-k8-k9, matt-nb5-mips64-u1-k1-k5, matt-nb5-mips64-premerge-20101231, matt-nb5-mips64-premerge-20091211, matt-nb5-mips64-k15, matt-nb5-mips64, matt-nb4-mips64-k7-u2a-k9b, matt-mips64-premerge-20101231, matt-mips64-base2, matt-mips64-base, matt-mips64, matt-armv6-prevmlocking, matt-armv6-nbase, matt-armv6-base, matt-armv6, localcount-20160914, keiichi-mipv6-base, keiichi-mipv6, jym-xensuspend-nbase, jym-xensuspend-base, jym-xensuspend, hpcarm-cleanup-nbase, hpcarm-cleanup-base, hpcarm-cleanup, cube-autoconf-base, cube-autoconf, cherry-xenmp-base, cherry-xenmp, bouyer-socketcan-base1, bouyer-socketcan-base, bouyer-socketcan, bouyer-quota2-nbase, bouyer-quota2-base, bouyer-quota2, agc-symver-base, agc-symver, abandoned-netbsd-4-base, abandoned-netbsd-4, HEAD
Changes since 1.1: +3 -3 lines

remove unnecessary #include.

/*	$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 "";
}