summaryrefslogtreecommitdiff
path: root/src/basic/dirent-util.h
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2021-10-23 00:30:14 +0200
committerLennart Poettering <lennart@poettering.net>2021-10-25 21:51:37 +0200
commita068aceafbffcba85398cce636c25d659265087a (patch)
tree49fd3b3bb3de7030bade9b43752688d44e9c361b /src/basic/dirent-util.h
parenta4e70ef7ba3b5e2c050cce5ed2bbf58807505596 (diff)
downloadsystemd-a068aceafbffcba85398cce636c25d659265087a.tar.gz
stat-util: optimize dir_is_empty_at() a bit, by using getdents64()
That way we have a single syscall only for it, instead of the multiple readdir() and friends do. And we can operate entirely on the stack, no malloc() implicit.
Diffstat (limited to 'src/basic/dirent-util.h')
-rw-r--r--src/basic/dirent-util.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/basic/dirent-util.h b/src/basic/dirent-util.h
index 768cc1de61..a6272f891f 100644
--- a/src/basic/dirent-util.h
+++ b/src/basic/dirent-util.h
@@ -56,3 +56,9 @@ assert_cc(sizeof_field(struct dirent, d_name) == sizeof_field(struct dirent64, d
for (void *_end = (uint8_t*) ({ (de) = (buf); }) + (sz); \
(uint8_t*) (de) < (uint8_t*) _end; \
(de) = (struct dirent*) ((uint8_t*) (de) + (de)->d_reclen))
+
+#define DEFINE_DIRENT_BUFFER(name, sz) \
+ union { \
+ struct dirent de; \
+ uint8_t data[(sz) * DIRENT_SIZE_MAX]; \
+ } name