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