1
0
mirror of https://github.com/TREX-CoE/trexio.git synced 2024-07-23 03:07:45 +02:00

use size_max values provided by the read_size functions

This commit is contained in:
q-posev 2021-12-03 11:48:51 +01:00
parent 5d3faddaae
commit c520175cbe
2 changed files with 16 additions and 12 deletions

View File

@ -2445,6 +2445,8 @@ trexio_read_$group_sparse_dset$(trexio_t* const file,
/* Read the max number of integrals stored in the file */
rc = trexio_read_$group_sparse_dset$_size(file, &size_max);
if (rc != TREXIO_SUCCESS) return rc;
/* Cannot read more data points than there is already in the file */
if (buffer_size > size_max) return TREXIO_INVALID_ARG_3;
switch (file->back_end) {
@ -2524,13 +2526,9 @@ trexio_write_$group_sparse_dset$(trexio_t* const file,
trexio_exit_code rc;
/* Read the max number of integrals stored in the file */
rc = trexio_has_$group_sparse_dset$(file);
if (rc == TREXIO_SUCCESS) {
rc = trexio_read_$group_sparse_dset$_size(file, &size_max);
if (rc != TREXIO_SUCCESS) return rc;
} else {
size_max = 0L;
}
if (rc != TREXIO_SUCCESS && rc != TREXIO_DSET_MISSING) return rc;
if (rc == TREXIO_DSET_MISSING) size_max = 0L;
switch (file->back_end) {

View File

@ -1037,14 +1037,20 @@ trexio_exit_code trexio_text_write_$group_sparse_dset$(trexio_t* const file,
FILE* f = fopen(file_full_path, "a");
if(f == NULL) return TREXIO_FILE_ERROR;
/* Get the starting position of the IO stream to be written in the .size file */
int64_t io_start_pos = (int64_t) ftell(f);
/* Specify the line length in order to offset properly. For example, for 4-index quantities
the line_length is 69 because 10 per index + 4 spaces + 24 for floating point value + 1 for the new line char.
CURRENTLY NO OFFSET IS USED WHEN WRITING !
,*/
const uint64_t line_length = $group_sparse_dset_line_length$L;
*/
const int64_t line_length = $group_sparse_dset_line_length$L;
/* Get the starting position of the IO stream to be written in the .size file.
This is error-prone due to the fact that for large files (>2 GB) in 32-bit systems ftell will fail.
One can use ftello function which is adapted for large files.
For now, we can use front-end-provided size_max, which has been checked for INT64_MAX overflow.
*/
//int64_t io_start_pos = (int64_t) ftell(f);
int64_t io_start_pos = size_max * line_length;
//fseek(f, (long) offset_file * line_length, SEEK_SET);
/* Write the data in the file and check the return code of fprintf to verify that > 0 bytes have been written */