summaryrefslogtreecommitdiff
path: root/usr/src/lib/libc/port/locale/lmessages.c
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@nexenta.com>2010-07-30 07:06:32 -0700
committerGarrett D'Amore <garrett@nexenta.com>2010-07-30 07:06:32 -0700
commit4297a3b0d0a35d80f86fff155e288e885a100e6d (patch)
treebba873e6335d31404bbac128ffa6ebe126b43900 /usr/src/lib/libc/port/locale/lmessages.c
parent969bc941052c29943dfb40d55089dc56fa46be57 (diff)
downloadillumos-joyent-4297a3b0d0a35d80f86fff155e288e885a100e6d.tar.gz
2 We need a fully open libc (no libc_i18n)
Reviewd by: garrett@nexenta.com Approved by: garrett@nexenta.com
Diffstat (limited to 'usr/src/lib/libc/port/locale/lmessages.c')
-rw-r--r--usr/src/lib/libc/port/locale/lmessages.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/usr/src/lib/libc/port/locale/lmessages.c b/usr/src/lib/libc/port/locale/lmessages.c
new file mode 100644
index 0000000000..75076b1d01
--- /dev/null
+++ b/usr/src/lib/libc/port/locale/lmessages.c
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2001 Alexey Zelkin <phantom@FreeBSD.org>
+ * 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.
+ */
+
+/*
+ * Copyright 2010 Nexenta Systems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#include "lint.h"
+#include <stddef.h>
+#include "ldpart.h"
+#include "lmessages.h"
+
+#define LCMESSAGES_SIZE_FULL (sizeof (struct lc_messages_T) / sizeof (char *))
+#define LCMESSAGES_SIZE_MIN \
+ (offsetof(struct lc_messages_T, yesstr) / sizeof (char *))
+
+static char empty[] = "";
+
+static const struct lc_messages_T _C_messages_locale = {
+ "^[yY]", /* yesexpr */
+ "^[nN]", /* noexpr */
+ "yes", /* yesstr */
+ "no" /* nostr */
+};
+
+static struct lc_messages_T _messages_locale;
+static int _messages_using_locale;
+static char *_messages_locale_buf;
+
+int
+__messages_load_locale(const char *name)
+{
+ int ret;
+
+ ret = __part_load_locale(name, &_messages_using_locale,
+ &_messages_locale_buf, "LC_MESSAGES",
+ LCMESSAGES_SIZE_FULL, LCMESSAGES_SIZE_MIN,
+ (const char **)&_messages_locale);
+ if (ret == _LDP_LOADED) {
+ if (_messages_locale.yesstr == NULL)
+ _messages_locale.yesstr = empty;
+ if (_messages_locale.nostr == NULL)
+ _messages_locale.nostr = empty;
+ }
+ return (ret);
+}
+
+struct lc_messages_T *
+__get_current_messages_locale(void)
+{
+ return (_messages_using_locale ? &_messages_locale :
+ (struct lc_messages_T *)&_C_messages_locale);
+}