diff options
| author | Sam Varshavchik | 2013-08-19 16:39:41 -0400 | 
|---|---|---|
| committer | Sam Varshavchik | 2013-08-25 14:43:51 -0400 | 
| commit | 9c45d9ad13fdf439d44d7443ae75da15ea0223ed (patch) | |
| tree | 7a81a04cb51efb078ee350859a64be2ebc6b8813 /pcp/intl/os2compat.c | |
| parent | a9520698b770168d1f33d6301463bb70a19655ec (diff) | |
| download | courier-libs-9c45d9ad13fdf439d44d7443ae75da15ea0223ed.tar.bz2 | |
Initial checkin
Imported from subversion report, converted to git. Updated all paths in
scripts and makefiles, reflecting the new directory hierarchy.
Diffstat (limited to 'pcp/intl/os2compat.c')
| -rw-r--r-- | pcp/intl/os2compat.c | 96 | 
1 files changed, 96 insertions, 0 deletions
| diff --git a/pcp/intl/os2compat.c b/pcp/intl/os2compat.c new file mode 100644 index 0000000..050447d --- /dev/null +++ b/pcp/intl/os2compat.c @@ -0,0 +1,96 @@ +/* OS/2 compatibility functions. +   Copyright (C) 2001-2002 Free Software Foundation, Inc. + +   This program is free software: you can redistribute it and/or modify +   it under the terms of the GNU Lesser General Public License as published by +   the Free Software Foundation; either version 2.1 of the License, or +   (at your option) any later version. + +   This program is distributed in the hope that it will be useful, +   but WITHOUT ANY WARRANTY; without even the implied warranty of +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the +   GNU Lesser General Public License for more details. + +   You should have received a copy of the GNU Lesser General Public License +   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ + +#define OS2_AWARE +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdlib.h> +#include <string.h> +#include <sys/param.h> + +/* A version of getenv() that works from DLLs */ +extern unsigned long DosScanEnv (const unsigned char *pszName, unsigned char **ppszValue); + +char * +_nl_getenv (const char *name) +{ +  unsigned char *value; +  if (DosScanEnv (name, &value)) +    return NULL; +  else +    return value; +} + +/* A fixed size buffer.  */ +char libintl_nl_default_dirname[MAXPATHLEN+1]; + +char *_nlos2_libdir = NULL; +char *_nlos2_localealiaspath = NULL; +char *_nlos2_localedir = NULL; + +static __attribute__((constructor)) void +nlos2_initialize () +{ +  char *root = getenv ("UNIXROOT"); +  char *gnulocaledir = getenv ("GNULOCALEDIR"); + +  _nlos2_libdir = gnulocaledir; +  if (!_nlos2_libdir) +    { +      if (root) +        { +          size_t sl = strlen (root); +          _nlos2_libdir = (char *) malloc (sl + strlen (LIBDIR) + 1); +          memcpy (_nlos2_libdir, root, sl); +          memcpy (_nlos2_libdir + sl, LIBDIR, strlen (LIBDIR) + 1); +        } +      else +        _nlos2_libdir = LIBDIR; +    } + +  _nlos2_localealiaspath = gnulocaledir; +  if (!_nlos2_localealiaspath) +    { +      if (root) +        { +          size_t sl = strlen (root); +          _nlos2_localealiaspath = (char *) malloc (sl + strlen (LOCALE_ALIAS_PATH) + 1); +          memcpy (_nlos2_localealiaspath, root, sl); +          memcpy (_nlos2_localealiaspath + sl, LOCALE_ALIAS_PATH, strlen (LOCALE_ALIAS_PATH) + 1); +        } +     else +        _nlos2_localealiaspath = LOCALE_ALIAS_PATH; +    } + +  _nlos2_localedir = gnulocaledir; +  if (!_nlos2_localedir) +    { +      if (root) +        { +          size_t sl = strlen (root); +          _nlos2_localedir = (char *) malloc (sl + strlen (LOCALEDIR) + 1); +          memcpy (_nlos2_localedir, root, sl); +          memcpy (_nlos2_localedir + sl, LOCALEDIR, strlen (LOCALEDIR) + 1); +        } +      else +        _nlos2_localedir = LOCALEDIR; +    } + +  if (strlen (_nlos2_localedir) <= MAXPATHLEN) +    strcpy (libintl_nl_default_dirname, _nlos2_localedir); +} | 
