mirror of
https://github.com/TREX-CoE/trexio.git
synced 2024-12-23 04:43:57 +01:00
Fix text back end for read-only directories (make distcheck in qmckl)
This commit is contained in:
parent
d017306706
commit
5cf12131f1
@ -172,7 +172,24 @@ trexio_text_init (trexio_t* const file)
|
||||
f->lock_file = open(file_name,O_WRONLY|O_CREAT|O_TRUNC, 0644);
|
||||
|
||||
if (f->lock_file <= 0) {
|
||||
if (file->mode != 'r') {
|
||||
return TREXIO_ERRNO;
|
||||
} else {
|
||||
if (errno == EACCES) {
|
||||
/* The directory is read-only and the lock file can't be written.
|
||||
Create a dummy temporary file for dummy locking.
|
||||
*/
|
||||
char dirname[TREXIO_MAX_FILENAME_LENGTH] = "/tmp/trexio.XXXXXX";
|
||||
mkdtemp(dirname);
|
||||
strncpy (file_name, dirname, TREXIO_MAX_FILENAME_LENGTH);
|
||||
strncat (file_name, lock_file_name, TREXIO_MAX_FILENAME_LENGTH-strlen(lock_file_name));
|
||||
f->lock_file = open(file_name,O_WRONLY|O_CREAT|O_TRUNC, 0644);
|
||||
remove(file_name);
|
||||
rmdir(dirname);
|
||||
} else {
|
||||
return TREXIO_ERRNO;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return TREXIO_SUCCESS;
|
||||
|
Loading…
Reference in New Issue
Block a user