mirror of
https://github.com/TREX-CoE/trexio.git
synced 2024-08-25 14:41:44 +02:00
Better error handling with open in text back end
This commit is contained in:
parent
51e64094e6
commit
d017306706
@ -217,7 +217,7 @@ return '\n'.join(result)
|
|||||||
|
|
||||||
|
|
||||||
#+RESULTS:
|
#+RESULTS:
|
||||||
:RESULTS:
|
:results:
|
||||||
#+begin_src c :tangle prefix_front.h :exports none
|
#+begin_src c :tangle prefix_front.h :exports none
|
||||||
#define TREXIO_FAILURE ((trexio_exit_code) -1)
|
#define TREXIO_FAILURE ((trexio_exit_code) -1)
|
||||||
#define TREXIO_SUCCESS ((trexio_exit_code) 0)
|
#define TREXIO_SUCCESS ((trexio_exit_code) 0)
|
||||||
@ -311,7 +311,7 @@ return '\n'.join(result)
|
|||||||
TREXIO_DSET_MISSING = 25
|
TREXIO_DSET_MISSING = 25
|
||||||
TREXIO_INVALID_STR_LEN = 30
|
TREXIO_INVALID_STR_LEN = 30
|
||||||
#+end_src
|
#+end_src
|
||||||
:END:
|
:end:
|
||||||
|
|
||||||
*** Decoding errors
|
*** Decoding errors
|
||||||
|
|
||||||
|
@ -134,13 +134,26 @@ trexio_text_init (trexio_t* const file)
|
|||||||
/* If directory doesn't exist, create it in write mode */
|
/* If directory doesn't exist, create it in write mode */
|
||||||
struct stat st;
|
struct stat st;
|
||||||
|
|
||||||
if (stat(file->file_name, &st) == 0 && S_ISDIR(st.st_mode)) {
|
int rc = stat(file->file_name, &st);
|
||||||
/* Do nothing */
|
|
||||||
} else {
|
|
||||||
if (file->mode == 'r') return TREXIO_READONLY;
|
|
||||||
|
|
||||||
if (mkdir(file->file_name, 0777) != 0) {
|
bool file_exists = rc == 0;
|
||||||
return TREXIO_FAILURE;
|
|
||||||
|
if (file_exists) {
|
||||||
|
|
||||||
|
bool is_a_directory = st.st_mode & S_IFDIR;
|
||||||
|
if (!is_a_directory) {
|
||||||
|
return TREXIO_FILE_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if (file->mode == 'r') {
|
||||||
|
return TREXIO_READONLY;
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = mkdir(file->file_name, 0777);
|
||||||
|
if (rc != 0) {
|
||||||
|
return TREXIO_ERRNO;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,7 +172,7 @@ trexio_text_init (trexio_t* const file)
|
|||||||
f->lock_file = open(file_name,O_WRONLY|O_CREAT|O_TRUNC, 0644);
|
f->lock_file = open(file_name,O_WRONLY|O_CREAT|O_TRUNC, 0644);
|
||||||
|
|
||||||
if (f->lock_file <= 0) {
|
if (f->lock_file <= 0) {
|
||||||
return TREXIO_FAILURE;
|
return TREXIO_ERRNO;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TREXIO_SUCCESS;
|
return TREXIO_SUCCESS;
|
||||||
|
Loading…
Reference in New Issue
Block a user