aboutsummaryrefslogtreecommitdiff
path: root/src/Startup.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Startup.c')
-rw-r--r--src/Startup.c51
1 files changed, 48 insertions, 3 deletions
diff --git a/src/Startup.c b/src/Startup.c
index 3417117..4f70c4c 100644
--- a/src/Startup.c
+++ b/src/Startup.c
@@ -25,6 +25,9 @@
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
+#ifdef HAVE_DIRENT_H
+#include <dirent.h>
+#endif
#include "ioGH.h"
#include "ioutil_Utils.h"
@@ -218,6 +221,10 @@ static void *SetupGH (tFleshConfig *config, int convergence_level, cGH *GH)
{
int i, maxdim, myproc;
ioGH *myGH;
+#ifdef HAVE_DIRENT_H
+ DIR *dir;
+ struct dirent *file;
+#endif
DECLARE_CCTK_PARAMETERS
@@ -284,10 +291,48 @@ static void *SetupGH (tFleshConfig *config, int convergence_level, cGH *GH)
CCTK_VWarn (1, __LINE__, __FILE__, CCTK_THORNSTRING,
"Problem creating default output directory '%s'", out_dir);
}
- else if (i > 0 && CCTK_Equals (verbose, "full"))
+ else if (i > 0)
{
- CCTK_VInfo (CCTK_THORNSTRING,
- "default output directory '%s' already exists", out_dir);
+ if (CCTK_Equals (verbose, "full"))
+ {
+ CCTK_VInfo (CCTK_THORNSTRING,
+ "default output directory '%s' already exists", out_dir);
+ }
+ if (require_empty_output_directory)
+ {
+#ifdef HAVE_DIRENT_H
+ i = 0;
+ dir = opendir (out_dir);
+ while ((file = readdir (dir)) != NULL)
+ {
+ if (strcmp (file->d_name, ".") == 0 ||
+ strcmp (file->d_name, "..") == 0)
+ {
+ continue;
+ }
+ CCTK_VWarn (2, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "Found file '%s' in already existing output directory '%s'",
+ file->d_name, out_dir);
+ i++;
+ }
+ closedir (dir);
+ if (i)
+ {
+ CCTK_VWarn (0, __LINE__, __FILE__, CCTK_THORNSTRING,
+ "You have set IO::out_dir = '%s' and "
+ "IO::require_empty_output_directory = 'yes'. "
+ "This output directory already exists and is non-empty.",
+ out_dir);
+ }
+#else
+ /* No opendir(3) ??? It's probably a Windows box, so just give up ! */
+ CCTK_WARN (0, "You cannot use 'IO::require_empty_output_directory = "
+ "\"yes\"' on this architecture because it doesn't provide "
+ "opendir(3) to browse the IO::out_dir directory.\n"
+ "Please use 'IO::require_empty_output_directories = "
+ "\"no\"' instead !");
+#endif
+ }
}
i = IOUtil_CreateDirectory (GH, checkpoint_dir,
! CCTK_Equals (out_mode, "onefile"),