printenv-test.c (1370B)
1 #include <stdio.h> 2 3 #ifdef MSWIN 4 # include <windows.h> 5 #else 6 # include <stdlib.h> 7 #endif 8 9 #ifdef MSWIN 10 int wmain(int argc, wchar_t **argv) 11 #else 12 int main(int argc, char **argv) 13 #endif 14 { 15 if (argc != 2) { 16 return 1; 17 } 18 19 #ifdef MSWIN 20 wchar_t *value = _wgetenv(argv[1]); 21 if (value == NULL) { 22 return 1; 23 } 24 int utf8_len = WideCharToMultiByte(CP_UTF8, 25 0, 26 value, 27 -1, 28 NULL, 29 0, 30 NULL, 31 NULL); 32 if (utf8_len == 0) { 33 return (int)GetLastError(); 34 } 35 char *utf8_value = (char *)calloc((size_t)utf8_len, sizeof(char)); 36 utf8_len = WideCharToMultiByte(CP_UTF8, 37 0, 38 value, 39 -1, 40 utf8_value, 41 utf8_len, 42 NULL, 43 NULL); 44 fprintf(stdout, "%s", utf8_value); 45 free(utf8_value); 46 #else 47 char *value = getenv(argv[1]); 48 if (value == NULL) { 49 fprintf(stderr, "env var not found: %s", argv[1]); 50 return 1; 51 } 52 fprintf(stdout, "%s", value); 53 #endif 54 fflush(stdout); 55 return 0; 56 }