aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortradke <tradke@b589c3ab-70e8-4b4d-a09f-cba2dd200880>2000-01-17 14:58:57 +0000
committertradke <tradke@b589c3ab-70e8-4b4d-a09f-cba2dd200880>2000-01-17 14:58:57 +0000
commit5679b66909f40aa95a84a5bcdaf4d85b4937bdba (patch)
tree00431a3eadae430f07689851a6ee2f4a08f27d57 /src
parent3332cf64441f7ad9530939a71921328470cdd02d (diff)
Don't write to output files which couldn't be opened.
git-svn-id: http://svn.cactuscode.org/arrangements/CactusBase/IOBasic/trunk@24 b589c3ab-70e8-4b4d-a09f-cba2dd200880
Diffstat (limited to 'src')
-rw-r--r--src/Write.c27
1 files changed, 20 insertions, 7 deletions
diff --git a/src/Write.c b/src/Write.c
index 9830763..40cc6aa 100644
--- a/src/Write.c
+++ b/src/Write.c
@@ -45,21 +45,30 @@ void IOBasic_Write (cGH *GH, int index, const char *alias)
/* Open the file (we write only on proc0) */
if (CCTK_MyProc (GH) == 0)
{
- char fname[256];
+ char *fname;
iobasicGH *myGH;
myGH = (iobasicGH *) GH->extensions [CCTK_GHExtensionHandle ("IOBasic")];
+ fname = (char *) malloc (strlen (myGH->outdirScalar) + strlen (alias) + 5);
+ sprintf (fname, "%s/%s.tl", myGH->outdirScalar, alias);
+
/* see if output files for this alias name were already created */
- if (GetNamedData (myGH->filenameListScalar, alias) == NULL) {
- /* just store a non-NULL pointer in database */
- StoreNamedData (&myGH->filenameListScalar, alias, (void *) 1);
+ if (GetNamedData (myGH->filenameListScalar, fname) == NULL)
openmode = "w";
- } else
+ else
openmode = "a";
- sprintf (fname, "%s/%s.tl", myGH->outdirScalar, alias);
file = fopen(fname,openmode);
+ if (file == NULL) {
+ char *msg = (char *) malloc (100 + strlen (fname));
+
+ sprintf (msg, "Could not open output file '%s'", fname);
+ CCTK_WARN (3, msg);
+ free (msg);
+ free (fname);
+ return;
+ }
if (*openmode == 'w') {
char title_start_char;
@@ -73,6 +82,9 @@ void IOBasic_Write (cGH *GH, int index, const char *alias)
}
fprintf (file,"%c%s v time\n",title_start_char,alias);
+
+ /* just store a non-NULL pointer in database */
+ StoreNamedData (&myGH->filenameListScalar, fname, (void *) 1);
}
switch (CCTK_VarTypeI(index)) {
@@ -86,10 +98,11 @@ void IOBasic_Write (cGH *GH, int index, const char *alias)
break;
default:
CCTK_WARN (3, "Unsupported data type");
- return;
+ break;
}
fclose(file);
+ free (fname);
}