1 /** 2 * WinPR: Windows Portable Runtime 3 * Process Environment Functions 4 * 5 * Copyright 2012 Marc-Andre Moreau <marcandre.moreau@gmail.com> 6 * Copyright 2013 Thincast Technologies GmbH 7 * Copyright 2013 DI (FH) Martin Haimberger <martin.haimberger@thincast.com> 8 * 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 */ 21 22 #ifndef WINPR_ENVIRONMENT_H 23 #define WINPR_ENVIRONMENT_H 24 25 #include <winpr/winpr.h> 26 #include <winpr/wtypes.h> 27 28 #ifndef _WIN32 29 30 #ifdef __cplusplus 31 extern "C" 32 { 33 #endif 34 35 WINPR_API DWORD GetCurrentDirectoryA(DWORD nBufferLength, LPSTR lpBuffer); 36 WINPR_API DWORD GetCurrentDirectoryW(DWORD nBufferLength, LPWSTR lpBuffer); 37 38 WINPR_API BOOL SetCurrentDirectoryA(LPCSTR lpPathName); 39 WINPR_API BOOL SetCurrentDirectoryW(LPCWSTR lpPathName); 40 41 WINPR_API DWORD SearchPathA(LPCSTR lpPath, LPCSTR lpFileName, LPCSTR lpExtension, 42 DWORD nBufferLength, LPSTR lpBuffer, LPSTR* lpFilePart); 43 WINPR_API DWORD SearchPathW(LPCWSTR lpPath, LPCWSTR lpFileName, LPCWSTR lpExtension, 44 DWORD nBufferLength, LPWSTR lpBuffer, LPWSTR* lpFilePart); 45 46 WINPR_API LPSTR GetCommandLineA(VOID); 47 WINPR_API LPWSTR GetCommandLineW(VOID); 48 49 WINPR_API BOOL NeedCurrentDirectoryForExePathA(LPCSTR ExeName); 50 WINPR_API BOOL NeedCurrentDirectoryForExePathW(LPCWSTR ExeName); 51 52 #ifdef __cplusplus 53 } 54 #endif 55 56 #ifdef UNICODE 57 #define GetCurrentDirectory GetCurrentDirectoryW 58 #define SetCurrentDirectory SetCurrentDirectoryW 59 #define SearchPath SearchPathW 60 #define GetCommandLine GetCommandLineW 61 #define NeedCurrentDirectoryForExePath NeedCurrentDirectoryForExePathW 62 #else 63 #define GetCurrentDirectory GetCurrentDirectoryA 64 #define SetCurrentDirectory SetCurrentDirectoryA 65 #define SearchPath SearchPathA 66 #define GetCommandLine GetCommandLineA 67 #define NeedCurrentDirectoryForExePath NeedCurrentDirectoryForExePathA 68 #endif 69 70 #endif 71 72 #if !defined(_WIN32) || defined(_UWP) 73 74 #ifdef __cplusplus 75 extern "C" 76 { 77 #endif 78 79 WINPR_API DWORD GetEnvironmentVariableA(LPCSTR lpName, LPSTR lpBuffer, DWORD nSize); 80 WINPR_API DWORD GetEnvironmentVariableW(LPCWSTR lpName, LPWSTR lpBuffer, DWORD nSize); 81 82 WINPR_API BOOL SetEnvironmentVariableA(LPCSTR lpName, LPCSTR lpValue); 83 WINPR_API BOOL SetEnvironmentVariableW(LPCWSTR lpName, LPCWSTR lpValue); 84 85 /** 86 * A brief history of the GetEnvironmentStrings functions: 87 * http://blogs.msdn.com/b/oldnewthing/archive/2013/01/17/10385718.aspx 88 */ 89 90 WINPR_API LPCH GetEnvironmentStrings(VOID); 91 WINPR_API LPWCH GetEnvironmentStringsW(VOID); 92 93 WINPR_API BOOL SetEnvironmentStringsA(LPCH NewEnvironment); 94 WINPR_API BOOL SetEnvironmentStringsW(LPWCH NewEnvironment); 95 96 WINPR_API DWORD ExpandEnvironmentStringsA(LPCSTR lpSrc, LPSTR lpDst, DWORD nSize); 97 WINPR_API DWORD ExpandEnvironmentStringsW(LPCWSTR lpSrc, LPWSTR lpDst, DWORD nSize); 98 99 WINPR_API BOOL FreeEnvironmentStringsA(LPCH lpszEnvironmentBlock); 100 WINPR_API BOOL FreeEnvironmentStringsW(LPWCH lpszEnvironmentBlock); 101 102 #ifdef __cplusplus 103 } 104 #endif 105 106 #ifdef UNICODE 107 #define GetEnvironmentVariable GetEnvironmentVariableW 108 #define SetEnvironmentVariable SetEnvironmentVariableW 109 #define GetEnvironmentStrings GetEnvironmentStringsW 110 #define SetEnvironmentStrings SetEnvironmentStringsW 111 #define ExpandEnvironmentStrings ExpandEnvironmentStringsW 112 #define FreeEnvironmentStrings FreeEnvironmentStringsW 113 #else 114 #define GetEnvironmentVariable GetEnvironmentVariableA 115 #define SetEnvironmentVariable SetEnvironmentVariableA 116 #define GetEnvironmentStringsA GetEnvironmentStrings 117 #define SetEnvironmentStrings SetEnvironmentStringsA 118 #define ExpandEnvironmentStrings ExpandEnvironmentStringsA 119 #define FreeEnvironmentStrings FreeEnvironmentStringsA 120 #endif 121 122 #endif 123 124 #ifdef __cplusplus 125 extern "C" 126 { 127 #endif 128 129 WINPR_API LPCH MergeEnvironmentStrings(PCSTR original, PCSTR merge); 130 131 WINPR_API DWORD GetEnvironmentVariableEBA(LPCSTR envBlock, LPCSTR lpName, LPSTR lpBuffer, 132 DWORD nSize); 133 WINPR_API BOOL SetEnvironmentVariableEBA(LPSTR* envBlock, LPCSTR lpName, LPCSTR lpValue); 134 135 WINPR_API char** EnvironmentBlockToEnvpA(LPCH lpszEnvironmentBlock); 136 137 #ifdef __cplusplus 138 } 139 #endif 140 141 #endif /* WINPR_ENVIRONMENT_H */ 142