projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
add support for program_invocation[_short]_name
[musl]
/
src
/
env
/
__libc_start_main.c
diff --git
a/src/env/__libc_start_main.c
b/src/env/__libc_start_main.c
index
04a454e
..
aef9f9e
100644
(file)
--- a/
src/env/__libc_start_main.c
+++ b/
src/env/__libc_start_main.c
@@
-8,8
+8,9
@@
void __init_ldso_ctors(void);
#define AUX_CNT 38
extern size_t __hwcap, __sysinfo;
#define AUX_CNT 38
extern size_t __hwcap, __sysinfo;
+extern char *__progname, *__progname_full;
-void __init_libc(char **envp)
+void __init_libc(char **envp
, char *pn
)
{
size_t i, *auxv, aux[AUX_CNT] = { 0 };
__environ = envp;
{
size_t i, *auxv, aux[AUX_CNT] = { 0 };
__environ = envp;
@@
-19,6
+20,11
@@
void __init_libc(char **envp)
__hwcap = aux[AT_HWCAP];
__sysinfo = aux[AT_SYSINFO];
__hwcap = aux[AT_HWCAP];
__sysinfo = aux[AT_SYSINFO];
+ if (pn) {
+ __progname = __progname_full = pn;
+ for (i=0; pn[i]; i++) if (pn[i]=='/') __progname = pn+i+1;
+ }
+
__init_tls(aux);
__init_security(aux);
}
__init_tls(aux);
__init_security(aux);
}
@@
-30,7
+36,7
@@
int __libc_start_main(
{
char **envp = argv+argc+1;
{
char **envp = argv+argc+1;
- __init_libc(envp);
+ __init_libc(envp
, argv[0]
);
libc.ldso_fini = ldso_fini;
libc.fini = fini;
libc.ldso_fini = ldso_fini;
libc.fini = fini;