More try progress

This commit is contained in:
2026-07-29 17:03:15 -05:00
parent c6342f739a
commit 67b628cb44
+259 -26
View File
@@ -408,10 +408,30 @@ ci2_try_lstat(const char* restrict path, struct stat* restrict buf)
}
int
ci2_try_mkdir(const char*, mode_t);
ci2_try_mkdir(const char* path, mode_t mode)
{
int res = mkdir(path, mode);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
int
ci2_try_mkdirat(int, const char*, mode_t);
ci2_try_mkdirat(int dirfd, const char* path, mode_t mode)
{
int res = mkdirat(dirfd, path, mode);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
int
ci2_try_mkfifo(const char* path, mode_t mode)
@@ -440,31 +460,95 @@ ci2_try_mkfifoat(int dirfd, const char* path, mode_t mode)
}
int
ci2_try_mknod(const char*, mode_t, dev_t);
ci2_try_mknod(const char* path, mode_t mode, dev_t dev)
{
int res = mknod(path, mode, dev);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
int
ci2_try_mknodat(int, const char*, mode_t, dev_t);
ci2_try_mknodat(int dirfd, const char* path, mode_t mode, dev_t dev)
{
int res = mknodat(dirfd, path, mode, dev);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
int
ci2_try_stat(const char* restrict, struct stat* restrict);
ci2_try_stat(const char* restrict path, struct stat* restrict buf)
{
int res = stat(path, buf);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
mode_t ci2_try_umask(mode_t);
mode_t
ci2_try_umask(mode_t mode)
{ // Always succeeds.
return umask(mode);
}
int
ci2_try_utimensat(int, const char*, const struct timespec[2], int);
/* unistd.h */
int
ci2_try_access(const char*, int);
ci2_try_access(const char* path, int mode)
{
int res = access(path, mode);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
unsigned
ci2_try_alarm(unsigned);
int
ci2_try_chdir(const char*);
ci2_try_chdir(const char* path)
{
int res = chdir(path);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
int
ci2_try_chown(const char*, uid_t, gid_t);
ci2_try_chown(const char* path, uid_t owner, gid_t group)
{
int res = chown(path, owner, group);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
int
ci2_try_close(int fd)
@@ -480,10 +564,30 @@ ci2_try_close(int fd)
}
size_t
ci2_try_confstr(int, char*, size_t);
ci2_try_confstr(int name, char* buf, size_t len)
{
size_t res = confstr(name, buf, len);
if (res == 0 && errno == EINVAL) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
char*
ci2_try_crypt(const char*, const char*);
ci2_try_crypt(const char* key, const char* salt)
{
char* res = crypt(key, salt);
if (res == NULL) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
int
ci2_try_dup(int oldfd)
@@ -512,7 +616,10 @@ ci2_try_dup2(int oldfd, int newfd)
}
void
ci2_try_exit(int);
ci2_try_exit(int status)
{
exit(status);
}
void
ci2_try_encrypt(char[64], int);
@@ -566,22 +673,86 @@ ci2_try_execvp(const char* file, char* const argv[])
}
int
ci2_try_faccessat(int, const char*, int, int);
ci2_try_faccessat(int dirfd, const char* path, int mode, int flags)
{
int res = faccessat(dirfd, path, mode, flags);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
int
ci2_try_fchdir(int);
ci2_try_fchdir(int fd)
{
int res = fchdir(fd);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
int
ci2_try_fchown(int, uid_t, gid_t);
ci2_try_fchown(int fd, uid_t owner, gid_t group)
{
int res = fchown(fd, owner, group);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
int
ci2_try_fchownat(int, const char*, uid_t, gid_t, int);
ci2_try_fchownat(int dirfd,
const char* path,
uid_t owner,
gid_t group,
int flags)
{
int res = fchownat(dirfd, path, owner, group, flags);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
int
ci2_try_fdatasync(int);
ci2_try_fdatasync(int fd)
{
int res = fdatasync(fd);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
int
ci2_try_fexecve(int, char* const[], char* const[]);
ci2_try_fexecve(int fd, char* const argv[], char* const envp[])
{
int res = fexecve(fd, argv, envp);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
pid_t
ci2_try_fork(void)
@@ -597,25 +768,77 @@ ci2_try_fork(void)
}
long
ci2_try_fpathconf(int, int);
ci2_try_fpathconf(int fd, int name)
{
long res = fpathconf(fd, name);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
int
ci2_try_fsync(int);
ci2_try_fsync(int fd)
{
int res = fsync(fd);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
int
ci2_try_ftruncate(int, off_t);
ci2_try_ftruncate(int fildes, off_t len)
{
int res = ftruncate(fildes, len);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
char*
ci2_try_getcwd(char*, size_t);
ci2_try_getcwd(char* buf, size_t size)
{
char* res = getcwd(buf, size);
if (res == NULL) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
gid_t
ci2_try_getegid(void);
ci2_try_getegid(void) // Never fails
{
gid_t res = getegid();
return res;
}
uid_t
ci2_try_geteuid(void);
ci2_try_geteuid(void) // never fails
{
gid_t res = geteuid();
return res;
}
gid_t
ci2_try_getgid(void);
ci2_try_getgid(void) // Never fails
{
gid_t res = getgid();
return res;
}
int
ci2_try_getgroups(int, gid_t[]);
@@ -673,7 +896,17 @@ int
ci2_try_nice(int);
long
ci2_try_pathconf(const char*, int);
ci2_try_pathconf(const char* path, int name)
{
long res = pathconf(path, name);
if (res < 0) {
int err = errno;
char* err_str = strerror(err);
struct Exception e = { err_str };
CI2_RAISE(e);
}
return res;
}
int
ci2_try_pause(void);