child_argv[child_argc++] = "-c";
child_argv[child_argc++] = buff;
} else {
- char tbuf[PATH_MAX + 2], *p;
-
- tbuf[0] = '-';
- xstrncpy(tbuf + 1, ((p = strrchr(pwd->pw_shell, '/')) ?
- p + 1 : pwd->pw_shell), sizeof(tbuf) - 1);
+ char *buff, *p;
+ xasprintf(&buff, "-%.*s", PATH_MAX,
+ ((p = strrchr(pwd->pw_shell, '/')) ?
+ p + 1 : pwd->pw_shell));
child_argv[child_argc++] = pwd->pw_shell;
- child_argv[child_argc++] = xstrdup(tbuf);
+ child_argv[child_argc++] = buff;
}
child_argv[child_argc++] = NULL;