[libglnx/wip/smcv/rewinddir] glnx-dirfd: Add a rewinddir() wrapper




commit a0750a00b1b2282c9db6becf9a9664e509c84ba3
Author: Simon McVittie <smcv collabora com>
Date:   Thu Apr 22 15:40:51 2021 +0100

    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 <smcv collabora com>

 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)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]