Commit 7f13edfd by Vicent Martí

Merge pull request #1935 from ethomson/winerrs

preserve windows error numbers as well
parents 567649f2 c2408a69
...@@ -74,6 +74,30 @@ void giterr_set(int error_class, const char *string, ...); ...@@ -74,6 +74,30 @@ void giterr_set(int error_class, const char *string, ...);
int giterr_set_regex(const regex_t *regex, int error_code); int giterr_set_regex(const regex_t *regex, int error_code);
/** /**
* Gets the system error code for this thread.
*/
GIT_INLINE(int) giterr_system_last(void)
{
#ifdef GIT_WIN32
return GetLastError();
#else
return errno;
#endif
}
/**
* Sets the system error code for this thread.
*/
GIT_INLINE(void) giterr_system_set(int code)
{
#ifdef GIT_WIN32
SetLastError(code);
#else
errno = code;
#endif
}
/**
* Check a versioned structure for validity * Check a versioned structure for validity
*/ */
GIT_INLINE(int) giterr__check_version(const void *structure, unsigned int expected_max, const char *name) GIT_INLINE(int) giterr__check_version(const void *structure, unsigned int expected_max, const char *name)
......
...@@ -343,11 +343,11 @@ int git_futils_mkdir( ...@@ -343,11 +343,11 @@ int git_futils_mkdir(
/* make directory */ /* make directory */
if (p_mkdir(make_path.ptr, mode) < 0) { if (p_mkdir(make_path.ptr, mode) < 0) {
int tmp_errno = errno; int tmp_errno = giterr_system_last();
/* ignore error if directory already exists */ /* ignore error if directory already exists */
if (p_stat(make_path.ptr, &st) < 0 || !S_ISDIR(st.st_mode)) { if (p_stat(make_path.ptr, &st) < 0 || !S_ISDIR(st.st_mode)) {
errno = tmp_errno; giterr_system_set(tmp_errno);
giterr_set(GITERR_OS, "Failed to make directory '%s'", make_path.ptr); giterr_set(GITERR_OS, "Failed to make directory '%s'", make_path.ptr);
goto done; goto done;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment