diff options
author | tradke <tradke@b589c3ab-70e8-4b4d-a09f-cba2dd200880> | 2000-01-17 14:58:57 +0000 |
---|---|---|
committer | tradke <tradke@b589c3ab-70e8-4b4d-a09f-cba2dd200880> | 2000-01-17 14:58:57 +0000 |
commit | 5679b66909f40aa95a84a5bcdaf4d85b4937bdba (patch) | |
tree | 00431a3eadae430f07689851a6ee2f4a08f27d57 /src | |
parent | 3332cf64441f7ad9530939a71921328470cdd02d (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.c | 27 |
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); } |