"Fossies" - the Fresh Open Source Software Archive

Member "OpenSP-1.5.2/intl/os2compat.c" (26 Aug 2005, 2887 Bytes) of package /linux/misc/old/OpenSP-1.5.2.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    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 }