#pragma weak _bindtextdomain = bindtextdomain
#pragma weak _textdomain = textdomain
#pragma weak _gettext = gettext
#pragma weak _dgettext = dgettext
#pragma weak _dcgettext = dcgettext
#pragma weak _ngettext = ngettext
#pragma weak _dngettext = dngettext
#pragma weak _dcngettext = dcngettext
#pragma weak _bind_textdomain_codeset = bind_textdomain_codeset
#include "lint.h"
#include "mtlib.h"
#include <errno.h>
#include <ctype.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/param.h>
#include <libintl.h>
#include <thread.h>
#include <synch.h>
#include "libc.h"
#include "_loc_path.h"
#include "msgfmt.h"
#include "gettext.h"
#define INIT_GT(def) \
if (!global_gt) { \
global_gt = (Gettext_t *)calloc(1, sizeof (Gettext_t)); \
if (global_gt) \
global_gt->cur_domain = (char *)default_domain; \
else { \
callout_lock_exit(); \
return ((def)); \
} \
}
const char *defaultbind = DEFAULT_BINDING;
const char default_domain[] = DEFAULT_DOMAIN;
Gettext_t *global_gt = NULL;
char *
bindtextdomain(const char *domain, const char *binding)
{
char *res;
callout_lock_enter();
INIT_GT(NULL);
res = _real_bindtextdomain_u(domain, binding, TP_BINDING);
callout_lock_exit();
return (res);
}
char *
bind_textdomain_codeset(const char *domain, const char *codeset)
{
char *res;
callout_lock_enter();
INIT_GT(NULL);
res = _real_bindtextdomain_u(domain, codeset, TP_CODESET);
callout_lock_exit();
return (res);
}
char *
textdomain(const char *domain)
{
char *res;
char tmp_domain[TEXTDOMAINMAX + 1];
callout_lock_enter();
INIT_GT(NULL);
res = _textdomain_u(domain, tmp_domain);
if (res == NULL) {
callout_lock_exit();
return (NULL);
}
callout_lock_exit();
return (CURRENT_DOMAIN(global_gt));
}
char *
gettext(const char *msg_id)
{
char *res;
int errno_save = errno;
callout_lock_enter();
INIT_GT((char *)msg_id);
res = _real_gettext_u(NULL, msg_id, NULL, 0, LC_MESSAGES, 0, NULL);
callout_lock_exit();
errno = errno_save;
return (res);
}
char *
dgettext(const char *domain, const char *msg_id)
{
char *res;
int errno_save = errno;
callout_lock_enter();
INIT_GT((char *)msg_id);
res = _real_gettext_u(domain, msg_id, NULL, 0, LC_MESSAGES, 0, NULL);
callout_lock_exit();
errno = errno_save;
return (res);
}
char *
dgettext_l(const char *domain, const char *msg_id, locale_t loc)
{
char *res;
int errno_save = errno;
callout_lock_enter();
INIT_GT((char *)msg_id);
res = _real_gettext_u(domain, msg_id, NULL, 0, LC_MESSAGES, 0, loc);
callout_lock_exit();
errno = errno_save;
return (res);
}
char *
dcgettext(const char *domain, const char *msg_id, const int category)
{
char *res;
int errno_save = errno;
callout_lock_enter();
INIT_GT((char *)msg_id);
res = _real_gettext_u(domain, msg_id, NULL, 0, category, 0, NULL);
callout_lock_exit();
errno = errno_save;
return (res);
}
char *
ngettext(const char *msgid1, const char *msgid2, unsigned long int n)
{
char *res;
int errno_save = errno;
callout_lock_enter();
INIT_GT((char *)msgid1);
res = _real_gettext_u(NULL, msgid1, msgid2, n, LC_MESSAGES, 1, NULL);
callout_lock_exit();
errno = errno_save;
return (res);
}
char *
dngettext(const char *domain, const char *msgid1, const char *msgid2,
unsigned long int n)
{
char *res;
int errno_save = errno;
callout_lock_enter();
INIT_GT((char *)msgid1);
res = _real_gettext_u(domain, msgid1, msgid2, n, LC_MESSAGES, 1, NULL);
callout_lock_exit();
errno = errno_save;
return (res);
}
char *
dcngettext(const char *domain, const char *msgid1, const char *msgid2,
unsigned long int n, int category)
{
char *res;
int errno_save = errno;
callout_lock_enter();
INIT_GT((char *)msgid1);
res = _real_gettext_u(domain, msgid1, msgid2, n, category, 1, NULL);
callout_lock_exit();
errno = errno_save;
return (res);
}