--- ray/src/util/wrapBSDF.c 2016/02/02 18:02:32 2.17 +++ ray/src/util/wrapBSDF.c 2016/03/06 01:13:18 2.20 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: wrapBSDF.c,v 2.17 2016/02/02 18:02:32 greg Exp $"; +static const char RCSid[] = "$Id: wrapBSDF.c,v 2.20 2016/03/06 01:13:18 schorsch Exp $"; #endif /* * Wrap BSDF data in valid WINDOW XML file @@ -7,6 +7,7 @@ static const char RCSid[] = "$Id: wrapBSDF.c,v 2.17 20 * G. Ward February 2015 */ +#include "platform.h" #include #include "rtio.h" #include "paths.h" @@ -82,6 +83,8 @@ struct s_dfile { int ndataf = 0; /* number of data files */ +int unlink_datafiles = 0; /* unlink data files when done */ + const char *spectr_file[MAXFILES]; /* custom spectral curve input */ const char top_level_name[] = "WindowElement"; @@ -163,7 +166,8 @@ input2str(const char *inpspec) fprintf(stderr, "%s: cannot open\n", inpspec); return ""; } -#ifndef _WIN32 /* XXX somehow broken on Windows */ +#if !defined(_WIN32) && !defined(_WIN64) + /* XXX somehow broken on Windows */ len = lseek(fd, 0L, SEEK_END); if (len > 0) { lseek(fd, 0L, SEEK_SET); @@ -604,7 +608,18 @@ writeBSDF(const char *caller, ezxml_t fl) fputs(xml+ei, stdout); /* write trailer */ free(xml); /* free string */ fputc('\n', stdout); - return (fflush(stdout) == 0); + if (fflush(stdout) != 0) + return 0; + /* unlink data files if req. */ + for (i = ndataf*(unlink_datafiles != 0); i--; ) + if (data_file[i].fname != stdin_name && + data_file[i].fname[0] != '!') + unlink(data_file[i].fname); + if (unlink_datafiles > 1 && mgf_geometry != NULL && + mgf_geometry != stdin_name && + mgf_geometry[0] != '!') + unlink(mgf_geometry); + return 1; } /* Insert BSDF data into XML wrapper */ @@ -767,6 +782,9 @@ main(int argc, char *argv[]) return 1; } attr_unit = argv[i]; + continue; + case 'U': /* unlink data files when done */ + unlink_datafiles = 1 + (argv[i][2] == 'U'); continue; case 'a': /* angle basis */ if (++i >= argc)