printenv-test.c 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. // This is an open source non-commercial project. Dear PVS-Studio, please check
  2. // it. PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
  3. #include <stdio.h>
  4. #ifdef WIN32
  5. # include <windows.h>
  6. #else
  7. # include <stdlib.h>
  8. #endif
  9. #ifdef WIN32
  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. #ifdef WIN32
  19. wchar_t *value = _wgetenv(argv[1]);
  20. if (value == NULL) {
  21. return 1;
  22. }
  23. int utf8_len = WideCharToMultiByte(CP_UTF8,
  24. 0,
  25. value,
  26. -1,
  27. NULL,
  28. 0,
  29. NULL,
  30. NULL);
  31. if (utf8_len == 0) {
  32. return (int)GetLastError();
  33. }
  34. char *utf8_value = (char *)calloc((size_t)utf8_len, sizeof(char));
  35. utf8_len = WideCharToMultiByte(CP_UTF8,
  36. 0,
  37. value,
  38. -1,
  39. utf8_value,
  40. utf8_len,
  41. NULL,
  42. NULL);
  43. fprintf(stdout, "%s", utf8_value);
  44. free(utf8_value);
  45. #else
  46. char *value = getenv(argv[1]);
  47. if (value == NULL) {
  48. fprintf(stderr, "env var not found: %s", argv[1]);
  49. return 1;
  50. }
  51. fprintf(stdout, "%s", value);
  52. #endif
  53. fflush(stdout);
  54. return 0;
  55. }