[TO += musl] Hi! On Fri, Mar 08, 2024 at 01:30:51AM +0100, Guillem Jover wrote: > That is not portable because the BSDs do not support that variable. > But all BSDs for which I've got a checkout (FreeBSD, NetBSD, OpenBSD, > DragonflyBSD) support changing it via setprogname(), but that's not > available in glibc (libbsd provides it though). > > libbsd and cosmopolitan libc support setting it via setprogname() or > program_invocation_short_name. > > musl libc supports setting it via program_invocation_short_name. > > uclibc might support __progname and/or program_invocation_short_name > depending on how it has been configured, but it does not support > setting the err(3) program name via those. Hmmm. $ cat err.c #define _GNU_SOURCE #include #include #include #include int main(void) { program_invocation_name = "foo"; program_invocation_short_name = "bar"; setprogname("baz"); error(0, errno, "fmt string"); err(1, "fmt2"); } $ cc -Wall -Wextra err.c -lbsd $ ./a.out foo: fmt string baz: fmt2: Success This would already be portable enough for what I want, except that libbsd isn't very welcome in some OSes as a core library. I guess I'll need libc support. > > > Maybe it would be interesting to get the BSDs to support these pointers? > > They already have a way to control the program name though. (And > it seems to me that using functions instead of global variables is > superior. :) Indeed. I didn't know about such function. I'll reformulate my original suggestion to this other one: How about adding setprogname(3) (and getprogname(3)) to GNU and musl libc? > > Thanks, > Guillem Have a lovely night! Alex -- Looking for a remote C programming job at the moment.