57 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * dirent.c
 | |
|  *
 | |
|  *  Created on: 2010-11-17
 | |
|  *      Author: bernard
 | |
|  */
 | |
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| #include <finsh.h>
 | |
| 
 | |
| #include <dirent.h>
 | |
| int libc_dirent()
 | |
| {
 | |
| 	DIR * dirp;
 | |
| 	long int save3 = 0;
 | |
| 	long int cur;
 | |
| 	int i = 0;
 | |
| 	int result = 0;
 | |
| 	struct dirent *dp;
 | |
| 
 | |
| 	dirp = opendir("/");
 | |
| 	for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
 | |
| 	{
 | |
| 		/* save position 3 (after fourth entry) */
 | |
| 		if (i++ == 3)
 | |
| 			save3 = telldir(dirp);
 | |
| 
 | |
| 		printf("%s\n", dp->d_name);
 | |
| 
 | |
| 		/* stop at 400 (just to make sure dirp->__offset and dirp->__size are
 | |
| 		 scrambled */
 | |
| 		if (i == 400)
 | |
| 			break;
 | |
| 	}
 | |
| 
 | |
| 	printf("going back past 4-th entry...\n");
 | |
| 
 | |
| 	/* go back to saved entry */
 | |
| 	seekdir(dirp, save3);
 | |
| 
 | |
| 	/* Check whether telldir equals to save3 now.  */
 | |
| 	cur = telldir(dirp);
 | |
| 	if (cur != save3)
 | |
| 	{
 | |
| 		printf("seekdir (d, %ld); telldir (d) == %ld\n", save3, cur);
 | |
| 		result = 1;
 | |
| 	}
 | |
| 
 | |
| 	/* print remaining files (3-last) */
 | |
| 	for (dp = readdir(dirp); dp != NULL; dp = readdir(dirp))
 | |
| 		printf("%s\n", dp->d_name);
 | |
| 
 | |
| 	closedir(dirp);
 | |
| 	return result;
 | |
| }
 | |
| FINSH_FUNCTION_EXPORT(libc_dirent, dirent test for libc);
 |