libreboot-utils: more flexible string usage

i previously used error status and set return values
indirectly. i still do that, but where possible, i
also now return the real value.

this is because these string functions can no longer
return with error status; on error, they all abort.
this forces the program maintainer to keep their code
reliable, and removes the need to check the error status
after using syscalls, because these libc wrappers mitigate
that and make use of libc for you, including errors.

this is part of a general effort to promote safe use
of the C programming language, especially in libreboot!

Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
Leah Rowe
2026-03-30 05:13:31 +01:00
parent b96708bd3a
commit da20b75bea
7 changed files with 65 additions and 88 deletions
+6 -8
View File
@@ -88,10 +88,7 @@ fsync_dir(const char *path)
maxlen = 4096;
#endif
if (if_err(path == NULL, EFAULT) ||
if_err_sys(slen(path, maxlen, &pathlen) < 0) ||
if_err(pathlen >= maxlen || pathlen < 0, EMSGSIZE) ||
if_err(pathlen == 0, EINVAL))
if (if_err(slen(path, maxlen, &pathlen) == 0, EINVAL))
goto err_fsync_dir;
memcpy(smalloc(&dirbuf, pathlen + 1),
@@ -841,11 +838,12 @@ fs_dirname_basename(const char *path,
size_t maxlen = 4096;
#endif
if (path == NULL || dir == NULL || base == NULL ||
if_err_sys(slen(path, maxlen, &len) < 0))
if (if_err(path == NULL || dir == NULL || base == NULL, EFAULT))
return -1;
memcpy(smalloc(&buf, len + 1), path, len + 1);
slen(path, maxlen, &len);
memcpy(smalloc(&buf, len + 1),
path, len + 1);
/* strip trailing slashes */
while (len > 1 && buf[len - 1] == '/')
@@ -865,7 +863,7 @@ fs_dirname_basename(const char *path,
}
} else if (allow_relative) {
*dir = strdup(".");
sdup(".", maxlen, dir);
*base = buf;
} else {
errno = EINVAL;