From 5012a05ac875c1988263faaa77177c27c62c52bb Mon Sep 17 00:00:00 2001 From: Martin Pärtel Date: Wed, 3 Feb 2021 11:53:21 +0200 Subject: Fix returning inode numbers from readdir() in offset==0 mode. (#584) - Test added for all passthrough examples. - passthrough.c uses offset==0 mode. The others don't. - passthrough.c changed to set FUSE_FILL_DIR_PLUS to make the test pass. - This fixes #583. --- test/readdir_inode.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 test/readdir_inode.c (limited to 'test/readdir_inode.c') diff --git a/test/readdir_inode.c b/test/readdir_inode.c new file mode 100644 index 0000000..7f46c0a --- /dev/null +++ b/test/readdir_inode.c @@ -0,0 +1,45 @@ +/* + * Prints each directory entry and its inode as returned by 'readdir'. + * Skips '.' and '..' because readdir is not required to return them and + * some of our examples don't. + */ + +#include +#include +#include +#include +#include + +int main(int argc, char* argv[]) +{ + DIR* dirp; + struct dirent* dent; + + if (argc != 2) { + fprintf(stderr, "Usage: readdir_inode dir\n"); + return 1; + } + + dirp = opendir(argv[1]); + if (dirp == NULL) { + perror("failed to open directory"); + return 2; + } + + errno = 0; + dent = readdir(dirp); + while (dent != NULL) { + if (strcmp(dent->d_name, ".") != 0 && strcmp(dent->d_name, "..") != 0) { + printf("%llu %s\n", (unsigned long long)dent->d_ino, dent->d_name); + } + dent = readdir(dirp); + } + if (errno != 0) { + perror("failed to read directory entry"); + return 3; + } + + closedir(dirp); + + return 0; +} -- cgit v1.2.3