|
|
|
@ -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> |
|
|
|
@ -8,6 +9,8 @@ |
|
|
|
|
|
|
|
|
|
static void lsx(const char *dir); |
|
|
|
|
|
|
|
|
|
static int status = EXIT_SUCCESS; |
|
|
|
|
|
|
|
|
|
int |
|
|
|
|
main(int argc, char *argv[]) { |
|
|
|
|
int i; |
|
|
|
@ -16,7 +19,7 @@ main(int argc, char *argv[]) { |
|
|
|
|
lsx("."); |
|
|
|
|
else for(i = 1; i < argc; i++) |
|
|
|
|
lsx(argv[i]); |
|
|
|
|
return EXIT_SUCCESS; |
|
|
|
|
return status; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
@ -26,13 +29,15 @@ lsx(const char *dir) { |
|
|
|
|
struct stat st; |
|
|
|
|
DIR *dp; |
|
|
|
|
|
|
|
|
|
if(!(dp = opendir(dir))) { |
|
|
|
|
perror(dir); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
while((d = readdir(dp))) |
|
|
|
|
for(dp = opendir(dir); dp && (d = readdir(dp)); errno = 0) |
|
|
|
|
if(snprintf(buf, sizeof buf, "%s/%s", dir, d->d_name) < (int)sizeof buf |
|
|
|
|
&& !stat(buf, &st) && S_ISREG(st.st_mode) && access(buf, X_OK) == 0) |
|
|
|
|
&& 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); |
|
|
|
|
} |
|
|
|
|
if(dp) |
|
|
|
|
closedir(dp); |
|
|
|
|
} |
|
|
|
|