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