From a0750a00b1b2282c9db6becf9a9664e509c84ba3 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Thu, 22 Apr 2021 15:40:51 +0100 Subject: glnx-dirfd: Add a rewinddir() wrapper This is useful in the same situations rewinddir() is. My use-case right now is to remove some of the files from a directory, then go back through the directory removing symlinks that pointed to those files. Signed-off-by: Simon McVittie --- glnx-dirfd.c | 18 ++++++++++++++++++ glnx-dirfd.h | 1 + 2 files changed, 19 insertions(+) diff --git a/glnx-dirfd.c b/glnx-dirfd.c index 6d1e2d2..0a63bcb 100644 --- a/glnx-dirfd.c +++ b/glnx-dirfd.c @@ -173,6 +173,24 @@ glnx_dirfd_iterator_next_dent (GLnxDirFdIterator *dfd_iter, return TRUE; } +/** + * glnx_dirfd_iterator_rewind: + * @dfd_iter: A directory iterator + * + * Rewind to the beginning of @dfd_iter. The next call to + * glnx_dirfd_iterator_next_dent() will provide the first entry in the + * directory. + */ +void +glnx_dirfd_iterator_rewind (GLnxDirFdIterator *dfd_iter) +{ + GLnxRealDirfdIterator *real_dfd_iter = (GLnxRealDirfdIterator*) dfd_iter; + + g_return_if_fail (dfd_iter->initialized); + + rewinddir (real_dfd_iter->d); +} + /** * glnx_dirfd_iterator_next_dent_ensure_dtype: * @dfd_iter: A directory iterator diff --git a/glnx-dirfd.h b/glnx-dirfd.h index 0046ac8..d5773e7 100644 --- a/glnx-dirfd.h +++ b/glnx-dirfd.h @@ -66,6 +66,7 @@ gboolean glnx_dirfd_iterator_next_dent_ensure_dtype (GLnxDirFdIterator *dfd_ite struct dirent **out_dent, GCancellable *cancellable, GError **error); +void glnx_dirfd_iterator_rewind (GLnxDirFdIterator *dfd_iter); void glnx_dirfd_iterator_clear (GLnxDirFdIterator *dfd_iter); G_DEFINE_AUTO_CLEANUP_CLEAR_FUNC(GLnxDirFdIterator, glnx_dirfd_iterator_clear) -- cgit v1.2.1