lsx: detect read errors
							parent
							
								
									c71abdc65c
								
							
						
					
					
						commit
						7bbd4c56eb
					
				
							
								
								
									
										16
									
								
								lsx.c
								
								
								
								
							
							
						
						
									
										16
									
								
								lsx.c
								
								
								
								
							|  | @ -1,5 +1,6 @@ | |||
| /* See LICENSE file for copyright and license details. */ | ||||
| #include <dirent.h> | ||||
| #include <errno.h> | ||||
| #include <limits.h> | ||||
| #include <stdio.h> | ||||
| #include <stdlib.h> | ||||
|  | @ -28,14 +29,15 @@ lsx(const char *dir) { | |||
| 	struct stat st; | ||||
| 	DIR *dp; | ||||
| 
 | ||||
| 	if(!(dp = opendir(dir))) { | ||||
| 	for(dp = opendir(dir); dp && (d = readdir(dp)); errno = 0) | ||||
| 		if(snprintf(buf, sizeof buf, "%s/%s", dir, d->d_name) < (int)sizeof buf | ||||
| 		&& access(buf, X_OK) == 0 && stat(buf, &st) == 0 && S_ISREG(st.st_mode)) | ||||
| 			puts(d->d_name); | ||||
| 
 | ||||
| 	if(errno != 0) { | ||||
| 		status = EXIT_FAILURE; | ||||
| 		perror(dir); | ||||
| 		return; | ||||
| 	} | ||||
| 	while((d = readdir(dp))) | ||||
| 		if(snprintf(buf, sizeof buf, "%s/%s", dir, d->d_name) < (int)sizeof buf | ||||
| 		&& stat(buf, &st) == 0 && S_ISREG(st.st_mode) && access(buf, X_OK) == 0) | ||||
| 			puts(d->d_name); | ||||
| 	closedir(dp); | ||||
| 	if(dp) | ||||
| 		closedir(dp); | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue