/* $Id: environ.cpp,v 1.15 2002-02-10 13:12:51 sandervl Exp $ */ /* * Win32 environment file functions for OS/2 * * Copyright 1998 Sander van Leeuwen * Copyright 1998 Patrick Haller * Copyright 1998 Peter Fitzsimmons * Copyright 1998 Knut St. Osmundsen * * Parts based on Wine code (ExpandEnvironmentStringsA/W) * (memory\environ.c; 991114) * * Copyright 1996, 1998 Alexandre Julliard * * Project Odin Software License can be found in LICENSE.TXT * */ #include #include #include #include #include #include #include #include #include #include #include #include #define DBG_LOCALLOG DBG_environ #include "dbglocal.h" ODINDEBUGCHANNEL(KERNEL32-ENVIRONMENT) //list of important OS/2 environment variables that must not be removed //when creating a new process static const char *lpReservedEnvStrings[] = { "HOSTNAME", "TZ", "USE_HOSTS_FIRST", "MMBASE", "USER_INI", "SYSTEM_INI", "DPATH", "LANG", "NCDEBUG", "NLSPATH", "TCPLANG", "DLSINI", "INIT_FILE_NAMES", "INIT_FILE_RANGES", "NWDBPATH", "ETC", "WP_OBJHANDLE", "SOMIR", "SOMDDIR", "TMP", "TEMP", }; //****************************************************************************** //****************************************************************************** void InitEnvironment() { CHAR szVar[512]; static BOOL fInit = FALSE; if(fInit) return; //TEMP is a standard environment variable in Windows, but is not always //present in OS/2, so make sure it is. if(GetEnvironmentVariableA("TEMP", szVar, sizeof(szVar)) == 0) { if(GetEnvironmentVariableA("TMP", szVar, sizeof(szVar)) == 0) { //then we just use the windows directory for garbage GetWindowsDirectoryA(szVar, sizeof(szVar)); } SetEnvironmentVariableA("TEMP", szVar); } } extern "C" { //****************************************************************************** //****************************************************************************** LPSTR WIN32API GetEnvironmentStringsA() { InitEnvironment(); return (LPSTR) O32_GetEnvironmentStrings(); } //****************************************************************************** //****************************************************************************** LPWSTR WIN32API GetEnvironmentStringsW() { char *envstrings = (char *)O32_GetEnvironmentStrings(); char *tmp; LPWSTR wenvstrings; int len, i; InitEnvironment(); if(envstrings == NULL) return(NULL); tmp = envstrings; len = 0; while(*tmp != 0) { len += strlen(tmp)+1; tmp = envstrings + len; } len++; //terminating 0 wenvstrings = (LPWSTR)HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); for(i=0;i