From 3f5c83bc26e98dd41e93fc9023a610cd0ec1d363 Mon Sep 17 00:00:00 2001 From: Samo Penic <samo.penic@fe.uni-lj.si> Date: Tue, 11 Mar 2014 08:52:58 +0000 Subject: [PATCH] Fixed bugs when dump file is missing. Prepared flags for setting filenames --- src/main.c | 4 ++ src/io.c | 83 ++++++++++++++++++++++++++++------------- src/io.h | 5 ++ 3 files changed, 64 insertions(+), 28 deletions(-) diff --git a/src/io.c b/src/io.c index d4a9cc4..db4e64f 100644 --- a/src/io.c +++ b/src/io.c @@ -142,6 +142,20 @@ ts_vesicle *restore_state(ts_uint *iteration){ ts_uint i,j,k; FILE *fh=fopen("dump.bin","rb"); + + struct stat sb; + if (stat("dump.bin", &sb) == -1) { + //dump file does not exist. + return NULL; + } + + //check if it is regular file + if((sb.st_mode & S_IFMT) != S_IFREG) { + //dump file is not a regular file. + ts_fprintf(stderr,"Dump file is not a regular file!\n"); + return NULL; + } + ts_uint retval; ts_uint idx; @@ -326,9 +340,14 @@ ts_bool parse_args(int argc, char **argv){ - int c, retval; - DIR *dir; - path[0]=0; + int c, retval; + struct stat sb; + sprintf(command_line_args.path, "./"); //clear string; + sprintf(command_line_args.output_fullfilename,"./output.pvd"); + sprintf(command_line_args.dump_fullfilename,"./dump.bin"); + sprintf(command_line_args.tape_fullfilename,"./tape"); + FILE *file; + while (1) { static struct option long_options[] = @@ -338,13 +357,13 @@ {"tape", no_argument, 0, 't'}, {"output-file", required_argument, 0, 'o'}, {"directory", required_argument, 0, 'd'}, - {"dump-file", required_argument,0, 'f'}, + {"dump-filename", required_argument,0, 'f'}, {0, 0, 0, 0} }; /* getopt_long stores the option index here. */ int option_index = 0; - c = getopt_long (argc, argv, "d:fot", + c = getopt_long (argc, argv, "d:f:o:t:", long_options, &option_index); /* Detect the end of the options. */ @@ -365,46 +384,56 @@ case 't': //check if tape exists. If not, fail immediately. - puts ("option -t\n"); + if (stat(optarg, &sb) == -1) { + ts_fprintf(stderr,"Tape '%s' does not exist!\n",optarg); + fatal("Please select correct tape",1); + } else { + strcpy(command_line_args.tape_fullfilename,optarg); + } break; case 'o': //set filename of master output file - printf ("option -o with value `%s'\n", optarg); - break; + if ((file = fopen(optarg, "w")) == NULL) { + fprintf(stderr,"Could not create output file!\n"); + fatal("Please specify correct output file",1); + + } else { + fclose(file); + } + strcpy(command_line_args.output_fullfilename, optarg); + break; case 'd': //check if directory exists. If not create one. If creation is //successful, set directory for output files. //printf ("option -d with value `%s'\n", optarg); - dir = opendir(optarg); - if (dir) - { - /* Directory exists. */ - closedir(dir); - } - else if (ENOENT == errno) - { - /* Directory does not exist. */ + if (stat(optarg, &sb) == -1) { + //directory does not exist retval=mkdir(optarg, 0700); if(retval){ - fatal("Could not create requested directory. Check if you have permissions",1); + fatal("Could not create requested directory. Check if you have permissions",1); } } - else - { - /* opendir() failed for some other reason. */ - fatal("Could not check if directory exists. Reason unknown",1); + //check if is a proper directory + else if((sb.st_mode & S_IFMT) != S_IFDIR) { + //it is not a directory. fatal error. + ts_fprintf(stderr,"%s is not a directory!\n",optarg); + fatal("Cannot continue",1); } - ts_fprintf(stdout,"\n*** Using output directory: %s\n\n", optarg); -// sprintf(path,"%s", optarg); - strcpy(path, optarg); - // ts_fprintf(stdout,"ok!\n"); - + strcpy(command_line_args.path, optarg); break; case 'f': //check if dump file specified exists. Defaults to dump.bin + if ((file = fopen(optarg, "w")) == NULL) { + fprintf(stderr,"Could not create dump file!\n"); + fatal("Please specify correct dump file",1); + + } else { + fclose(file); + } + strcpy(command_line_args.dump_fullfilename, optarg); break; case '?': diff --git a/src/io.h b/src/io.h index c8dfd17..eb0b737 100644 --- a/src/io.h +++ b/src/io.h @@ -6,7 +6,6 @@ static char prefixname[1024]; static ts_bool restore=0; static char tape[1024]; */ -char path[1024]; int force_from_tape; @@ -36,6 +35,10 @@ typedef struct{ ts_int force_from_tape; ts_int reset_iteration_count; + char path[1024]; //path where all files should be added + char output_fullfilename[1024]; //name of the master file + char dump_fullfilename[1024]; //name of the dump file + char tape_fullfilename[1024]; //name of the tape file } ts_args; ts_args command_line_args; diff --git a/src/main.c b/src/main.c index 54f8aff..1b97f10 100644 --- a/src/main.c +++ b/src/main.c @@ -38,6 +38,10 @@ ts_fprintf(stdout,"**********************************************************************\n\n"); tape=parsetape("tape"); vesicle=restore_state(&start_iteration); + if(vesicle==NULL){ + ts_fprintf(stderr, "Dump file does not exist or is not a regular file! Did you mean to invoke trisurf with --force-from-tape option?\n\n"); + return 1; + } // nove vrednosti iz tapea... vesicle->bending_rigidity=tape->xk0; vtx_set_global_values(vesicle); -- Gitblit v1.9.3