aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libcrystfel/src/utils.c14
-rw-r--r--libcrystfel/src/utils.h1
-rw-r--r--src/align_detector.c25
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();