]> git.proxmox.com Git - libgit2.git/commitdiff
Prefer GetLastError() for GITERR_OS on Win32
authorPhilip Kelley <phkelley@hotmail.com>
Fri, 2 Nov 2012 15:30:55 +0000 (11:30 -0400)
committerPhilip Kelley <phkelley@hotmail.com>
Fri, 2 Nov 2012 15:30:55 +0000 (11:30 -0400)
src/errors.c

index 942a2f79942b15a8215258baa785d9a5e149fbc8..9aad5f05ef6cf291aca19c9b0ff0766f0748af7f 100644 (file)
@@ -41,51 +41,40 @@ 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;
-#endif
-
-       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) {
-                       git_buf_PUTS(&buf, ": ");
-                       git_buf_puts(&buf, strerror(unix_error_code));
-               }
+               int error_code = errno;
 
 #ifdef GIT_WIN32
-               else if (win32_error_code != 0) {
-                       LPVOID lpMsgBuf = NULL;
+               DWORD win32_error_code = GetLastError();
 
-                       FormatMessage(
-                               FORMAT_MESSAGE_ALLOCATE_BUFFER | 
-                               FORMAT_MESSAGE_FROM_SYSTEM |
-                               FORMAT_MESSAGE_IGNORE_INSERTS,
-                               NULL, win32_error_code, 0, (LPTSTR) &lpMsgBuf, 0, NULL);
+               if (win32_error_code) {
+                       char *lpMsgBuf;
 
-                       if (lpMsgBuf) {
+                       if (FormatMessageA(
+                                       FORMAT_MESSAGE_ALLOCATE_BUFFER |
+                                       FORMAT_MESSAGE_FROM_SYSTEM |
+                                       FORMAT_MESSAGE_IGNORE_INSERTS,
+                                       NULL, win32_error_code, 0, (LPSTR)&lpMsgBuf, 0, NULL)) {
                                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))