diff options
Diffstat (limited to 'src/win32/utf-conv.c')
-rw-r--r-- | src/win32/utf-conv.c | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/src/win32/utf-conv.c b/src/win32/utf-conv.c index b1b838eb7..76f1e4237 100644 --- a/src/win32/utf-conv.c +++ b/src/win32/utf-conv.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2011 the libgit2 contributors + * Copyright (C) 2009-2012 the libgit2 contributors * * This file is part of libgit2, distributed under the GNU GPL v2 with * a Linking Exception. For full terms see the included COPYING file. @@ -7,6 +7,7 @@ #include "common.h" #include "utf-conv.h" +#include "git2/windows.h" /* * Default codepage value @@ -31,25 +32,24 @@ void gitwin_set_utf8(void) wchar_t* gitwin_to_utf16(const char* str) { wchar_t* ret; - int cb; + size_t cb; - if (!str) { + if (!str) return NULL; - } cb = strlen(str) * sizeof(wchar_t); - if (cb == 0) { - ret = (wchar_t*)git__malloc(sizeof(wchar_t)); - ret[0] = 0; - return ret; - } + if (cb == 0) + return (wchar_t *)git__calloc(1, sizeof(wchar_t)); /* Add space for null terminator */ cb += sizeof(wchar_t); - ret = (wchar_t*)git__malloc(cb); + ret = (wchar_t *)git__malloc(cb); + if (!ret) + return NULL; - if (MultiByteToWideChar(_active_codepage, 0, str, -1, ret, cb) == 0) { + if (MultiByteToWideChar(_active_codepage, 0, str, -1, ret, (int)cb) == 0) { + giterr_set(GITERR_OS, "Could not convert string to UTF-16"); git__free(ret); ret = NULL; } @@ -59,31 +59,33 @@ wchar_t* gitwin_to_utf16(const char* str) int gitwin_append_utf16(wchar_t *buffer, const char *str, size_t len) { - return MultiByteToWideChar(_active_codepage, 0, str, -1, buffer, len); + int result = MultiByteToWideChar(_active_codepage, 0, str, -1, buffer, (int)len); + if (result == 0) + giterr_set(GITERR_OS, "Could not convert string to UTF-16"); + return result; } char* gitwin_from_utf16(const wchar_t* str) { char* ret; - int cb; + size_t cb; - if (!str) { + if (!str) return NULL; - } cb = wcslen(str) * sizeof(char); - if (cb == 0) { - ret = (char*)git__malloc(sizeof(char)); - ret[0] = 0; - return ret; - } + if (cb == 0) + return (char *)git__calloc(1, sizeof(char)); /* Add space for null terminator */ cb += sizeof(char); ret = (char*)git__malloc(cb); + if (!ret) + return NULL; - if (WideCharToMultiByte(_active_codepage, 0, str, -1, ret, cb, NULL, NULL) == 0) { + if (WideCharToMultiByte(_active_codepage, 0, str, -1, ret, (int)cb, NULL, NULL) == 0) { + giterr_set(GITERR_OS, "Could not convert string to UTF-8"); git__free(ret); ret = NULL; } |