xref: /nrf52832-nimble/rt-thread/examples/libc/dirent.c (revision 104654410c56c573564690304ae786df310c91fc)
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()12 int 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