From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 Received: from second.openwall.net (second.openwall.net [193.110.157.125]) by inbox.vuxu.org (Postfix) with SMTP id 0B84221617 for ; Sat, 9 Mar 2024 16:02:54 +0100 (CET) Received: (qmail 10142 invoked by uid 550); 9 Mar 2024 14:58:49 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 10113 invoked from network); 9 Mar 2024 14:58:48 -0000 Date: Sat, 9 Mar 2024 10:02:58 -0500 From: Rich Felker To: Alejandro Colomar Cc: Guillem Jover , libc-alpha@sourceware.org, musl@lists.openwall.com, libbsd@lists.freedesktop.org, "Serge E. Hallyn" , "Skyler Ferrante (RIT Student)" , Iker Pedrosa , Christian Brauner Message-ID: <20240309150258.GS4163@brightrain.aerifal.cx> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.21 (2010-09-15) Subject: Re: [musl] Re: Tweaking the program name for functions On Fri, Mar 08, 2024 at 01:52:28AM +0100, Alejandro Colomar wrote: > [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? I really don't think they meet the criteria for inclusion. They don't have historical cross platform precedent, they're not something we've hit existing applications failing to build for lack of, they don't let you do anything you couldn't already do, and the semantics would be unclear (do they just configure the legacy err.h functions? set __progname/program_invocation_short_name? modify argv[0]?) The entire err.h function set in musl is 67 lines that compile down to less than 500 bytes of machine code. If there's not a portable way to configure them the way you want, and you refuse to run a configure script of some sort to determine if the setprogname function some systems need exists, the simpler solution, rather than trying to get new contracts into libc and wait for them to be widely available, is to copy-and-paste those 67 lines and customize them as needed in your program, no? Rich