diff options
author | Colin Walters <walters@verbum.org> | 2014-02-27 11:46:49 -0500 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2014-02-27 11:47:35 -0500 |
commit | 7a2499708b6aa0be5a67e4a75de66fb9c18516af (patch) | |
tree | 5ba8d4e77b4220e5ff9d498150fe81ab11bc91bd | |
parent | 31cd0b96bba5ccf391f4c4f5d94cddce44c65793 (diff) | |
download | libgsystem-submodule.tar.gz |
fileutils: Add gs_file_open_dir_fd_at()submodule
This will be used in the OSTree checkout code, where we want to
mkdir() and then open it.
-rw-r--r-- | gsystem-file-utils.c | 28 | ||||
-rw-r--r-- | gsystem-file-utils.h | 6 |
2 files changed, 34 insertions, 0 deletions
diff --git a/gsystem-file-utils.c b/gsystem-file-utils.c index 27e0e2d..545fb30 100644 --- a/gsystem-file-utils.c +++ b/gsystem-file-utils.c @@ -464,6 +464,34 @@ gs_file_open_dir_fd (GFile *path, } /** + * gs_file_open_dir_fd_at: + * @parent_dfd: Parent directory file descriptor + * @name: Directory name + * @out_fd: (out): File descriptor for directory + * @cancellable: Cancellable + * @error: Error + * + * On success, sets @out_fd to a file descriptor for the directory + * that can be used with UNIX functions such as openat(). + */ +gboolean +gs_file_open_dir_fd_at (int parent_dfd, + const char *name, + int *out_fd, + GCancellable *cancellable, + GError **error) +{ + /* Linux specific probably */ + *out_fd = openat (parent_dfd, name, O_RDONLY | O_NONBLOCK | O_DIRECTORY | O_CLOEXEC); + if (*out_fd == -1) + { + _set_error_from_errno (error); + return FALSE; + } + return TRUE; +} + +/** * gs_file_open_in_tmpdir_at: * @tmpdir_fd: Directory to place temporary file * @mode: Default mode (will be affected by umask) diff --git a/gsystem-file-utils.h b/gsystem-file-utils.h index d1cfda2..f873746 100644 --- a/gsystem-file-utils.h +++ b/gsystem-file-utils.h @@ -75,6 +75,12 @@ gboolean gs_file_open_dir_fd (GFile *path, GCancellable *cancellable, GError **error); +gboolean gs_file_open_dir_fd_at (int parent_dfd, + const char *name, + int *out_fd, + GCancellable *cancellable, + GError **error); + gboolean gs_file_open_in_tmpdir_at (int tmpdir_fd, int mode, char **out_name, |