vendor/libgit2/src/errors.c in rugged-0.17.0.b7 vs vendor/libgit2/src/errors.c in rugged-0.18.0.b1
- old
+ new
@@ -1,7 +1,7 @@
/*
- * Copyright (C) 2009-2012 the libgit2 contributors
+ * Copyright (C) the libgit2 contributors. All rights reserved.
*
* This file is part of libgit2, distributed under the GNU GPL v2 with
* a Linking Exception. For full terms see the included COPYING file.
*/
#include "common.h"
@@ -38,56 +38,38 @@
void giterr_set(int error_class, const char *string, ...)
{
git_buf buf = GIT_BUF_INIT;
va_list arglist;
-
- int unix_error_code = 0;
-
#ifdef GIT_WIN32
- DWORD win32_error_code = 0;
+ DWORD win32_error_code = (error_class == GITERR_OS) ? GetLastError() : 0;
#endif
+ int error_code = (error_class == GITERR_OS) ? errno : 0;
- if (error_class == GITERR_OS) {
- unix_error_code = errno;
- errno = 0;
-
-#ifdef GIT_WIN32
- win32_error_code = GetLastError();
- SetLastError(0);
-#endif
- }
-
va_start(arglist, string);
git_buf_vprintf(&buf, string, arglist);
va_end(arglist);
- /* automatically suffix strerror(errno) for GITERR_OS errors */
if (error_class == GITERR_OS) {
-
- if (unix_error_code != 0) {
+#ifdef GIT_WIN32
+ char * win32_error = git_win32_get_error_message(win32_error_code);
+ if (win32_error) {
git_buf_PUTS(&buf, ": ");
- git_buf_puts(&buf, strerror(unix_error_code));
- }
+ git_buf_puts(&buf, win32_error);
+ git__free(win32_error);
-#ifdef GIT_WIN32
- else if (win32_error_code != 0) {
- LPVOID lpMsgBuf = NULL;
-
- FormatMessage(
- FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL, win32_error_code, 0, (LPTSTR) &lpMsgBuf, 0, NULL);
-
- if (lpMsgBuf) {
- git_buf_PUTS(&buf, ": ");
- git_buf_puts(&buf, lpMsgBuf);
- LocalFree(lpMsgBuf);
- }
+ SetLastError(0);
}
+ else
#endif
+ if (error_code) {
+ git_buf_PUTS(&buf, ": ");
+ git_buf_puts(&buf, strerror(error_code));
+ }
+
+ if (error_code)
+ errno = 0;
}
if (!git_buf_oom(&buf))
set_error(error_class, git_buf_detach(&buf));
}
@@ -102,18 +84,27 @@
if (message)
set_error(error_class, message);
}
-void giterr_set_regex(const regex_t *regex, int error_code)
+int giterr_set_regex(const regex_t *regex, int error_code)
{
char error_buf[1024];
+
+ assert(error_code);
+
regerror(error_code, regex, error_buf, sizeof(error_buf));
giterr_set_str(GITERR_REGEX, error_buf);
+
+ if (error_code == REG_NOMATCH)
+ return GIT_ENOTFOUND;
+
+ return GIT_EINVALIDSPEC;
}
void giterr_clear(void)
{
+ set_error(0, NULL);
GIT_GLOBAL->last_error = NULL;
errno = 0;
#ifdef GIT_WIN32
SetLastError(0);