mirror of
https://codeberg.org/libreboot/lbmk.git
synced 2026-07-20 05:36:23 +02:00
libreboot-utils: unified errno handling on returns
Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
@@ -490,6 +490,7 @@ int try_err(int loop_err, int errval);
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void usage(void);
|
void usage(void);
|
||||||
|
int set_errno(int saved_errno, int fallback);
|
||||||
void err_exit(int nvm_errval, const char *msg, ...);
|
void err_exit(int nvm_errval, const char *msg, ...);
|
||||||
func_t errhook(func_t ptr); /* hook function for cleanup on err */
|
func_t errhook(func_t ptr); /* hook function for cleanup on err */
|
||||||
const char *getnvmprogname(void);
|
const char *getnvmprogname(void);
|
||||||
|
|||||||
@@ -62,11 +62,7 @@ same_file(int fd, struct stat *st_old,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_same_file:
|
err_same_file:
|
||||||
|
return set_errno(saved_errno, ESTALE);
|
||||||
if (errno == saved_errno)
|
|
||||||
errno = ESTALE;
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -155,13 +151,11 @@ fsync_dir(const char *path)
|
|||||||
|
|
||||||
err_fsync_dir:
|
err_fsync_dir:
|
||||||
|
|
||||||
if (errno == saved_errno)
|
|
||||||
errno = EIO;
|
|
||||||
|
|
||||||
free_and_set_null(&dirbuf);
|
free_and_set_null(&dirbuf);
|
||||||
close_on_eintr(&dirfd);
|
close_on_eintr(&dirfd);
|
||||||
|
|
||||||
return -1;
|
return set_errno(saved_errno, EIO);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* rw_file_exact() - Read perfectly or die
|
/* rw_file_exact() - Read perfectly or die
|
||||||
@@ -264,10 +258,7 @@ rw_file_exact(int fd, unsigned char *mem, size_t nrw,
|
|||||||
|
|
||||||
err_rw_file_exact:
|
err_rw_file_exact:
|
||||||
|
|
||||||
if (errno == saved_errno)
|
return set_errno(saved_errno, EIO);
|
||||||
errno = EIO;
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* prw() - portable read-write with more
|
/* prw() - portable read-write with more
|
||||||
@@ -446,11 +437,7 @@ real_pread_pwrite:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
err_prw:
|
err_prw:
|
||||||
|
return set_errno(saved_errno, EIO);
|
||||||
if (errno == saved_errno)
|
|
||||||
errno = EIO;
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -472,10 +459,7 @@ io_args(int fd, void *mem, size_t nrw,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_io_args:
|
err_io_args:
|
||||||
if (errno == saved_errno)
|
return set_errno(saved_errno, EINVAL);
|
||||||
errno = EINVAL;
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -493,10 +477,7 @@ check_file(int fd, struct stat *st)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_is_file:
|
err_is_file:
|
||||||
if (errno == saved_errno)
|
return set_errno(saved_errno, EINVAL);
|
||||||
errno = EINVAL;
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* POSIX can say whatever it wants.
|
/* POSIX can say whatever it wants.
|
||||||
@@ -518,10 +499,7 @@ rw_over_nrw(ssize_t r, size_t nrw)
|
|||||||
return r;
|
return r;
|
||||||
|
|
||||||
err_rw_over_nrw:
|
err_rw_over_nrw:
|
||||||
if (errno == saved_errno)
|
return set_errno(saved_errno, EIO);
|
||||||
errno = EIO;
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
off_t
|
off_t
|
||||||
|
|||||||
@@ -439,10 +439,8 @@ gbe_mv(void)
|
|||||||
tmp_gbe_bin_exists = 0;
|
tmp_gbe_bin_exists = 0;
|
||||||
|
|
||||||
ret_gbe_mv:
|
ret_gbe_mv:
|
||||||
|
|
||||||
if (f->gbe_fd > -1) {
|
if (f->gbe_fd > -1) {
|
||||||
close_on_eintr(&f->gbe_fd);
|
close_on_eintr(&f->gbe_fd);
|
||||||
f->gbe_fd = -1;
|
|
||||||
|
|
||||||
if (fsync_dir(f->fname) < 0) {
|
if (fsync_dir(f->fname) < 0) {
|
||||||
f->io_err_gbe_bin = 1;
|
f->io_err_gbe_bin = 1;
|
||||||
@@ -462,17 +460,12 @@ ret_gbe_mv:
|
|||||||
tmp_gbe_bin_exists = 0;
|
tmp_gbe_bin_exists = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rval < 0) {
|
if (rval >= 0)
|
||||||
/* if nothing set errno,
|
goto out;
|
||||||
* we assume EIO, or we
|
|
||||||
* use what was set
|
|
||||||
*/
|
|
||||||
if (errno == saved_errno)
|
|
||||||
errno = EIO;
|
|
||||||
} else {
|
|
||||||
errno = saved_errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
return set_errno(saved_errno, EIO);
|
||||||
|
out:
|
||||||
|
errno = saved_errno;
|
||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -295,11 +295,7 @@ tmpdir_policy(const char *path,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_tmpdir_policy:
|
err_tmpdir_policy:
|
||||||
|
return set_errno(saved_errno, EIO);
|
||||||
if (errno == saved_errno)
|
|
||||||
errno = EIO;
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -377,10 +373,7 @@ err_same_dir:
|
|||||||
close_on_eintr(&fd_a);
|
close_on_eintr(&fd_a);
|
||||||
close_on_eintr(&fd_b);
|
close_on_eintr(&fd_b);
|
||||||
|
|
||||||
if (errno == saved_errno)
|
return set_errno(saved_errno, EIO);
|
||||||
errno = EIO;
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* bypass_all_sticky_checks: if set,
|
/* bypass_all_sticky_checks: if set,
|
||||||
@@ -467,19 +460,15 @@ world_writeable_and_sticky(
|
|||||||
goto sticky_hell; /* heaven visa denied */
|
goto sticky_hell; /* heaven visa denied */
|
||||||
|
|
||||||
sticky_heaven:
|
sticky_heaven:
|
||||||
|
|
||||||
close_on_eintr(&dirfd);
|
close_on_eintr(&dirfd);
|
||||||
errno = saved_errno;
|
errno = saved_errno;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
sticky_hell:
|
sticky_hell:
|
||||||
|
|
||||||
if (errno == saved_errno)
|
|
||||||
errno = EPERM;
|
|
||||||
|
|
||||||
close_on_eintr(&dirfd);
|
close_on_eintr(&dirfd);
|
||||||
|
|
||||||
|
(void) set_errno(saved_errno, EPERM);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -923,11 +912,7 @@ int secure_file(int *fd,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_demons:
|
err_demons:
|
||||||
|
return set_errno(saved_errno, EIO);
|
||||||
if (errno == saved_errno)
|
|
||||||
errno = EIO;
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -1037,9 +1022,5 @@ lock_file(int fd, int flags)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_lock_file:
|
err_lock_file:
|
||||||
|
return set_errno(saved_errno, EIO);
|
||||||
if (errno == saved_errno)
|
|
||||||
errno = EIO;
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -201,14 +201,10 @@ scatn(ssize_t sc, const char **sv,
|
|||||||
errno = saved_errno;
|
errno = saved_errno;
|
||||||
return 0;
|
return 0;
|
||||||
err:
|
err:
|
||||||
if (ct != NULL)
|
free_and_set_null(&ct);
|
||||||
free(ct);
|
free_and_set_null((char **)&size);
|
||||||
if (size != NULL)
|
|
||||||
free(size);
|
|
||||||
if (errno == saved_errno)
|
|
||||||
errno = EFAULT;
|
|
||||||
|
|
||||||
return -1;
|
return set_errno(saved_errno, EFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* strict strcat */
|
/* strict strcat */
|
||||||
@@ -285,6 +281,19 @@ err:
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* on functions that return with errno,
|
||||||
|
* i sometimes have a default fallback,
|
||||||
|
* which is set if errno wasn't changed,
|
||||||
|
* under error condition.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
set_errno(int saved_errno, int fallback)
|
||||||
|
{
|
||||||
|
if (errno == saved_errno)
|
||||||
|
errno = fallback;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* the one for nvmutil state is in state.c */
|
/* the one for nvmutil state is in state.c */
|
||||||
/* this one just exits */
|
/* this one just exits */
|
||||||
void
|
void
|
||||||
|
|||||||
Reference in New Issue
Block a user