home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / share / gettext / intl / os2compat.c < prev    next >
Encoding:
C/C++ Source or Header  |  2007-03-05  |  2.8 KB  |  99 lines

  1. /* OS/2 compatibility functions.
  2.    Copyright (C) 2001-2002 Free Software Foundation, Inc.
  3.  
  4.    This program is free software; you can redistribute it and/or modify it
  5.    under the terms of the GNU Library General Public License as published
  6.    by the Free Software Foundation; either version 2, or (at your option)
  7.    any later version.
  8.  
  9.    This program is distributed in the hope that it will be useful,
  10.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  12.    Library General Public License for more details.
  13.  
  14.    You should have received a copy of the GNU Library General Public
  15.    License along with this program; if not, write to the Free Software
  16.    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
  17.    USA.  */
  18.  
  19. #define OS2_AWARE
  20. #ifdef HAVE_CONFIG_H
  21. #include <config.h>
  22. #endif
  23.  
  24. #include <stdlib.h>
  25. #include <string.h>
  26. #include <sys/param.h>
  27.  
  28. /* A version of getenv() that works from DLLs */
  29. extern unsigned long DosScanEnv (const unsigned char *pszName, unsigned char **ppszValue);
  30.  
  31. char *
  32. _nl_getenv (const char *name)
  33. {
  34.   unsigned char *value;
  35.   if (DosScanEnv (name, &value))
  36.     return NULL;
  37.   else
  38.     return value;
  39. }
  40.  
  41. /* A fixed size buffer.  */
  42. char libintl_nl_default_dirname[MAXPATHLEN+1];
  43.  
  44. char *_nlos2_libdir = NULL;
  45. char *_nlos2_localealiaspath = NULL;
  46. char *_nlos2_localedir = NULL;
  47.  
  48. static __attribute__((constructor)) void
  49. nlos2_initialize ()
  50. {
  51.   char *root = getenv ("UNIXROOT");
  52.   char *gnulocaledir = getenv ("GNULOCALEDIR");
  53.  
  54.   _nlos2_libdir = gnulocaledir;
  55.   if (!_nlos2_libdir)
  56.     {
  57.       if (root)
  58.         {
  59.           size_t sl = strlen (root);
  60.           _nlos2_libdir = (char *) malloc (sl + strlen (LIBDIR) + 1);
  61.           memcpy (_nlos2_libdir, root, sl);
  62.           memcpy (_nlos2_libdir + sl, LIBDIR, strlen (LIBDIR) + 1);
  63.         }
  64.       else
  65.         _nlos2_libdir = LIBDIR;
  66.     }
  67.  
  68.   _nlos2_localealiaspath = gnulocaledir;
  69.   if (!_nlos2_localealiaspath)
  70.     {
  71.       if (root)
  72.         {
  73.           size_t sl = strlen (root);
  74.           _nlos2_localealiaspath = (char *) malloc (sl + strlen (LOCALE_ALIAS_PATH) + 1);
  75.           memcpy (_nlos2_localealiaspath, root, sl);
  76.           memcpy (_nlos2_localealiaspath + sl, LOCALE_ALIAS_PATH, strlen (LOCALE_ALIAS_PATH) + 1);
  77.         }
  78.      else
  79.         _nlos2_localealiaspath = LOCALE_ALIAS_PATH;
  80.     }
  81.  
  82.   _nlos2_localedir = gnulocaledir;
  83.   if (!_nlos2_localedir)
  84.     {
  85.       if (root)
  86.         {
  87.           size_t sl = strlen (root);
  88.           _nlos2_localedir = (char *) malloc (sl + strlen (LOCALEDIR) + 1);
  89.           memcpy (_nlos2_localedir, root, sl);
  90.           memcpy (_nlos2_localedir + sl, LOCALEDIR, strlen (LOCALEDIR) + 1);
  91.         }
  92.       else
  93.         _nlos2_localedir = LOCALEDIR;
  94.     }
  95.  
  96.   if (strlen (_nlos2_localedir) <= MAXPATHLEN)
  97.     strcpy (libintl_nl_default_dirname, _nlos2_localedir);
  98. }
  99.