mirror of
https://github.com/TREX-CoE/trexio.git
synced 2025-01-03 18:16:22 +01:00
add metadata_unsafe attribute to trex.json; write it upon first unsafe trexio_open
This commit is contained in:
parent
8947f6caa7
commit
dcdac7dbf9
@ -903,6 +903,7 @@ trexio_open(const char* file_name, const char mode,
|
|||||||
break;
|
break;
|
||||||
#else
|
#else
|
||||||
if (rc_open != NULL) *rc_open = TREXIO_BACK_END_MISSING;
|
if (rc_open != NULL) *rc_open = TREXIO_BACK_END_MISSING;
|
||||||
|
free(result);
|
||||||
return NULL;
|
return NULL;
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
@ -935,6 +936,7 @@ trexio_open(const char* file_name, const char mode,
|
|||||||
break;
|
break;
|
||||||
#else
|
#else
|
||||||
if (rc_open != NULL) *rc_open = TREXIO_BACK_END_MISSING;
|
if (rc_open != NULL) *rc_open = TREXIO_BACK_END_MISSING;
|
||||||
|
free(result);
|
||||||
return NULL;
|
return NULL;
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
@ -971,6 +973,7 @@ trexio_open(const char* file_name, const char mode,
|
|||||||
break;
|
break;
|
||||||
#else
|
#else
|
||||||
if (rc_open != NULL) *rc_open = TREXIO_BACK_END_MISSING;
|
if (rc_open != NULL) *rc_open = TREXIO_BACK_END_MISSING;
|
||||||
|
free(result);
|
||||||
return NULL;
|
return NULL;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -978,11 +981,51 @@ trexio_open(const char* file_name, const char mode,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (rc != TREXIO_SUCCESS) {
|
if (rc != TREXIO_SUCCESS) {
|
||||||
if (rc_open != NULL) *rc_open = TREXIO_OPEN_ERROR;
|
if (rc_open != NULL) *rc_open = rc;
|
||||||
free(result);
|
free(result);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Mark the file as unsafe upon opening in UNSAFE 'u' mode */
|
||||||
|
if (mode == 'u') {
|
||||||
|
|
||||||
|
rc = trexio_has_metadata_unsafe(result);
|
||||||
|
if (rc == TREXIO_FAILURE) {
|
||||||
|
if (rc_open != NULL) *rc_open = TREXIO_OPEN_ERROR;
|
||||||
|
free(result);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rc == TREXIO_HAS_NOT) {
|
||||||
|
int64_t unsafe_val = 1;
|
||||||
|
switch (back_end) {
|
||||||
|
|
||||||
|
case TREXIO_TEXT:
|
||||||
|
rc = trexio_text_write_metadata_unsafe(result, unsafe_val);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TREXIO_HDF5:
|
||||||
|
#ifdef HAVE_HDF5
|
||||||
|
rc = trexio_hdf5_write_metadata_unsafe(result, unsafe_val);
|
||||||
|
break;
|
||||||
|
#else
|
||||||
|
if (rc_open != NULL) *rc_open = TREXIO_BACK_END_MISSING;
|
||||||
|
free(result);
|
||||||
|
return NULL;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rc != TREXIO_SUCCESS) {
|
||||||
|
if (rc_open != NULL) *rc_open = rc;
|
||||||
|
free(result);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Exit upon success */
|
/* Exit upon success */
|
||||||
if (rc_open != NULL) *rc_open = TREXIO_SUCCESS;
|
if (rc_open != NULL) *rc_open = TREXIO_SUCCESS;
|
||||||
|
|
||||||
@ -4013,10 +4056,17 @@ def delete_$group$(trexio_file) -> None:
|
|||||||
3) ~HDF5_VERSION~ [string] (optional, only if ~HAVE_HDF5~ is ~true~)
|
3) ~HDF5_VERSION~ [string] (optional, only if ~HAVE_HDF5~ is ~true~)
|
||||||
4) ~TREXIO_GIT_HASH~ [string]
|
4) ~TREXIO_GIT_HASH~ [string]
|
||||||
|
|
||||||
|
~trexio_mark_safety~ checks if the file has been open in UNSAFE mode.
|
||||||
|
If it was, the ~metadata_unsafe~ attribute can be overwritten with the value provided in a second argument of the function.
|
||||||
|
Since ~metadata_unsafe~ is set to ~1~ (~true~) upon the first opening of the file in UNSAFE mode, this value is immutable.
|
||||||
|
However, if the user validated that the file is correct (e.g. using ~trexio-tools~),
|
||||||
|
then value of the ~metadata_unsafe~ attribute can be changed using the aforementioned function.
|
||||||
|
|
||||||
** C
|
** C
|
||||||
|
|
||||||
#+begin_src c :tangle prefix_front.h :exports none
|
#+begin_src c :tangle prefix_front.h :exports none
|
||||||
trexio_exit_code trexio_info(void);
|
trexio_exit_code trexio_info(void);
|
||||||
|
trexio_exit_code trexio_mark_safety(trexio_t* const file, const int32_t safety_flag);
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
#+begin_src c :tangle prefix_front.c
|
#+begin_src c :tangle prefix_front.c
|
||||||
@ -4043,6 +4093,21 @@ def delete_$group$(trexio_file) -> None:
|
|||||||
}
|
}
|
||||||
#+end_src
|
#+end_src
|
||||||
|
|
||||||
|
#+begin_src c :tangle prefix_front.c
|
||||||
|
trexio_exit_code
|
||||||
|
trexio_mark_safety (trexio_t* const file, const int32_t safety_flag)
|
||||||
|
{
|
||||||
|
|
||||||
|
if (file == NULL) return TREXIO_INVALID_ARG_1;
|
||||||
|
/* 1 for true ; 0 for false */
|
||||||
|
if (safety_flag != 0 && safety_flag != 1) return TREXIO_INVALID_ARG_2;
|
||||||
|
/* Cannot mark the file in safe mode */
|
||||||
|
if (file->mode != 'u') return TREXIO_FAILURE;
|
||||||
|
|
||||||
|
return trexio_write_metadata_unsafe(file, safety_flag);
|
||||||
|
}
|
||||||
|
#+end_src
|
||||||
|
|
||||||
** Fortran
|
** Fortran
|
||||||
|
|
||||||
#+begin_src f90 :tangle prefix_fortran.f90
|
#+begin_src f90 :tangle prefix_fortran.f90
|
||||||
|
7
trex.org
7
trex.org
@ -57,6 +57,12 @@ fetched using multiple function calls to perform I/O on buffers.
|
|||||||
| ~author~ | ~str~ | ~(metadata.author_num)~ | Names of the authors of the file |
|
| ~author~ | ~str~ | ~(metadata.author_num)~ | Names of the authors of the file |
|
||||||
| ~package_version~ | ~str~ | | TREXIO version used to produce the file |
|
| ~package_version~ | ~str~ | | TREXIO version used to produce the file |
|
||||||
| ~description~ | ~str~ | | Text describing the content of file |
|
| ~description~ | ~str~ | | Text describing the content of file |
|
||||||
|
| ~unsafe~ | ~int~ | | ~1~: true, ~0~: false |
|
||||||
|
|
||||||
|
**Note:** ~unsafe~ attribute of the ~metadata~ group indicates whether the file has been previously opened with ~'u'~ mode.
|
||||||
|
It is automatically written in the file upon the first unsafe opening.
|
||||||
|
If the user has checked that the TREXIO file is valid (e.g. using ~trexio-tools~) after unsafe operations,
|
||||||
|
then the ~unsafe~ attribute value can be manually overwritten (in unsafe mode) from ~1~ to ~0~.
|
||||||
|
|
||||||
#+CALL: json(data=metadata, title="metadata")
|
#+CALL: json(data=metadata, title="metadata")
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
@ -69,6 +75,7 @@ fetched using multiple function calls to perform I/O on buffers.
|
|||||||
, "author" : [ "str", [ "metadata.author_num" ] ]
|
, "author" : [ "str", [ "metadata.author_num" ] ]
|
||||||
, "package_version" : [ "str", [] ]
|
, "package_version" : [ "str", [] ]
|
||||||
, "description" : [ "str", [] ]
|
, "description" : [ "str", [] ]
|
||||||
|
, "unsafe" : [ "int", [] ]
|
||||||
} ,
|
} ,
|
||||||
#+end_src
|
#+end_src
|
||||||
:END:
|
:END:
|
||||||
|
Loading…
Reference in New Issue
Block a user