1 /* $NetBSD: os2compat.c,v 1.1.1.1 2016/01/14 00:11:28 christos Exp $ */ 2 3 /* OS/2 compatibility functions. 4 Copyright (C) 2001-2002 Free Software Foundation, Inc. 5 6 This program is free software; you can redistribute it and/or modify it 7 under the terms of the GNU Library General Public License as published 8 by the Free Software Foundation; either version 2, or (at your option) 9 any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 Library General Public License for more details. 15 16 You should have received a copy of the GNU Library General Public 17 License along with this program; if not, write to the Free Software 18 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 19 USA. */ 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 */ 31 extern unsigned long DosScanEnv (const unsigned char *pszName, unsigned char **ppszValue); 32 33 char * 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. */ 44 char libintl_nl_default_dirname[MAXPATHLEN+1]; 45 46 char *_nlos2_libdir = NULL; 47 char *_nlos2_localealiaspath = NULL; 48 char *_nlos2_localedir = NULL; 49 50 static __attribute__((constructor)) void 51 nlos2_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