dirent.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /*
  2. * dirent.c
  3. *
  4. * Created on: 2010-11-17
  5. * Author: bernard
  6. */
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <finsh.h>
  10. #include <dirent.h>
  11. int libc_dirent()
  12. {
  13. DIR * dirp;
  14. long int save3 = 0;
  15. long int cur;
  16. int i = 0;
  17. int result = 0;
  18. struct dirent *dp;
  19. dirp = opendir("/");
  20. for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
  21. {
  22. /* save position 3 (after fourth entry) */
  23. if (i++ == 3)
  24. save3 = telldir(dirp);
  25. printf("%s\n", dp->d_name);
  26. /* stop at 400 (just to make sure dirp->__offset and dirp->__size are
  27. scrambled */
  28. if (i == 400)
  29. break;
  30. }
  31. printf("going back past 4-th entry...\n");
  32. /* go back to saved entry */
  33. seekdir(dirp, save3);
  34. /* Check whether telldir equals to save3 now. */
  35. cur = telldir(dirp);
  36. if (cur != save3)
  37. {
  38. printf("seekdir (d, %ld); telldir (d) == %ld\n", save3, cur);
  39. result = 1;
  40. }
  41. /* print remaining files (3-last) */
  42. for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
  43. printf("%s\n", dp->d_name);
  44. closedir(dirp);
  45. return result;
  46. }
  47. FINSH_FUNCTION_EXPORT(libc_dirent, dirent test for libc);