diff options
Diffstat (limited to 'Src/main.c')
-rw-r--r-- | Src/main.c | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/Src/main.c b/Src/main.c index 7ec8f07bd..762e06b90 100644 --- a/Src/main.c +++ b/Src/main.c @@ -45,12 +45,24 @@ main(int argc, char **argv) for (t = argv; *t; *t = metafy(*t, -1, META_ALLOC), t++); - if (!(zsh_name = strrchr(argv[0], '/'))) - zsh_name = argv[0]; - else - zsh_name++; - if (*zsh_name == '-') - zsh_name++; + zsh_name = argv[0]; + do { + char *arg0 = zsh_name; + if (!(zsh_name = strrchr(arg0, '/'))) + zsh_name = arg0; + else + zsh_name++; + if (*zsh_name == '-') + zsh_name++; + if (strcmp(zsh_name, "su") == 0) { + char *sh = zgetenv("SHELL"); + if (sh && *sh && arg0 != sh) + zsh_name = sh; + else + break; + } else + break; + } while (zsh_name); fdtable_size = OPEN_MAX; fdtable = zcalloc(fdtable_size); |