mirror of
https://github.com/git/git.git
synced 2026-01-09 01:34:00 +00:00
Merge branch 'ps/object-file-cleanup'
Code clean-up. * ps/object-file-cleanup: object-store: merge "object-store-ll.h" and "object-store.h" object-store: remove global array of cached objects object: split out functions relating to object store subsystem object-file: drop `index_blob_stream()` object-file: split up concerns of `HASH_*` flags object-file: split out functions relating to object store subsystem object-file: move `xmmap()` into "wrapper.c" object-file: move `git_open_cloexec()` to "compat/open.c" object-file: move `safe_create_leading_directories()` into "path.c" object-file: move `mkdir_in_gitdir()` into "path.c"
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
#include "git-compat-util.h"
|
||||
|
||||
#ifdef OPEN_RETURNS_EINTR
|
||||
#undef open
|
||||
int git_open_with_retry(const char *path, int flags, ...)
|
||||
{
|
||||
@@ -23,3 +24,31 @@ int git_open_with_retry(const char *path, int flags, ...)
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
int git_open_cloexec(const char *name, int flags)
|
||||
{
|
||||
int fd;
|
||||
static int o_cloexec = O_CLOEXEC;
|
||||
|
||||
fd = open(name, flags | o_cloexec);
|
||||
if ((o_cloexec & O_CLOEXEC) && fd < 0 && errno == EINVAL) {
|
||||
/* Try again w/o O_CLOEXEC: the kernel might not support it */
|
||||
o_cloexec &= ~O_CLOEXEC;
|
||||
fd = open(name, flags | o_cloexec);
|
||||
}
|
||||
|
||||
#if defined(F_GETFD) && defined(F_SETFD) && defined(FD_CLOEXEC)
|
||||
{
|
||||
static int fd_cloexec = FD_CLOEXEC;
|
||||
|
||||
if (!o_cloexec && 0 <= fd && fd_cloexec) {
|
||||
/* Opened w/o O_CLOEXEC? try with fcntl(2) to add it */
|
||||
int flags = fcntl(fd, F_GETFD);
|
||||
if (fcntl(fd, F_SETFD, flags | fd_cloexec))
|
||||
fd_cloexec = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return fd;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user