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