mailing list of musl libc
 help / color / mirror / code / Atom feed
* [PATCH] __init_libc: add fallbacks for __progname setup
@ 2017-07-28 14:46 Alexander Monakov
  0 siblings, 0 replies; only message in thread
From: Alexander Monakov @ 2017-07-28 14:46 UTC (permalink / raw)
  To: musl

It is possible for argv[0] to be a null pointer, but the __progname
variable is used to implement functions in src/legacy/err.c that do not
expect it to be null. It is also available to the user via the
program_invocation_name alias as a GNU extension, and the implementation
in Glibc initializes it to a pointer to empty string rather than NULL.

Since argv[0] is usually non-null and it's preferable to keep those
variables in BSS, implement the fallbacks in __init_libc, which also
allows to have an intermediate fallback to AT_EXECFN.

---
 src/env/__libc_start_main.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/env/__libc_start_main.c b/src/env/__libc_start_main.c
index 5c79be28..18afdc1d 100644
--- a/src/env/__libc_start_main.c
+++ b/src/env/__libc_start_main.c
@@ -30,10 +30,10 @@ void __init_libc(char **envp, char *pn)
 	__sysinfo = aux[AT_SYSINFO];
 	libc.page_size = aux[AT_PAGESZ];
 
-	if (pn) {
-		__progname = __progname_full = pn;
-		for (i=0; pn[i]; i++) if (pn[i]=='/') __progname = pn+i+1;
-	}
+	if (!pn) pn = (void*)aux[AT_EXECFN];
+	if (!pn) pn = "";
+	__progname = __progname_full = pn;
+	for (i=0; pn[i]; i++) if (pn[i]=='/') __progname = pn+i+1;
 
 	__init_tls(aux);
 	__init_ssp((void *)aux[AT_RANDOM]);
-- 
2.11.0



^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2017-07-28 14:46 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-28 14:46 [PATCH] __init_libc: add fallbacks for __progname setup Alexander Monakov

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).