diff --git a/generate/templates/manual/include/str_array_converter.h b/generate/templates/manual/include/str_array_converter.h index 5f580e961..c0df65fc9 100644 --- a/generate/templates/manual/include/str_array_converter.h +++ b/generate/templates/manual/include/str_array_converter.h @@ -16,6 +16,7 @@ class StrArrayConverter { private: static git_strarray *ConvertArray(Array *val); static git_strarray *ConvertString(Handle val); + static git_strarray *AllocStrArray(const size_t count); static git_strarray *ConstructStrArray(int argc, char** argv); }; diff --git a/generate/templates/manual/src/str_array_converter.cc b/generate/templates/manual/src/str_array_converter.cc index d5a7081f7..3e8de909e 100644 --- a/generate/templates/manual/src/str_array_converter.cc +++ b/generate/templates/manual/src/str_array_converter.cc @@ -24,10 +24,17 @@ git_strarray *StrArrayConverter::Convert(Handle val) { } } +static git_strarray * StrArrayConverter::AllocStrArray(const size_t count) { + const size_t size = sizeof(git_strarray) + (sizeof(char*) * count); + uint8_t* memory = reinterpret_cast(malloc(size)); + git_strarray *result = reinterpret_cast(memory); + result->count = count; + result->strings = reinterpret_cast(memory + sizeof(git_strarray)); + return result; +} + git_strarray *StrArrayConverter::ConvertArray(Array *val) { - git_strarray *result = (git_strarray *)malloc(sizeof(git_strarray*)); - result->count = val->Length(); - result->strings = (char **)malloc(sizeof(char*) * result->count); + git_strarray *result = AllocStrArray(val->Length()); for(size_t i = 0; i < result->count; i++) { NanUtf8String entry(val->Get(i)); @@ -47,9 +54,7 @@ git_strarray* StrArrayConverter::ConvertString(Handle val) { } git_strarray *StrArrayConverter::ConstructStrArray(int argc, char** argv) { - git_strarray *result = (git_strarray *)malloc(sizeof(git_strarray*)); - result->count = argc; - result->strings = (char **)malloc(sizeof(char*) * result->count); + git_strarray *result = AllocStrArray(argc); for(size_t i = 0; i < result->count; i++) { result->strings[i] = strdup(argv[i]);