diff options
author | Thomas White <taw@physics.org> | 2024-01-12 10:46:10 +0100 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2024-01-12 10:46:10 +0100 |
commit | a397af95ba722b10ae552158ea1b343b5899451a (patch) | |
tree | 64a862db26aca0cda7035ed6435fd0a35252d484 | |
parent | 2d72edc620c6746bed5c10d148b45bb49a58c73a (diff) |
align_detector: Enumerate directory contents if necessary
-rw-r--r-- | libcrystfel/src/utils.c | 14 | ||||
-rw-r--r-- | libcrystfel/src/utils.h | 1 | ||||
-rw-r--r-- | src/align_detector.c | 25 |
3 files changed, 38 insertions, 2 deletions
diff --git a/libcrystfel/src/utils.c b/libcrystfel/src/utils.c index 10e4c38e..44faa7ee 100644 --- a/libcrystfel/src/utils.c +++ b/libcrystfel/src/utils.c @@ -933,6 +933,20 @@ int file_exists(const char *filename) } +int is_dir(const char *filename) +{ + struct stat statbuf; + int r; + + r = stat(filename, &statbuf); + if ( r != 0 ) { + return 0; + } + + return S_ISDIR(statbuf.st_mode); +} + + int compare_double(const void *av, const void *bv) { double a = *(double *)av; diff --git a/libcrystfel/src/utils.h b/libcrystfel/src/utils.h index 3a228b22..cb68069e 100644 --- a/libcrystfel/src/utils.h +++ b/libcrystfel/src/utils.h @@ -247,6 +247,7 @@ extern char *safe_strdup(const char *in); extern void strip_extension(char *bfn); extern char *load_entire_file(const char *filename); extern int file_exists(const char *filename); +extern int is_dir(const char *filename); extern const char *filename_extension(const char *fn, const char **ext2); diff --git a/src/align_detector.c b/src/align_detector.c index bdad7039..bb2eb029 100644 --- a/src/align_detector.c +++ b/src/align_detector.c @@ -34,6 +34,7 @@ #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> +#include <dirent.h> #include <stdlib.h> #include <stdio.h> #include <string.h> @@ -255,6 +256,22 @@ static int run_pede() } +static void write_children(FILE *fh, const char *dir) +{ + DIR *d = opendir(dir); + struct dirent *dent = readdir(d); + + while ( dent != NULL ) { + if ( dent->d_name[0] == 'm' ) { + fprintf(fh, "%s/%s\n", dir, dent->d_name); + } + dent = readdir(d); + } + + closedir(d); +} + + int main(int argc, char *argv[]) { int c; @@ -352,7 +369,7 @@ int main(int argc, char *argv[]) r = stat(argv[i], &statbuf); if ( r != 0 ) { - ERROR("File '%s' not found\n", argv[i]); + ERROR("File/directory '%s' not found\n", argv[i]); return 1; } @@ -364,7 +381,11 @@ int main(int argc, char *argv[]) } } - fprintf(fh, "%s\n", argv[i]); + if ( is_dir(argv[i]) ) { + write_children(fh, argv[i]); + } else { + fprintf(fh, "%s\n", argv[i]); + } } if ( warn_times ) print_time_warning(); |