Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* file foo.c
- *
- * Desc: Seems that readdir_r from glibc is blocking ..
- * Compile: gcc -g -o foo foo.c
- * Run:
- * create two directories one inside another
- * # mkdir -p bar/tar
- * now run as
- * # ./foo bar tar
- *
- */
- #include <assert.h>
- #include <dirent.h>
- #include <errno.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #define pexit(msg) \
- do { \
- perror(msg); \
- exit(EXIT_FAILURE); \
- } while (0)
- int main(int argc, char **argv)
- {
- struct dirent *dirp;
- static struct dirent dirbuff;
- struct dirent *result = NULL;
- dirp = (struct dirent *) opendir(argv[1]);
- if (!dirp)
- pexit("opendir");
- while (1) {
- int error = readdir_r((DIR *)dirp, &dirbuff, &result);
- if (error)
- pexit("readdir_r");
- if (!result)
- break;
- printf("at %s\n", dirp->d_name);
- printf("read %s\n", dirbuff.d_name);
- if (strcmp(dirbuff.d_name, argv[2]) == 0) {
- printf("entering in %s\n", argv[2]);
- result == NULL;
- dirp = &dirbuff;
- continue;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment