diff --git a/src/common.h b/src/common.h index e1e7f0035..5986a6568 100644 --- a/src/common.h +++ b/src/common.h @@ -46,8 +46,13 @@ typedef SSIZE_T ssize_t; #include "thread-utils.h" #include "bswap.h" -extern int git__throw(int error, const char *, ...) GIT_FORMAT_PRINTF(2, 3); -extern int git__rethrow(int error, const char *, ...) GIT_FORMAT_PRINTF(2, 3); +extern void git___throw(const char *, ...) GIT_FORMAT_PRINTF(1, 2); +#define git__throw(error, ...) \ + (git___throw(__VA_ARGS__), error) + +extern void git___rethrow(const char *, ...) GIT_FORMAT_PRINTF(1, 2); +#define git__rethrow(error, ...) \ + (git___rethrow(__VA_ARGS__), error) #include "util.h" diff --git a/src/errors.c b/src/errors.c index e9022c3d1..5031245de 100644 --- a/src/errors.c +++ b/src/errors.c @@ -77,7 +77,7 @@ const char *git_strerror(int num) return "Unknown error"; } -int git__rethrow(int error, const char *msg, ...) +void git___rethrow(const char *msg, ...) { char new_error[1024]; char *old_error = NULL; @@ -91,19 +91,15 @@ int git__rethrow(int error, const char *msg, ...) old_error = strdup(g_last_error); snprintf(g_last_error, sizeof(g_last_error), "%s \n - %s", new_error, old_error); free(old_error); - - return error; } -int git__throw(int error, const char *msg, ...) +void git___throw(const char *msg, ...) { va_list va; va_start(va, msg); vsnprintf(g_last_error, sizeof(g_last_error), msg, va); va_end(va); - - return error; } const char *git_lasterror(void) diff --git a/src/transport_git.c b/src/transport_git.c index c6e1f33a1..00f608ec9 100644 --- a/src/transport_git.c +++ b/src/transport_git.c @@ -151,6 +151,8 @@ static int do_connect(transport_git *t, const char *url) url += strlen(prefix); error = extract_host_and_port(&host, &port, url); + if (error < GIT_SUCCESS) + return error; s = gitno_connect(host, port); connected = 1; error = send_request(s, NULL, url);