libreboot-utils: simplify lbgetprogname

make it more reliable; it can't segfault
now, under any circumstance. not even
once.

the problem arised when lbsetname was not
called in a program, before calling the
function: lbgetprogname. a segfault would
occur, due to it being NULL.

not every os/libc has getprogname, so i have
my own implementation.

Signed-off-by: Leah Rowe <leah@libreboot.org>
This commit is contained in:
Leah Rowe
2026-03-29 08:09:52 +01:00
parent 909b321f3a
commit 6e4839d356
2 changed files with 17 additions and 27 deletions
+15 -25
View File
@@ -359,22 +359,16 @@ no_op(void)
const char *
lbgetprogname(void)
{
static char *rval = NULL;
static char *p;
static int setname = 0;
if (!setname) {
if ((rval = lbsetprogname(NULL)) == NULL)
return NULL;
p = strrchr(rval, '/');
if (p)
rval = p + 1;
setname = 1;
}
return rval;
char *name = lbsetprogname(NULL);
char *p = NULL;
if (name)
p = strrchr(name, '/');
if (p)
return p + 1;
else if (name)
return name;
else
return "libreboot-utils";
}
/* singleton. if string not null,
@@ -385,17 +379,13 @@ lbgetprogname(void)
char *
lbsetprogname(char *argv0)
{
static int setname = 0;
static char *progname = NULL;
size_t len;
static int set = 0;
if (!setname) {
if (if_err(argv0 == NULL || *argv0 == '\0', EFAULT) ||
slen(argv0, 4096, &len) < 0)
return NULL;
memcpy(smalloc(&progname, len + 1), argv0, len + 1);
setname = 1;
if (!set) {
if (argv0 == NULL || sdup(argv0, 4096, &progname) < 0)
return "libreboot-utils";
set = 1;
}
return progname;