danielhilst

readdir_r hangs

May 31st, 2013
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.47 KB | None | 0 0
  1. /* file foo.c
  2.  *
  3.  * Desc: Seems that readdir_r from glibc is blocking ..
  4.  * Compile: gcc -g -o foo foo.c
  5.  * Run:
  6.  *   create two directories one inside another
  7.  *   # mkdir -p bar/tar
  8.  *   now run as
  9.  *   # ./foo bar tar
  10.  *  
  11.  */
  12. #include <assert.h>
  13. #include <dirent.h>
  14. #include <errno.h>
  15. #include <stdio.h>
  16. #include <string.h>
  17. #include <stdlib.h>
  18.  
  19. #define pexit(msg)                              \
  20.         do {                                    \
  21.                 perror(msg);                    \
  22.                 exit(EXIT_FAILURE);             \
  23.         } while (0)
  24.  
  25.  
  26.  
  27.  
  28. int main(int argc, char **argv)
  29. {
  30.         struct dirent *dirp;
  31.         static struct dirent dirbuff;
  32.         struct dirent *result = NULL;
  33.  
  34.         dirp = (struct dirent *) opendir(argv[1]);
  35.         if (!dirp)
  36.                 pexit("opendir");
  37.  
  38.         while (1) {
  39.                 int error = readdir_r((DIR *)dirp, &dirbuff, &result);
  40.                 if (error)
  41.                         pexit("readdir_r");
  42.                
  43.                 if (!result)
  44.                         break;
  45.  
  46.                 printf("at %s\n", dirp->d_name);
  47.                 printf("read %s\n", dirbuff.d_name);
  48.  
  49.                 if (strcmp(dirbuff.d_name, argv[2]) == 0) {
  50.                         printf("entering in %s\n", argv[2]);
  51.                         result == NULL;
  52.                         dirp = &dirbuff;
  53.                         continue;
  54.                 }
  55.         }
  56.         return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment