summaryrefslogtreecommitdiff
path: root/tests/clar_libgit2.c
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2015-07-02 09:25:48 -0500
committerEdward Thomson <ethomson@edwardthomson.com>2015-07-02 16:35:43 +0000
commite069c621bdd62e603b048eb536f5a978a905b310 (patch)
treee3fa76833856f675d8eda911059a254465cfdf75 /tests/clar_libgit2.c
parentaa92c318a235cc6a5230682b9c071eb35f9c5f4c (diff)
downloadlibgit2-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.c43
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)
{