mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-09 00:12:15 +00:00
Merge pull request #1355 from phkelley/development
Portability fixes for Solaris
This commit is contained in:
commit
5eeb357df8
@ -89,15 +89,16 @@ void giterr_set_str(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)
|
||||||
{
|
{
|
||||||
char error_buf[1024];
|
char error_buf[1024];
|
||||||
|
|
||||||
|
assert(error_code);
|
||||||
|
|
||||||
regerror(error_code, regex, error_buf, sizeof(error_buf));
|
regerror(error_code, regex, error_buf, sizeof(error_buf));
|
||||||
giterr_set_str(GITERR_REGEX, error_buf);
|
giterr_set_str(GITERR_REGEX, error_buf);
|
||||||
|
|
||||||
if (error_code == REG_NOMATCH)
|
if (error_code == REG_NOMATCH)
|
||||||
return GIT_ENOTFOUND;
|
return GIT_ENOTFOUND;
|
||||||
else if (error_code > REG_BADPAT)
|
|
||||||
return GIT_EINVALIDSPEC;
|
return GIT_EINVALIDSPEC;
|
||||||
else
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void giterr_clear(void)
|
void giterr_clear(void)
|
||||||
|
@ -300,25 +300,43 @@ int git_futils_mkdir(
|
|||||||
|
|
||||||
/* make directory */
|
/* make directory */
|
||||||
if (p_mkdir(make_path.ptr, mode) < 0) {
|
if (p_mkdir(make_path.ptr, mode) < 0) {
|
||||||
if (errno == EEXIST) {
|
int already_exists = 0;
|
||||||
if (!lastch && (flags & GIT_MKDIR_VERIFY_DIR) != 0) {
|
|
||||||
if (!git_path_isdir(make_path.ptr)) {
|
switch (errno) {
|
||||||
|
case EEXIST:
|
||||||
|
if (!lastch && (flags & GIT_MKDIR_VERIFY_DIR) != 0 &&
|
||||||
|
!git_path_isdir(make_path.ptr)) {
|
||||||
giterr_set(
|
giterr_set(
|
||||||
GITERR_OS, "Existing path is not a directory '%s'",
|
GITERR_OS, "Existing path is not a directory '%s'",
|
||||||
make_path.ptr);
|
make_path.ptr);
|
||||||
error = GIT_ENOTFOUND;
|
error = GIT_ENOTFOUND;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if ((flags & GIT_MKDIR_EXCL) != 0) {
|
already_exists = 1;
|
||||||
giterr_set(GITERR_OS, "Directory already exists '%s'",
|
break;
|
||||||
|
case ENOSYS:
|
||||||
|
/* Solaris can generate this error if you try to mkdir
|
||||||
|
* a path which is already a mount point. In that case,
|
||||||
|
* the path does already exist; but it's not implied by
|
||||||
|
* the definition of the error, so let's recheck */
|
||||||
|
if (git_path_isdir(make_path.ptr)) {
|
||||||
|
already_exists = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Fall through */
|
||||||
|
errno = ENOSYS;
|
||||||
|
default:
|
||||||
|
giterr_set(GITERR_OS, "Failed to make directory '%s'",
|
||||||
make_path.ptr);
|
make_path.ptr);
|
||||||
error = GIT_EEXISTS;
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
giterr_set(GITERR_OS, "Failed to make directory '%s'",
|
if (already_exists && (flags & GIT_MKDIR_EXCL) != 0) {
|
||||||
|
giterr_set(GITERR_OS, "Directory already exists '%s'",
|
||||||
make_path.ptr);
|
make_path.ptr);
|
||||||
|
error = GIT_EEXISTS;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user