diff options
Diffstat (limited to 'builtin/help.c')
| -rw-r--r-- | builtin/help.c | 46 | 
1 files changed, 13 insertions, 33 deletions
| diff --git a/builtin/help.c b/builtin/help.c index 3422e73079..88480131cf 100644 --- a/builtin/help.c +++ b/builtin/help.c @@ -127,7 +127,7 @@ static void exec_woman_emacs(const char *path, const char *page)  			path = "emacsclient";  		strbuf_addf(&man_page, "(woman \"%s\")", page);  		execlp(path, "emacsclient", "-e", man_page.buf, (char *)NULL); -		warning(_("failed to exec '%s': %s"), path, strerror(errno)); +		warning_errno(_("failed to exec '%s'"), path);  	}  } @@ -140,22 +140,15 @@ static void exec_man_konqueror(const char *path, const char *page)  		/* It's simpler to launch konqueror using kfmclient. */  		if (path) { -			const char *file = strrchr(path, '/'); -			if (file && !strcmp(file + 1, "konqueror")) { -				char *new = xstrdup(path); -				char *dest = strrchr(new, '/'); - -				/* strlen("konqueror") == strlen("kfmclient") */ -				strcpy(dest + 1, "kfmclient"); -				path = new; -			} -			if (file) -				filename = file; +			size_t len; +			if (strip_suffix(path, "/konqueror", &len)) +				path = xstrfmt("%.*s/kfmclient", (int)len, path); +			filename = basename((char *)path);  		} else  			path = "kfmclient";  		strbuf_addf(&man_page, "man:%s(1)", page);  		execlp(path, filename, "newTab", man_page.buf, (char *)NULL); -		warning(_("failed to exec '%s': %s"), path, strerror(errno)); +		warning_errno(_("failed to exec '%s'"), path);  	}  } @@ -164,7 +157,7 @@ static void exec_man_man(const char *path, const char *page)  	if (!path)  		path = "man";  	execlp(path, "man", page, (char *)NULL); -	warning(_("failed to exec '%s': %s"), path, strerror(errno)); +	warning_errno(_("failed to exec '%s'"), path);  }  static void exec_man_cmd(const char *cmd, const char *page) @@ -172,18 +165,16 @@ static void exec_man_cmd(const char *cmd, const char *page)  	struct strbuf shell_cmd = STRBUF_INIT;  	strbuf_addf(&shell_cmd, "%s %s", cmd, page);  	execl(SHELL_PATH, SHELL_PATH, "-c", shell_cmd.buf, (char *)NULL); -	warning(_("failed to exec '%s': %s"), cmd, strerror(errno)); +	warning(_("failed to exec '%s'"), cmd);  }  static void add_man_viewer(const char *name)  {  	struct man_viewer_list **p = &man_viewer_list; -	size_t len = strlen(name);  	while (*p)  		p = &((*p)->next); -	*p = xcalloc(1, (sizeof(**p) + len + 1)); -	strncpy((*p)->name, name, len); +	FLEX_ALLOC_STR(*p, name, name);  }  static int supported_man_viewer(const char *name, size_t len) @@ -197,9 +188,8 @@ static void do_add_man_viewer_info(const char *name,  				   size_t len,  				   const char *value)  { -	struct man_viewer_info_list *new = xcalloc(1, sizeof(*new) + len + 1); - -	strncpy(new->name, name, len); +	struct man_viewer_info_list *new; +	FLEX_ALLOC_MEM(new, name, name, len);  	new->info = xstrdup(value);  	new->next = man_viewer_info_list;  	man_viewer_info_list = new; @@ -295,16 +285,6 @@ static int is_git_command(const char *s)  		is_in_cmdlist(&other_cmds, s);  } -static const char *prepend(const char *prefix, const char *cmd) -{ -	size_t pre_len = strlen(prefix); -	size_t cmd_len = strlen(cmd); -	char *p = xmalloc(pre_len + cmd_len + 1); -	memcpy(p, prefix, pre_len); -	strcpy(p + pre_len, cmd); -	return p; -} -  static const char *cmd_to_page(const char *git_cmd)  {  	if (!git_cmd) @@ -312,9 +292,9 @@ static const char *cmd_to_page(const char *git_cmd)  	else if (starts_with(git_cmd, "git"))  		return git_cmd;  	else if (is_git_command(git_cmd)) -		return prepend("git-", git_cmd); +		return xstrfmt("git-%s", git_cmd);  	else -		return prepend("git", git_cmd); +		return xstrfmt("git%s", git_cmd);  }  static void setup_man_path(void) | 
