mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-11 05:52:36 +02:00
libreboot-utils: loop fcntl on eintr
but i can't write a generic function for this, because fcntl is a variadic function, so wrapping cannot be done cleanly. Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
@@ -28,6 +28,8 @@ open_gbe_file(void)
|
||||
struct xstate *x = xstatus();
|
||||
struct commands *cmd = &x->cmd[x->i];
|
||||
struct xfile *f = &x->f;
|
||||
int saved_errno = errno;
|
||||
errno = 0;
|
||||
|
||||
int _flags;
|
||||
|
||||
@@ -46,7 +48,8 @@ open_gbe_file(void)
|
||||
if (f->gbe_st.st_nlink == 0)
|
||||
err_exit(EIO, "%s: file unlinked while open", f->fname);
|
||||
|
||||
_flags = fcntl(f->gbe_fd, F_GETFL);
|
||||
while (fs_retry(saved_errno,
|
||||
_flags = fcntl(f->gbe_fd, F_GETFL)));
|
||||
if (_flags == -1)
|
||||
err_exit(errno, "%s: fcntl(F_GETFL)", f->fname);
|
||||
|
||||
@@ -74,6 +77,8 @@ open_gbe_file(void)
|
||||
if (lock_file(f->gbe_fd, cmd->flags) == -1)
|
||||
err_exit(errno, "%s: can't lock", f->fname);
|
||||
*/
|
||||
|
||||
reset_caller_errno(0);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -744,15 +744,21 @@ int secure_file(int *fd,
|
||||
int do_lock,
|
||||
mode_t mode)
|
||||
{
|
||||
int flags;
|
||||
int flags = -1;
|
||||
struct stat st_now;
|
||||
int saved_errno = errno;
|
||||
errno = 0;
|
||||
|
||||
if (if_err(fd == NULL || st == NULL, EFAULT) ||
|
||||
if_err(*fd < 0, EBADF) ||
|
||||
if_err_sys((flags = fcntl(*fd, F_GETFL)) == -1) ||
|
||||
if_err(bad_flags > 0 && (flags & bad_flags), EPERM))
|
||||
if_err(*fd < 0, EBADF))
|
||||
goto err_demons;
|
||||
|
||||
while (fs_retry(saved_errno,
|
||||
flags = fcntl(*fd, F_GETFL)));
|
||||
if (flags == -1)
|
||||
goto err_demons;
|
||||
|
||||
if (if_err(bad_flags > 0 && (flags & bad_flags), EPERM))
|
||||
goto err_demons;
|
||||
|
||||
if (expected != NULL) {
|
||||
@@ -878,6 +884,7 @@ lock_file(int fd, int flags)
|
||||
{
|
||||
struct flock fl;
|
||||
int saved_errno = errno;
|
||||
int fcntl_rval = -1;
|
||||
errno = 0;
|
||||
|
||||
if (if_err(fd < 0, EBADF) ||
|
||||
@@ -893,7 +900,9 @@ lock_file(int fd, int flags)
|
||||
|
||||
fl.l_whence = SEEK_SET;
|
||||
|
||||
if (fcntl(fd, F_SETLK, &fl) == -1)
|
||||
while (fs_retry(saved_errno,
|
||||
fcntl_rval = fcntl(fd, F_SETLK, &fl)));
|
||||
if (fcntl_rval == -1)
|
||||
goto err_lock_file;
|
||||
|
||||
reset_caller_errno(0);
|
||||
|
||||
Reference in New Issue
Block a user