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); |