diff options
author | Martin Pärtel <martin.partel@gmail.com> | 2021-02-03 11:53:21 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-03 09:53:21 +0000 |
commit | 5012a05ac875c1988263faaa77177c27c62c52bb (patch) | |
tree | 0207e1ee07d56e020798b89b30bea75d10559f74 /test/readdir_inode.c | |
parent | b9e3ea01dbbbba9518da216dd29c042af871ae31 (diff) | |
download | libfuse-5012a05ac875c1988263faaa77177c27c62c52bb.tar.gz |
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.
Diffstat (limited to 'test/readdir_inode.c')
-rw-r--r-- | test/readdir_inode.c | 45 |
1 files changed, 45 insertions, 0 deletions
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 <stdio.h> +#include <string.h> +#include <sys/types.h> +#include <dirent.h> +#include <errno.h> + +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; +} |