From 5679b66909f40aa95a84a5bcdaf4d85b4937bdba Mon Sep 17 00:00:00 2001 From: tradke Date: Mon, 17 Jan 2000 14:58:57 +0000 Subject: 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 --- src/Write.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'src/Write.c') 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); } -- cgit v1.2.3