16 #include "sion_debug.h" 18 #include "sion_internal.h" 19 #include "sion_file.h" 20 #include "sion_filedesc.h" 23 #define DFUNCTION "_sion_write_header" 32 int rc = SION_SUCCESS;
37 sion_uint32 endianness_writeval;
38 sion_int32 sion_version, sion_version_patchlevel, sion_fileformat_version;
41 DPRINTFP((2, DFUNCTION, -1,
"enter write\n"));
42 DPRINTFP((16, DFUNCTION, sion_filedesc->
rank,
" fileptr is at position %14lld\n", _sion_file_get_position(sion_filedesc->
fileptr)));
45 nwrite = _sion_file_write(sionstr, strlen(sionstr), sion_filedesc->
fileptr);
46 if (nwrite != strlen(sionstr)) {
47 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(SIONID) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
49 DPRINTFP((32, DFUNCTION, -1,
" wrote sionstr nwrite=%lu\n", (
unsigned long) nwrite));
52 endianness_writeval = sion_filedesc->
endianness;
53 nwrite = _sion_file_write(&endianness_writeval,
sizeof(endianness_writeval), sion_filedesc->
fileptr);
54 if (nwrite !=
sizeof(endianness_writeval)) {
55 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(endianness) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
57 DPRINTFP((32, DFUNCTION, -1,
" wrote endianness 0x%x nwrite=%lu\n", endianness_writeval, (
unsigned long) nwrite));
60 sion_version = 1000 * SION_MAIN_VERSION + SION_SUB_VERSION;
61 sion_version_patchlevel = SION_VERSION_PATCHLEVEL;
62 sion_fileformat_version = SION_FILEFORMAT_VERSION;
64 nwrite = _sion_file_write(&sion_version,
sizeof(sion_version), sion_filedesc->
fileptr);
65 if (nwrite !=
sizeof(sion_version)) {
66 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(sion_version) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
68 DPRINTFP((32, DFUNCTION, -1,
" wrote sion_version %ld nwrite=%lu\n", sion_version, (
unsigned long) nwrite));
70 nwrite = _sion_file_write(&sion_version_patchlevel,
sizeof(sion_version_patchlevel), sion_filedesc->
fileptr);
71 if (nwrite !=
sizeof(sion_version_patchlevel)) {
72 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(sion_version_patchlevel) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
74 DPRINTFP((32, DFUNCTION, -1,
" wrote sion_version_patchlevel %ld nwrite=%lu\n", sion_version_patchlevel, (
unsigned long) nwrite));
76 nwrite = _sion_file_write(&sion_fileformat_version,
sizeof(sion_fileformat_version), sion_filedesc->
fileptr);
77 if (nwrite !=
sizeof(sion_fileformat_version)) {
78 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(sion_fileformat_version) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
80 DPRINTFP((32, DFUNCTION, -1,
" wrote sion_fileformat_version %ld nwrite=%lu\n", sion_fileformat_version, (
unsigned long) nwrite));
84 if (nwrite !=
sizeof(sion_filedesc->
fsblksize)) {
85 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(fsblksize) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
87 DPRINTFP((32, DFUNCTION, -1,
" wrote fsblksize %ld nwrite=%lu\n", sion_filedesc->
fsblksize, (
unsigned long) nwrite));
90 nwrite = _sion_file_write(&sion_filedesc->
ntasks,
sizeof(sion_filedesc->
ntasks), sion_filedesc->
fileptr);
91 if (nwrite !=
sizeof(sion_filedesc->
ntasks)) {
92 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(ntasks) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
94 DPRINTFP((32, DFUNCTION, -1,
" wrote ntasks %ld nwrite=%lu\n", sion_filedesc->
ntasks, (
unsigned long) nwrite));
97 nwrite = _sion_file_write(&sion_filedesc->
nfiles,
sizeof(sion_filedesc->
nfiles), sion_filedesc->
fileptr);
98 if (nwrite !=
sizeof(sion_filedesc->
nfiles)) {
99 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(nfiles) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
101 DPRINTFP((32, DFUNCTION, -1,
" wrote nfiles %d nwrite=%lu\n", sion_filedesc->
nfiles, (
unsigned long) nwrite));
105 if (nwrite !=
sizeof(sion_filedesc->
filenumber)) {
106 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(filenumber) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
108 DPRINTFP((32, DFUNCTION, -1,
" wrote filenumber %d nwrite=%lu\n", sion_filedesc->
filenumber, (
unsigned long) nwrite));
112 nwrite = _sion_file_write(&sion_filedesc->
flag1,
sizeof(sion_filedesc->
flag1), sion_filedesc->
fileptr);
113 if (nwrite !=
sizeof(sion_filedesc->
flag1)) {
114 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(flag1) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
116 DPRINTFP((32, DFUNCTION, -1,
" wrote flag1 %lld nwrite=%lu\n", sion_filedesc->
flag1, (
unsigned long) nwrite));
119 nwrite = _sion_file_write(&sion_filedesc->
flag2,
sizeof(sion_filedesc->
flag2), sion_filedesc->
fileptr);
120 if (nwrite !=
sizeof(sion_filedesc->
flag2)) {
121 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(flag2) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
123 DPRINTFP((32, DFUNCTION, -1,
" wrote flag2 %d nwrite=%lu\n", sion_filedesc->
flag2, (
unsigned long) nwrite));
126 if (sion_filedesc->
prefix==NULL) {
127 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(prefix) to file, data not available, aborting ...\n"));
129 lprefix = calloc(SION_FILENAME_LENGTH,1);
130 if (lprefix == NULL) {
131 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot allocate temporary memory of size %lu (lprefix), aborting ...\n", (
unsigned long) SION_FILENAME_LENGTH));
133 strncpy(lprefix,sion_filedesc->
prefix,SION_FILENAME_LENGTH);
134 nwrite = _sion_file_write(lprefix, SION_FILENAME_LENGTH, sion_filedesc->
fileptr);
135 if (nwrite != SION_FILENAME_LENGTH) {
136 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(lprefix) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
138 free(lprefix); lprefix=NULL;
139 DPRINTFP((32, DFUNCTION, -1,
" wrote prefix =%s\n", sion_filedesc->
prefix));
143 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(globalranks) to file, data not available, aborting ...\n"));
146 if (nwrite !=
sizeof(sion_int64) * sion_filedesc->
ntasks) {
147 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(globalranks) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
149 DPRINTFP((32, DFUNCTION, -1,
" wrote globalranks nwrite=%lu\n", (
unsigned long) nwrite));
153 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(chunksizes) to file, data not available, aborting ...\n"));
156 if (nwrite !=
sizeof(sion_int64) * sion_filedesc->
ntasks) {
157 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(chunksizes) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
159 DPRINTFP((32, DFUNCTION, -1,
" wrote chunksizes nwrite=%lu\n", (
unsigned long) nwrite));
161 _sion_file_flush(sion_filedesc->
fileptr);
162 DPRINTFP((2, DFUNCTION, -1,
"leave write\n"));
168 #define DFUNCTION "_sion_write_header_var_info" 177 int rc = SION_SUCCESS;
180 DPRINTFP((2, DFUNCTION, -1,
"enter write\n"));
182 _sion_file_flush(sion_filedesc->
fileptr);
184 DPRINTFP((16, DFUNCTION, sion_filedesc->
rank,
" after set fp to end_of_header, fileptr is at position %14lld\n", _sion_file_get_position(sion_filedesc->
fileptr)));
189 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(maxusedchunks) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
191 DPRINTFP((32, DFUNCTION, -1,
" wrote maxusedchunks %d nwrite=%lu\n", sion_filedesc->
maxusedchunks, (
unsigned long) nwrite));
196 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(start_of_varheader) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
198 DPRINTFP((32, DFUNCTION, -1,
" wrote start_of_varheader %d nwrite=%lu\n", sion_filedesc->
start_of_varheader, (
unsigned long) nwrite));
200 _sion_file_flush(sion_filedesc->
fileptr);
201 DPRINTFP((2, DFUNCTION, -1,
"leave write\n"));
207 #define DFUNCTION "_sion_write_header_var_part_blocksizes" 216 int rc = SION_SUCCESS;
219 DPRINTFP((2, DFUNCTION, -1,
"enter write\n"));
221 _sion_file_flush(sion_filedesc->
fileptr);
223 DPRINTFP((16, DFUNCTION, sion_filedesc->
rank,
" after set fp to start_of_varheader, fileptr is at position %14lld\n", _sion_file_get_position(sion_filedesc->
fileptr)));
227 if (nwrite !=
sizeof(sion_int64) * sion_filedesc->
ntasks) {
228 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(all_blockcount) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
230 DPRINTFP((32, DFUNCTION, -1,
" wrote all_blockcount field %d elements nwrite=%lu\n", sion_filedesc->
ntasks, (
unsigned long) nwrite));
235 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(all_blocksizes) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
237 DPRINTFP((32, DFUNCTION, -1,
" wrote all_blocksizes field %d elements nwrite=%lu\n", sion_filedesc->
ntasks * sion_filedesc->
maxusedchunks, (
unsigned long) nwrite));
239 _sion_file_flush(sion_filedesc->
fileptr);
240 DPRINTFP((2, DFUNCTION, -1,
"leave write\n"));
246 #define DFUNCTION "_sion_write_header_var_part_mapping" 256 sion_int32 mapping_size,
257 sion_int32 *mapping )
259 int rc = SION_SUCCESS, lrank;
263 DPRINTFP((2, DFUNCTION, -1,
"enter write\n"));
266 + sion_filedesc->
ntasks *
sizeof(sion_int64)
269 _sion_file_flush(sion_filedesc->
fileptr);
270 _sion_file_set_position(sion_filedesc->
fileptr, position);
271 DPRINTFP((16, DFUNCTION, sion_filedesc->
rank,
" after set fp to start_of_varheader, fileptr is at position %14lld\n", _sion_file_get_position(sion_filedesc->
fileptr)));
274 nwrite = _sion_file_write(&mapping_size,
sizeof(sion_int32), sion_filedesc->
fileptr);
275 if (nwrite !=
sizeof(sion_int32)) {
276 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(mapping_size) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
278 DPRINTFP((32, DFUNCTION, -1,
" wrote mapping_size=%d elements nwrite=%lu\n", mapping_size, (
unsigned long) nwrite));
282 nwrite = _sion_file_write(mapping,
sizeof(sion_int32) * 2 * mapping_size, sion_filedesc->
fileptr);
283 if (nwrite !=
sizeof(sion_int32) * 2 * mapping_size) {
284 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot write header(mapping) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
286 DPRINTFP((32, DFUNCTION, -1,
" wrote mapping field %d elements nwrite=%lu\n", 2 * mapping_size, (
unsigned long) nwrite*2*mapping_size));
287 for (lrank = 0; lrank < mapping_size; lrank++) {
288 DPRINTFP((2048, DFUNCTION, - 1,
" mapping[%4d]=(%10ld,%10ld)\n", lrank,mapping[lrank*2],mapping[lrank*2+1]));
291 DPRINTFP((32, DFUNCTION, -1,
" wrote no mapping field\n"));
293 _sion_file_flush(sion_filedesc->
fileptr);
294 DPRINTFP((2, DFUNCTION, -1,
"leave write\n"));
301 #define DFUNCTION "_sion_read_header_fix_part" 310 int rc = SION_SUCCESS;
312 char *sionstr, *lprefix;
313 sion_uint32 lendianness;
314 sion_int32 lfsblksize;
315 sion_int32 Rsion_version, Rsion_version_patchlevel, Rsion_fileformat_version;
317 DPRINTFP((2, DFUNCTION, -1,
"enter read fix_part\n"));
318 DPRINTFP((16, DFUNCTION, sion_filedesc->
rank,
" fileptr is at position %14lld\n", _sion_file_get_position(sion_filedesc->
fileptr)));
321 sionstr = (
char *) malloc(strlen(
SION_ID) *
sizeof(char));
322 nread = _sion_file_read(sionstr, strlen(
SION_ID), sion_filedesc->
fileptr);
323 if (nread != strlen(
SION_ID)) {
324 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_fix_part: cannot read header(SION_ID) from file, aborting ... (%lu!=%lu)\n",
325 (
unsigned long) nread, (
unsigned long) strlen(
SION_ID)));
327 DPRINTFP((32, DFUNCTION, -1,
" sionstr =>%c%c%c%c<\n", sionstr[0], sionstr[1], sionstr[2], sionstr[3]));
330 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: not a sion file(ID: %c%c%c%c)\n", sionstr[0], sionstr[1], sionstr[2], sionstr[3]));
335 nread = _sion_file_read(&lendianness,
sizeof(lendianness), sion_filedesc->
fileptr);
336 if (nread !=
sizeof(lendianness)) {
337 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header: cannot read header(endianness) from file, aborting ... (%lu!=%lu)\n",(
unsigned long) nread, (
unsigned long)
sizeof(lendianness)));
342 DPRINTFP((32, DFUNCTION, -1,
" endianness =0x%x swapbytes=%d\n", sion_filedesc->
endianness, sion_filedesc->
swapbytes));
346 nread = _sion_file_read(&Rsion_version,
sizeof(Rsion_version), sion_filedesc->
fileptr);
347 if (nread !=
sizeof(Rsion_version)) {
348 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_fix_part: cannot read header(sion_version) from file, aborting ... (%lu!=%lu)\n", (
unsigned long) nread, (
unsigned long)
sizeof(Rsion_version)));
350 sion_swap(&Rsion_version, &Rsion_version,
sizeof(Rsion_version), 1, sion_filedesc->
swapbytes);
352 DPRINTFP((32, DFUNCTION, -1,
" sion_version=%d\n", Rsion_version));
354 nread = _sion_file_read(&Rsion_version_patchlevel,
sizeof(Rsion_version_patchlevel), sion_filedesc->
fileptr);
355 if (nread !=
sizeof(Rsion_version_patchlevel)) {
356 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_fix_part: cannot read header(sion_version_patchlevel) from file, aborting ... (%lu!=%lu)\n",
357 (
unsigned long) nread, (
unsigned long)
sizeof(Rsion_version_patchlevel)));
359 sion_swap(&Rsion_version_patchlevel, &Rsion_version_patchlevel,
sizeof(Rsion_version_patchlevel), 1, sion_filedesc->
swapbytes);
361 DPRINTFP((32, DFUNCTION, -1,
" sion_version_patchlevel=%d\n", (
int) Rsion_version_patchlevel));
363 nread = _sion_file_read(&Rsion_fileformat_version,
sizeof(Rsion_fileformat_version), sion_filedesc->
fileptr);
364 if (nread !=
sizeof(Rsion_fileformat_version)) {
365 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_fix_part: cannot read header(sion_fileformat_version) from file, aborting ... (%lu!=%lu)\n",
366 (
unsigned long) nread, (
unsigned long)
sizeof(Rsion_fileformat_version)));
368 sion_swap(&Rsion_fileformat_version, &Rsion_fileformat_version,
sizeof(Rsion_fileformat_version), 1, sion_filedesc->
swapbytes);
369 sion_filedesc->
fileversion=Rsion_fileformat_version;
370 DPRINTFP((32, DFUNCTION, -1,
" sion_fileformat_version=%d\n", (
int) Rsion_fileformat_version));
372 if (Rsion_fileformat_version != SION_FILEFORMAT_VERSION) {
373 if(Rsion_fileformat_version<2) {
374 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"sionlib: FATAL ERROR: file format version of file differs, aborting ... (%lu!=%lu)\n",
375 (
unsigned long) Rsion_fileformat_version, (
unsigned long) SION_FILEFORMAT_VERSION));
377 _sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_WARN,
"sionlib: FATAL WARNING: old file format version of file differs, trying to read ... (%lu!=%lu)\n",
378 (
unsigned long) Rsion_fileformat_version, (
unsigned long) SION_FILEFORMAT_VERSION);
383 nread = _sion_file_read(&sion_filedesc->
fsblksize,
sizeof(lfsblksize), sion_filedesc->
fileptr);
385 if (nread !=
sizeof(sion_filedesc->
fsblksize)) {
386 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_fix_part: cannot read header(fsblksize) from file, aborting ... (%lu!=%lu)\n",
387 (
unsigned long) nread, (
unsigned long)
sizeof(sion_filedesc->
fsblksize)));
390 DPRINTFP((32, DFUNCTION, -1,
" fsblksize=%d\n", sion_filedesc->
fsblksize));
393 nread = _sion_file_read(&sion_filedesc->
ntasks,
sizeof(sion_filedesc->
ntasks), sion_filedesc->
fileptr);
394 if (nread !=
sizeof(sion_filedesc->
ntasks)) {
395 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_fix_part: cannot read header(ntasks) from file, aborting ... (%lu!=%lu)\n",
396 (
unsigned long) nread, (
unsigned long)
sizeof(sion_filedesc->
ntasks)));
399 DPRINTFP((32, DFUNCTION, -1,
" ntasks =%d\n", sion_filedesc->
ntasks));
402 nread = _sion_file_read(&sion_filedesc->
nfiles,
sizeof(sion_filedesc->
nfiles), sion_filedesc->
fileptr);
403 if (nread !=
sizeof(sion_filedesc->
nfiles)) {
404 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_fix_part: cannot read header(nfiles) from file, aborting ... (%lu!=%lu)\n",
405 (
unsigned long) nread, (
unsigned long)
sizeof(sion_filedesc->
nfiles)));
408 DPRINTFP((32, DFUNCTION, -1,
" nfiles =%d\n", sion_filedesc->
nfiles));
413 if (nread !=
sizeof(sion_filedesc->
filenumber)) {
414 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_fix_part: cannot read header(filenumber) from file, aborting ... (%lu!=%lu)\n",
415 (
unsigned long) nread, (
unsigned long)
sizeof(sion_filedesc->
filenumber)));
421 DPRINTFP((32, DFUNCTION, -1,
" filenumber =%d\n", sion_filedesc->
filenumber));
425 if(Rsion_fileformat_version>=3) {
426 nread = _sion_file_read(&sion_filedesc->
flag1,
sizeof(sion_filedesc->
flag1), sion_filedesc->
fileptr);
427 if (nread !=
sizeof(sion_filedesc->
flag1)) {
428 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_fix_part: cannot read header(flag1) from file, aborting ... (%lu!=%lu)\n",
429 (
unsigned long) nread, (
unsigned long)
sizeof(sion_filedesc->
flag1)));
433 sion_filedesc->
flag1 = _SION_FLAG1_NONE;
435 DPRINTFP((32, DFUNCTION, -1,
" flag1 =%lld\n", sion_filedesc->
flag1));
437 if(Rsion_fileformat_version>=5) {
452 if(Rsion_fileformat_version>=3) {
453 nread = _sion_file_read(&sion_filedesc->
flag2,
sizeof(sion_filedesc->
flag2), sion_filedesc->
fileptr);
454 if (nread !=
sizeof(sion_filedesc->
flag2)) {
455 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_fix_part: cannot read header(flag2) from file, aborting ... (%lu!=%lu)\n",
456 (
unsigned long) nread, (
unsigned long)
sizeof(sion_filedesc->
flag2)));
460 sion_filedesc->
flag2 = _SION_FLAG2_NONE;
462 DPRINTFP((32, DFUNCTION, -1,
" flag2 =%lld\n", sion_filedesc->
flag2));
465 lprefix = malloc(SION_FILENAME_LENGTH);
466 nread = _sion_file_read(lprefix, SION_FILENAME_LENGTH, sion_filedesc->
fileptr);
467 if (nread != SION_FILENAME_LENGTH) {
468 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_fix_part: cannot read header(lprefix) from file, aborting ... (%lu!=%d)\n", (
unsigned long) nread, SION_FILENAME_LENGTH));
470 sion_filedesc->
prefix=strdup(lprefix);
472 DPRINTFP((32, DFUNCTION, -1,
" prefix =%s\n", sion_filedesc->
prefix));
475 DPRINTFTS(sion_filedesc->
rank,
"before purge");
476 _sion_file_purge(sion_filedesc->
fileptr);
477 DPRINTFTS(sion_filedesc->
rank,
"after purge");
481 DPRINTFP((2, DFUNCTION, -1,
"leave read fix_part\n"));
487 #define DFUNCTION "_sion_read_header_var_part" 496 int rc = SION_SUCCESS;
498 sion_int32 Rmaxchunks;
500 DPRINTFP((32, DFUNCTION, -1,
"enter read var_part\n"));
501 DPRINTFP((16, DFUNCTION, sion_filedesc->
rank,
" fileptr is at position %14lld\n", _sion_file_get_position(sion_filedesc->
fileptr)));
505 if (nread !=
sizeof(sion_int64) * sion_filedesc->
ntasks) {
506 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part: cannot read header(globalranks) from file, aborting ... (%d)\n", sion_filedesc->
ntasks));
512 if (nread !=
sizeof(sion_int64) * sion_filedesc->
ntasks) {
513 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part: cannot read header(chunksizes) from file, aborting ... (%d!=%lu)\n", sion_filedesc->
ntasks, (
unsigned long) nread));
518 nread = _sion_file_read(&Rmaxchunks,
sizeof(Rmaxchunks), sion_filedesc->
fileptr);
519 if (nread !=
sizeof(Rmaxchunks)) {
520 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part: cannot read header(maxchunks) from file, aborting ... (%lu!=%lu)\n",
521 (
unsigned long) nread, (
unsigned long)
sizeof(Rmaxchunks)));
524 DPRINTFP((32, DFUNCTION, -1,
" maxchunks=%d\n", Rmaxchunks));
527 if(Rmaxchunks>sion_filedesc->
maxchunks) _sion_realloc_filedesc_blocklist(sion_filedesc, Rmaxchunks);
532 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part: cannot read header(start_of_varheader) from file, aborting ... (%lu!=%lu)\n",
536 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part: bad value for start_of_varheader (=%lu), aborting ...\n",
541 DPRINTFP((32, DFUNCTION, -1,
"leave read var_part start_of_varheader=%lld\n", sion_filedesc->
start_of_varheader));
548 #define DFUNCTION "_sion_rd_hdr_var_prt_blkcnt_to_field" 561 int rc = SION_SUCCESS;
564 DPRINTFP((32, DFUNCTION, -1,
"enter\n"));
565 DPRINTFP((16, DFUNCTION, sion_filedesc->
rank,
" fileptr is at position %14lld\n", _sion_file_get_position(sion_filedesc->
fileptr)));
567 if (field_size < sion_filedesc->ntasks) {
568 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part_blockcount_to_field: cannot read header(blocksizes) field too small, aborting ... (%d<%d)\n", field_size, sion_filedesc->
ntasks));
571 _sion_file_purge(sion_filedesc->
fileptr);
574 nread = _sion_file_read(field,
sizeof(sion_int64) * sion_filedesc->
ntasks, sion_filedesc->
fileptr);
575 if (nread !=
sizeof(sion_int64) * sion_filedesc->
ntasks) {
576 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part_blockcount_to_field: cannot read blocksizes from meta block 2 of the file, aborting ... (%d,%d)\n", sion_filedesc->
ntasks, nread));
581 DPRINTFP((32, DFUNCTION, -1,
"leave \n"));
588 #define DFUNCTION "_sion_rd_hdr_vr_prt_nxtblksizes_to_field" 603 int rc = SION_SUCCESS;
605 DPRINTFP((32, DFUNCTION, -1,
"enter\n"));
606 DPRINTFP((16, DFUNCTION, sion_filedesc->
rank,
" fileptr is at position %14lld\n", _sion_file_get_position(sion_filedesc->
fileptr)));
608 if (field_size < sion_filedesc->ntasks) {
609 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part_nextblocksizes_to_field: cannot read header(blocksizes) field too small, aborting ... (%d<%d)\n", field_size, sion_filedesc->
ntasks));
611 nread = _sion_file_read(field,
sizeof(sion_int64) * sion_filedesc->
ntasks, sion_filedesc->
fileptr);
612 if (nread !=
sizeof(sion_int64) * sion_filedesc->
ntasks) {
613 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part_nextblocksizes_to_field: cannot read blocksizes from meta block 2 of the file, aborting ... (%d,%d)\n", sion_filedesc->
ntasks, nread));
618 DPRINTFP((32, DFUNCTION, -1,
"leave \n"));
625 #define DFUNCTION "_sion_read_header_var_part_blocksizes" 634 int rc = SION_SUCCESS;
638 DPRINTFP((32, DFUNCTION, -1,
"enter read\n"));
639 DPRINTFP((16, DFUNCTION, sion_filedesc->
rank,
" fileptr is at position %14lld\n", _sion_file_get_position(sion_filedesc->
fileptr)));
641 _sion_file_purge(sion_filedesc->
fileptr);
646 if (nread !=
sizeof(sion_int64) * sion_filedesc->
ntasks) {
647 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part_blocksizes: cannot read header from file(sion_blockcount), aborting ... (%d)\n", sion_filedesc->
ntasks));
650 for (i = 0; i < sion_filedesc->
ntasks; i++)
651 DPRINTFP((2048, DFUNCTION, -1,
" read, numblocks on task %02d is %10lld\n", i, sion_filedesc->
all_blockcount[i]));
656 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part_blocksizes: cannot read header(sion_blocksizes) from file, aborting ... (%lu!=%lu)\n",
657 (
unsigned long) sion_filedesc->
ntasks * sion_filedesc->
maxusedchunks, (
unsigned long) nread));
661 for (i = 0; i < sion_filedesc->
ntasks; i++)
662 DPRINTFP((2048, DFUNCTION, -1,
" read, blocksize[0] on task %02d is %10lld\n", i, sion_filedesc->
all_blocksizes[0*sion_filedesc->
ntasks+i]));
664 DPRINTFP((32, DFUNCTION, -1,
"leave read\n"));
671 #define DFUNCTION "_sion_read_header_var_part_mapping" 682 int rc = SION_SUCCESS;
686 DPRINTFP((32, DFUNCTION, -1,
"enter read\n"));
689 + sion_filedesc->
ntasks *
sizeof(sion_int64)
691 _sion_file_purge(sion_filedesc->
fileptr);
692 _sion_file_set_position(sion_filedesc->
fileptr, position);
694 DPRINTFP((16, DFUNCTION, sion_filedesc->
rank,
" fileptr is at position %14lld\n", _sion_file_get_position(sion_filedesc->
fileptr)));
699 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part_mapping: cannot read header(mapping_size) from file, aborting ... (%d)\n", nread));
702 DPRINTFP((32, DFUNCTION, -1,
"mapping_size=%ld\n", (
long) sion_filedesc->
mapping_size));
705 sion_filedesc->
mapping = (sion_int32 *) malloc(sion_filedesc->
mapping_size * 2 *
sizeof(sion_int32));
706 if (sion_filedesc->
mapping == NULL) {
707 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part_mapping: cannot allocate temporary memory of size %lu (mapping), aborting ...\n", (
unsigned long) 2 * sion_filedesc->
mapping_size *
sizeof(sion_int64)));
709 DPRINTFP((32, DFUNCTION, -1,
"alloc mapping vector size=%d (%lu bytes)\n", sion_filedesc->
mapping_size, (
long) sion_filedesc->
mapping_size * 2 *
sizeof(sion_int32)));
712 nread = _sion_file_read(sion_filedesc->
mapping,
sizeof(sion_int32) * sion_filedesc->
mapping_size * 2, sion_filedesc->
fileptr);
713 DPRINTFP((32, DFUNCTION, -1,
"read mapping, %d \n", nread));
714 if (nread != (
sizeof(sion_int32) * sion_filedesc->
mapping_size * 2)) {
715 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part_mapping: cannot read header(mapping) from file, aborting ... (%d!=%lu)\n", sion_filedesc->
mapping_size*2, (
unsigned long) nread));
719 DPRINTFP((32, DFUNCTION, -1,
"leave read\n"));
726 #define DFUNCTION "_sion_read_header_var_part_locations_rank" 736 int rc = SION_SUCCESS;
740 sion_int64 helpint64;
742 DPRINTFP((32, DFUNCTION, -1,
"enter read for rank %d of %d\n",sion_filedesc->
rank,sion_filedesc->
ntasks));
745 + sion_filedesc->
rank *
sizeof(sion_int64);
747 _sion_file_purge(sion_filedesc->
fileptr);
751 nread = _sion_file_read(&helpint64,
sizeof(sion_int64), sion_filedesc->
fileptr);
753 numblocks = helpint64;
754 if (nread !=
sizeof(sion_int64)) {
755 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part_locations_rank: cannot read header(numblocks) from file, aborting ... (%d)\n", sion_filedesc->
ntasks));
761 for (i = 0; i < numblocks; i++) {
764 + (i + 1) * sion_filedesc->
ntasks *
sizeof(sion_int64)
765 + sion_filedesc->
rank *
sizeof(sion_int64);
766 _sion_file_purge(sion_filedesc->
fileptr);
767 _sion_file_set_position(sion_filedesc->
fileptr, position);
769 nread = _sion_file_read(&helpint64,
sizeof(sion_int64), sion_filedesc->
fileptr);
770 if (nread !=
sizeof(sion_int64)) {
771 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part_locations_rank: cannot read header(blocksizes) from file, aborting ... (%d!=%lu)\n", 1, (
unsigned long) nread));
775 DPRINTFP((32,
"_sion_read_header_var_part_locations_rank", -1,
"read blocksizes[%i], %lld start_of_varheader=%lld\n", i, helpint64, sion_filedesc->
start_of_varheader));
779 DPRINTFP((32, DFUNCTION, -1,
"leave read\n"));
786 #define DFUNCTION "_sion_read_header_var_part_mapping_rank" 797 int rc = SION_SUCCESS;
801 sion_int32 helpint32;
803 DPRINTFP((32, DFUNCTION, -1,
"enter read for rank %d of %d\n",sion_filedesc->
rank,sion_filedesc->
ntasks));
806 + sion_filedesc->
ntasks *
sizeof(sion_int64)
808 _sion_file_purge(sion_filedesc->
fileptr);
809 _sion_file_set_position(sion_filedesc->
fileptr, position);
811 DPRINTFP((16, DFUNCTION, sion_filedesc->
rank,
" fileptr is at position %14lld\n", _sion_file_get_position(sion_filedesc->
fileptr)));
814 nread = _sion_file_read(&helpint32,
sizeof(sion_int32), sion_filedesc->
fileptr);
815 if (nread !=
sizeof(sion_int32)) {
816 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part_mapping_rank: cannot read header(mapping_size) from file, aborting ... (%d)\n", sion_filedesc->
ntasks));
820 DPRINTFP((32,
"_sion_read_header_var_part_mapping_rank", -1,
"read mapping_size %d \n", msize));
822 if((sion_filedesc->
rank<0) || (sion_filedesc->
rank>=msize)) {
823 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part_mapping_rank: wrong rank %d not between 0 .. %d aborting ...\n", sion_filedesc->
rank,msize));
828 + sion_filedesc->
ntasks *
sizeof(sion_int64)
831 + 2*sion_filedesc->
rank*
sizeof(sion_int32);
833 _sion_file_purge(sion_filedesc->
fileptr);
834 _sion_file_set_position(sion_filedesc->
fileptr, position);
839 sion_filedesc->
mapping = (sion_int32 *) malloc(sion_filedesc->
mapping_size * 2 *
sizeof(sion_int32));
840 if (sion_filedesc->
mapping == NULL) {
841 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part_mapping: cannot allocate temporary memory of size %lu (mapping), aborting ...\n", (
unsigned long) 2 * sion_filedesc->
mapping_size *
sizeof(sion_int64)));
843 DPRINTFP((32, DFUNCTION, -1,
"alloc mapping vector size=%d (%lu bytes)\n", sion_filedesc->
mapping_size, (
long) sion_filedesc->
mapping_size * 2 *
sizeof(sion_int32)));
846 nread = _sion_file_read(sion_filedesc->
mapping,
sizeof(sion_int32) * sion_filedesc->
mapping_size * 2, sion_filedesc->
fileptr);
847 DPRINTFP((32, DFUNCTION, -1,
"read mapping, %d \n", nread));
848 if (nread != (
sizeof(sion_int32) * sion_filedesc->
mapping_size * 2)) {
849 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part_mapping: cannot read header(mapping) from file, aborting ... (%d!=%lu)\n", sion_filedesc->
mapping_size*2, (
unsigned long) nread));
853 DPRINTFP((32, DFUNCTION, -1,
"leave read filenumber=%d lrank=%d\n",sion_filedesc->
mapping[0], sion_filedesc->
mapping[1]));
861 #define DFUNCTION "_sion_wr_hdr_var_prt_blkcnt_from_field" 877 DPRINTFP((32, DFUNCTION, -1,
"enter\n"));
878 DPRINTFP((16, DFUNCTION, sion_filedesc->
rank,
" fileptr is at position %14lld\n", _sion_file_get_position(sion_filedesc->
fileptr)));
880 if (field_size < sion_filedesc->ntasks) {
881 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_read_header_var_part_blockcount_to_field: cannot read header(blocksizes) field too small, aborting ... (%d<%d)\n", field_size, sion_filedesc->
ntasks));
884 _sion_file_purge(sion_filedesc->
fileptr);
887 nwrite = _sion_file_write(field,
sizeof(sion_int64) * sion_filedesc->
ntasks, sion_filedesc->
fileptr);
888 if (nwrite !=
sizeof(sion_int64) * sion_filedesc->
ntasks) {
889 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header_var_part_blockcount_from_field: cannot write header(all_blockcount) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
891 DPRINTFP((32, DFUNCTION, -1,
" wrote all_blockcount field %d elements nwrite=%lu\n", sion_filedesc->
ntasks, (
unsigned long) nwrite));
893 DPRINTFP((32, DFUNCTION, -1,
"leave \n"));
900 #define DFUNCTION "_sion_wr_hdr_vr_prt_nxtblksizes_from_field" 917 DPRINTFP((32, DFUNCTION, -1,
"enter\n"));
918 DPRINTFP((16, DFUNCTION, sion_filedesc->
rank,
" fileptr is at position %14lld\n", _sion_file_get_position(sion_filedesc->
fileptr)));
920 if (field_size < sion_filedesc->ntasks) {
921 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header_var_part_nextblocksizes_from_field: cannot write header(blocksizes) field too small, aborting ... (%d<%d)\n", field_size, sion_filedesc->
ntasks));
923 nwrite = _sion_file_write(field,
sizeof(sion_int64) * sion_filedesc->
ntasks, sion_filedesc->
fileptr);
924 if (nwrite !=
sizeof(sion_int64) * sion_filedesc->
ntasks) {
925 return(_sion_errorprint(SION_NOT_SUCCESS,_SION_ERROR_RETURN,
"_sion_write_header_var_part_nextblocksizes_from_field: cannot write header(all_blocksizes) to file, aborting ... (%lu)\n", (
unsigned long) nwrite));
927 DPRINTFP((32, DFUNCTION, -1,
" wrote all_blocksizes field %d elements nwrite=%lu\n", sion_filedesc->
ntasks, (
unsigned long) nwrite));
929 DPRINTFP((32, DFUNCTION, -1,
"leave \n"));
Sion File Descriptor Structure.
int sion_get_endianness(void)
Return endianness.
sion_int64 * all_blockcount
sion_int32 filesionpatchlevel
sion_int64 * all_globalranks
char * sion_keyval_type_to_str(int type)
Returns key value mode as string.
sion_int64 * all_chunksizes
sion_int32 filesionversion
sion_int64 start_of_varheader
sion_int64 * all_blocksizes
void sion_swap(void *target, void *source, int size, int n, int aflag)