mirror of
https://github.com/TREX-CoE/trexio.git
synced 2025-01-10 21:18:35 +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);
|
f->lock_file = open(file_name,O_WRONLY|O_CREAT|O_TRUNC, 0644);
|
||||||
|
|
||||||
if (f->lock_file <= 0) {
|
if (f->lock_file <= 0) {
|
||||||
|
if (file->mode != 'r') {
|
||||||
return TREXIO_ERRNO;
|
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;
|
return TREXIO_SUCCESS;
|
||||||
|
Loading…
Reference in New Issue
Block a user