diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2015-07-02 09:25:48 -0500 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2015-07-02 16:35:43 +0000 |
commit | e069c621bdd62e603b048eb536f5a978a905b310 (patch) | |
tree | e3fa76833856f675d8eda911059a254465cfdf75 /tests/clar_libgit2.c | |
parent | aa92c318a235cc6a5230682b9c071eb35f9c5f4c (diff) | |
download | libgit2-e069c621bdd62e603b048eb536f5a978a905b310.tar.gz |
git__getenv: utf-8 aware env reader
Introduce `git__getenv` which is a UTF-8 aware `getenv` everywhere.
Make `cl_getenv` use this to keep consistent memory handling around
return values (free everywhere, as opposed to only some platforms).
Diffstat (limited to 'tests/clar_libgit2.c')
-rw-r--r-- | tests/clar_libgit2.c | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/tests/clar_libgit2.c b/tests/clar_libgit2.c index dabc47a09..f73fc5b00 100644 --- a/tests/clar_libgit2.c +++ b/tests/clar_libgit2.c @@ -58,31 +58,38 @@ void cl_git_rmfile(const char *filename) cl_must_pass(p_unlink(filename)); } -#ifdef GIT_WIN32 - -#include "win32/utf-conv.h" - char *cl_getenv(const char *name) { - wchar_t *wide_name, *wide_value; - char *utf8_value = NULL; - DWORD value_len; + git_buf out = GIT_BUF_INIT; + int error = git__getenv(&out, name); - cl_assert(git__utf8_to_16_alloc(&wide_name, name) >= 0); + cl_assert(error >= 0 || error == GIT_ENOTFOUND); - value_len = GetEnvironmentVariableW(wide_name, NULL, 0); + if (error == GIT_ENOTFOUND) + return NULL; - if (value_len) { - cl_assert(wide_value = git__malloc(value_len * sizeof(wchar_t))); - cl_assert(GetEnvironmentVariableW(wide_name, wide_value, value_len)); - cl_assert(git__utf16_to_8_alloc(&utf8_value, wide_value) >= 0); - git__free(wide_value); + if (out.size == 0) { + char *dup = git__strdup(""); + cl_assert(dup); + + return dup; } - git__free(wide_name); - return utf8_value; + return git_buf_detach(&out); } +bool cl_is_env_set(const char *name) +{ + char *env = cl_getenv(name); + bool result = (env != NULL); + git__free(env); + return result; +} + +#ifdef GIT_WIN32 + +#include "win32/utf-conv.h" + int cl_setenv(const char *name, const char *value) { wchar_t *wide_name, *wide_value = NULL; @@ -138,10 +145,6 @@ int cl_rename(const char *source, const char *dest) #else #include <stdlib.h> -char *cl_getenv(const char *name) -{ - return getenv(name); -} int cl_setenv(const char *name, const char *value) { |