const char * fmt_argv(char **argv, char *cmd, char *thread, size_t maxlen) { size_t len; char *ap, *cp; if (argv == NULL || argv[0] == NULL) { if (cmd == NULL) return (""); ap = NULL; len = maxlen + 3; } else { ap = shquote(argv); len = strlen(ap) + maxlen + 4; } cp = malloc(len); if (cp == NULL) errx(1, "malloc failed"); if (ap == NULL) { if (thread != NULL) { asprintf(&ap, "%s/%s", cmd, thread); sprintf(cp, "[%.*s]", (int)maxlen, ap); free(ap); } else sprintf(cp, "[%.*s]", (int)maxlen, cmd); } else if (strncmp(cmdpart(argv[0]), cmd, maxlen) != 0) sprintf(cp, "%s (%.*s)", ap, (int)maxlen, cmd); else strcpy(cp, ap); return (cp); }
const char * fmt_argv(char **argv, char *cmd, size_t maxlen) { size_t len; char *ap, *cp; if (argv == NULL || argv[0] == NULL) { if (cmd == NULL) return (""); ap = NULL; len = maxlen + 3; } else { ap = shquote(argv); len = strlen(ap) + maxlen + 4; } cp = malloc(len); if (cp == NULL) return (NULL); if (ap == NULL) sprintf(cp, " (%.*s)", (int)maxlen, cmd); else if (strncmp(cmdpart(argv[0]), cmd, maxlen) != 0) sprintf(cp, "%s (%.*s)", ap, (int)maxlen, cmd); else (void) strcpy(cp, ap); return (cp); }