From 181fe988f360cea9e1bbbc6665eeb4ccc49f8b95 Mon Sep 17 00:00:00 2001 From: Anthony Scemama Date: Thu, 6 May 2021 19:40:27 +0200 Subject: [PATCH] Fixed append problem --- src/Makefile.in | 8 ++- src/templates_text/templator_text.org | 98 ++++++--------------------- 2 files changed, 28 insertions(+), 78 deletions(-) diff --git a/src/Makefile.in b/src/Makefile.in index 6721edc..4ad5e53 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -65,11 +65,11 @@ ifeq ($(FC),flang) endif OBJECT_FILES= trexio.o trexio_text.o trexio_hdf5.o -SOURCE_FILES= test.c trexio.c trexio_hdf5.c trexio_text.c +SOURCE_FILES= trexio.c trexio_hdf5.c trexio_text.c HEADER_FILES= $(trexio_h) trexio_text.h trexio_hdf5.h trexio_s.h -.PHONY: all fortran clean maintainer-clean install +.PHONY: all fortran clean maintainer-clean install sources FORCE .POSIX: .SUFFIXES: @@ -137,3 +137,7 @@ Makefile: Makefile.in ../config.status ../config.status: ../configure cd .. && ./config.status --recheck +sources: FORCE + cd ../tools && ./build_trexio.sh + +FORCE: diff --git a/src/templates_text/templator_text.org b/src/templates_text/templator_text.org index be3be35..f3a3b0d 100644 --- a/src/templates_text/templator_text.org +++ b/src/templates_text/templator_text.org @@ -79,11 +79,11 @@ #+begin_src c :tangle struct_text_group_dset.h typedef struct $group$_s { uint64_t $group_num$; - FILE* file; $group_dset_dtype$* $group_dset$; uint32_t rank_$group_dset$; uint32_t to_flush; uint64_t dims_$group_dset$[16]; + char file_name[TREXIO_MAX_FILENAME_LENGTH]; } $group$_t; #+end_src @@ -95,8 +95,8 @@ typedef struct rdm_s { uint32_t to_flush; uint32_t padding; double* one_e; - FILE* file; - char* two_e_file_name; + char file_name[TREXIO_MAX_FILENAME_LENGTH]; + char two_e_file_name[TREXIO_MAX_FILENAME_LENGTH]; } rdm_t; #+end_src @@ -143,7 +143,7 @@ trexio_text_init (trexio_t* const file) /* Create the lock file in the directory */ const char* lock_file_name = "/.lock"; - char* file_name = CALLOC(TREXIO_MAX_FILENAME_LENGTH, char); + char file_name[TREXIO_MAX_FILENAME_LENGTH]; if (file_name == NULL) { return TREXIO_ALLOCATION_FAILED; @@ -153,12 +153,10 @@ trexio_text_init (trexio_t* const file) strncat (file_name, lock_file_name, TREXIO_MAX_FILENAME_LENGTH-strlen(lock_file_name)); if (file_name[TREXIO_MAX_FILENAME_LENGTH-1] != '\0') { - FREE(file_name); - return TREXIO_ALLOCATION_FAILED; + return TREXIO_LOCK_ERROR; } f->lock_file = open(file_name,O_WRONLY|O_CREAT|O_TRUNC, 0644); - FREE(file_name); if (f->lock_file <= 0) { return TREXIO_FAILURE; @@ -274,25 +272,23 @@ trexio_text_read_$group$ (trexio_text_t* const file) /* Build the file name */ const char* $group$_file_name = "/$group$.txt"; - char * file_name = CALLOC(TREXIO_MAX_FILENAME_LENGTH, char); - if (file_name == NULL) { + if ($group$->file_name == NULL) { FREE($group$); return NULL; } - strncpy (file_name, file->parent.file_name, TREXIO_MAX_FILENAME_LENGTH); - strncat (file_name, $group$_file_name, + strncpy ($group$->file_name, file->parent.file_name, TREXIO_MAX_FILENAME_LENGTH); + strncat ($group$->file_name, $group$_file_name, TREXIO_MAX_FILENAME_LENGTH-strlen($group$_file_name)); - if (file_name[TREXIO_MAX_FILENAME_LENGTH-1] != '\0') { - FREE(file_name); + if ($group$->file_name[TREXIO_MAX_FILENAME_LENGTH-1] != '\0') { FREE($group$); return NULL; } /* If the file exists, read it */ - FILE* f = fopen(file_name,"r"); + FILE* f = fopen($group$->file_name,"r"); if (f != NULL) { /* Find size of file to allocate the max size of the string buffer */ @@ -303,7 +299,6 @@ trexio_text_read_$group$ (trexio_text_t* const file) sz = (sz < 1024) ? (1024) : (sz); char* buffer = CALLOC(sz, char); if (buffer == NULL) { - FREE(file_name); fclose(f); FREE($group$); return NULL; @@ -315,7 +310,6 @@ trexio_text_read_$group$ (trexio_text_t* const file) rc = fscanf(f, "%1023s", buffer); if ((rc != 1) || (strcmp(buffer, "rank_$group_dset$") != 0)) { FREE(buffer); - FREE(file_name); fclose(f); FREE($group$); return NULL; @@ -324,7 +318,6 @@ trexio_text_read_$group$ (trexio_text_t* const file) rc = fscanf(f, "%u", &($group$->rank_$group_dset$)); if (rc != 1) { FREE(buffer); - FREE(file_name); fclose(f); FREE($group$); return NULL; @@ -341,7 +334,6 @@ trexio_text_read_$group$ (trexio_text_t* const file) rc = fscanf(f, "%1023s %u", buffer, &j); if ((rc != 2) || (strcmp(buffer, "dims_$group_dset$") != 0) || (j!=i)) { FREE(buffer); - FREE(file_name); fclose(f); FREE($group$); return NULL; @@ -351,7 +343,6 @@ trexio_text_read_$group$ (trexio_text_t* const file) assert(!(rc != 1)); if (rc != 1) { FREE(buffer); - FREE(file_name); fclose(f); FREE($group$); return NULL; @@ -367,7 +358,6 @@ trexio_text_read_$group$ (trexio_text_t* const file) assert(!((rc != 1) || (strcmp(buffer, "$group_num$") != 0))); if ((rc != 1) || (strcmp(buffer, "$group_num$") != 0)) { FREE(buffer); - FREE(file_name); fclose(f); FREE($group$); return NULL; @@ -377,7 +367,6 @@ trexio_text_read_$group$ (trexio_text_t* const file) assert(!(rc != 1)); if (rc != 1) { FREE(buffer); - FREE(file_name); fclose(f); FREE($group$); return NULL; @@ -390,7 +379,6 @@ trexio_text_read_$group$ (trexio_text_t* const file) assert (!($group$->$group_dset$ == NULL)); if ($group$->$group_dset$ == NULL) { FREE(buffer); - FREE(file_name); fclose(f); FREE($group$); return NULL; @@ -400,7 +388,6 @@ trexio_text_read_$group$ (trexio_text_t* const file) assert(!((rc != 1) || (strcmp(buffer, "$group_dset$") != 0))); if ((rc != 1) || (strcmp(buffer, "$group_dset$") != 0)) { FREE(buffer); - FREE(file_name); fclose(f); FREE($group$->$group_dset$); FREE($group$); @@ -412,7 +399,6 @@ trexio_text_read_$group$ (trexio_text_t* const file) assert(!(rc != 1)); if (rc != 1) { FREE(buffer); - FREE(file_name); fclose(f); FREE($group$->$group_dset$); FREE($group$); @@ -426,20 +412,6 @@ trexio_text_read_$group$ (trexio_text_t* const file) f = NULL; } - if (file->parent.mode == 'w') { - $group$->file = fopen(file_name,"a"); - } else { - $group$->file = fopen(file_name,"r"); - } - FREE(file_name); - assert (!($group$->file == NULL)); - if ($group$->file == NULL) { - FREE($group$->$group_dset$); - FREE($group$); - return NULL; - } - - fseek($group$->file, 0L, SEEK_SET); file->$group$ = $group$; return $group$; @@ -467,9 +439,10 @@ trexio_text_flush_$group$ (trexio_text_t* const file) if ($group$->to_flush == 0) return TREXIO_SUCCESS; - FILE* f = $group$->file; + assert (file->parent.mode == 'w'); + + FILE* f = fopen($group$->file_name, "w"); if (f == NULL) return TREXIO_INVALID_ARG_1; - fseek(f, 0L, SEEK_SET); /* Write the dimensioning variables */ // START REPEAT GROUP_DSET @@ -498,7 +471,7 @@ trexio_text_flush_$group$ (trexio_text_t* const file) } // END REPEAT GROUP_DSET - fflush(f); + fclose(f); $group$->to_flush = 0; return TREXIO_SUCCESS; @@ -528,11 +501,6 @@ trexio_text_free_$group$ (trexio_text_t* const file) $group$_t* $group$ = file->$group$; if ($group$ == NULL) return TREXIO_SUCCESS; - if ($group$->file != NULL) { - fclose($group$->file); - $group$->file = NULL; - } - // START REPEAT GROUP_DSET if ($group$->$group_dset$ != NULL) { FREE ($group$->$group_dset$); @@ -722,27 +690,23 @@ rdm_t* trexio_text_read_rdm(trexio_text_t* const file) { assert (rdm != NULL); rdm->one_e = NULL; - rdm->two_e_file_name = NULL; - rdm->file = NULL; + rdm->two_e_file_name[0] = '\0'; rdm->to_flush = 0; /* Try to open the file. If the file does not exist, return */ const char* rdm_file_name = "/rdm.txt"; - char* file_name = CALLOC(TREXIO_MAX_FILENAME_LENGTH, char); - assert (file_name != NULL); - strncpy (file_name, file->parent.file_name, TREXIO_MAX_FILENAME_LENGTH); + strncpy (rdm->file_name, file->parent.file_name, TREXIO_MAX_FILENAME_LENGTH); - strncat (file_name, rdm_file_name, + strncat (rdm->file_name, rdm_file_name, TREXIO_MAX_FILENAME_LENGTH-strlen(rdm_file_name)); - if (file_name[TREXIO_MAX_FILENAME_LENGTH-1] != '\0') { - FREE(file_name); + if (rdm->file_name[TREXIO_MAX_FILENAME_LENGTH-1] != '\0') { FREE(rdm); return NULL; } /* If the file exists, read it */ - FILE* f = fopen(file_name,"r"); + FILE* f = fopen(rdm->file_name,"r"); if (f != NULL) { /* Find size of file to allocate the max size of the string buffer */ @@ -782,13 +746,10 @@ rdm_t* trexio_text_read_rdm(trexio_text_t* const file) { rc = fscanf(f, "%1023s", buffer); assert (rc == 1); - rdm->two_e_file_name = CALLOC(TREXIO_MAX_FILENAME_LENGTH,char); strncpy(rdm->two_e_file_name, buffer, 1024); if (rdm->two_e_file_name[TREXIO_MAX_FILENAME_LENGTH-1] != '\0') { - FREE(file_name); FREE(buffer); FREE(rdm->one_e); - FREE(rdm->two_e_file_name); FREE(rdm); fclose(f); return NULL; @@ -798,12 +759,6 @@ rdm_t* trexio_text_read_rdm(trexio_text_t* const file) { fclose(f); f = NULL; } - if (file->parent.mode == 'w') { - rdm->file = fopen(file_name,"a"); - } else { - rdm->file = fopen(file_name,"r"); - } - FREE(file_name); file->rdm = rdm ; return rdm; } @@ -826,9 +781,9 @@ trexio_exit_code trexio_text_flush_rdm(trexio_text_t* const file) { if (rdm->to_flush == 0) return TREXIO_SUCCESS; - FILE* f = rdm->file; + + FILE* f = fopen(rdm->file_name,"w"); assert (f != NULL); - fseek(f, 0L, SEEK_SET); /* Write the dimensioning variables */ fprintf(f, "num %" PRIu64 "\n", rdm->dim_one_e); @@ -842,7 +797,7 @@ trexio_exit_code trexio_text_flush_rdm(trexio_text_t* const file) { fprintf(f, "two_e_file_name\n"); fprintf(f, "%s\n", rdm->two_e_file_name); - fflush(f); + fclose(f); rdm->to_flush = 0; return TREXIO_SUCCESS; } @@ -868,19 +823,10 @@ trexio_exit_code trexio_text_free_rdm(trexio_text_t* const file) { rdm_t* const rdm = file->rdm; if (rdm == NULL) return TREXIO_SUCCESS; - if (rdm->file != NULL) { - fclose(rdm->file); - rdm->file = NULL; - } - if (rdm->one_e != NULL) { FREE (rdm->one_e); } - if (rdm->two_e_file_name != NULL) { - FREE (rdm->two_e_file_name); - } - free (rdm); file->rdm = NULL; return TREXIO_SUCCESS;