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