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