git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v14 03/16] quote.c: remove path_relative, use relative_path instead

From
Junio C Hamano <gitster@pobox.com>
Date
Jun 24, 2013, 19:11 UTC
Message-ID
<7vhagn8gtz.fsf@alter.siamese.dyndns.org>
In-Reply-To
<654b2387c27470c3dc81169e8f43c231aa9504ce.1372087065.git.worldhello.net@gmail.com>
Jiang Xin <worldhello.net@gmail.com> writes:
> Since there is an enhanced version of relative_path() in path.c,
> remove duplicate counterpart path_relative() in quote.c.

There is no nice comparison chart before and after like you had in patch 02/16?

Show 8 quoted lines
>  void write_name_quoted_relative(const char *name, size_t len,
>  				const char *prefix, size_t prefix_len,
>  				FILE *fp, int terminator)
>  {
>  	struct strbuf sb = STRBUF_INIT;
>  
> -	name = path_relative(name, len, &sb, prefix, prefix_len);
> +	name = relative_path(name, prefix, &sb);

Are we sure nobody calls prefix_len pointing into the middle of string, not at the end of "prefix"? This is unsafe for such a caller, and to make sure we catch them, we should remove the now-unused prefix_len parameter from this function.

Show 62 quoted lines
>  	write_name_quoted(name, fp, terminator);
>  
>  	strbuf_release(&sb);
>  }
>  
> -/*
> - * Give path as relative to prefix.
> - *
> - * The strbuf may or may not be used, so do not assume it contains the
> - * returned path.
> - */
> -static const char *path_relative(const char *in, int len,
> -				 struct strbuf *sb, const char *prefix,
> -				 int prefix_len)
> -{
> -	int off, i;
> -
> -	if (len < 0)
> -		len = strlen(in);
> -	if (prefix_len < 0) {
> -		if (prefix)
> -			prefix_len = strlen(prefix);
> -		else
> -			prefix_len = 0;
> -	}
> -
> -	off = 0;
> -	i = 0;
> -	while (i < prefix_len && i < len && prefix[i] == in[i]) {
> -		if (prefix[i] == '/')
> -			off = i + 1;
> -		i++;
> -	}
> -	in += off;
> -	len -= off;
> -
> -	if (i >= prefix_len)
> -		return in;
> -
> -	strbuf_reset(sb);
> -	strbuf_grow(sb, len);
> -
> -	while (i < prefix_len) {
> -		if (prefix[i] == '/')
> -			strbuf_addstr(sb, "../");
> -		i++;
> -	}
> -	strbuf_add(sb, in, len);
> -
> -	return sb->buf;
> -}
> -
>  /* quote path as relative to the given prefix */
>  char *quote_path_relative(const char *in, int len,
>  			  struct strbuf *out, const char *prefix)
>  {
>  	struct strbuf sb = STRBUF_INIT;
> -	const char *rel = path_relative(in, len, &sb, prefix, -1);
> +	const char *rel = relative_path(in, prefix, &sb);
>  	strbuf_reset(out);
>  	quote_c_style_counted(rel, strlen(rel), out, NULL, 0);
>  	strbuf_release(&sb);
Previous: Jiang XinNext: Jiang Xin
Message 11 of 33 in “t0060: skip a few relative_path tests on Windows”
  1. t0060: skip a few relative_path tests on WindowsJohannes Sixt, Jun 13, 2013
  2. Jiang XinJun 13, 2013
  3. 00/16 Interactive git-cleanJiang Xin, Jun 24, 2013
  4. 01/16 test: add test cases for relative_pathJiang Xin, Jun 24, 2013
  5. Junio C HamanoJun 24, 2013
  6. Jiang XinJun 25, 2013
  7. Junio C HamanoJun 25, 2013
  8. Jiang XinJun 25, 2013
  9. 02/16 path.c: refactor relative_path(), not only strip prefixJiang Xin, Jun 24, 2013
  10. 03/16 quote.c: remove path_relative, use relative_path insteadJiang Xin, Jun 24, 2013
  11. Junio C HamanoJun 24, 2013
  12. Jiang XinJun 25, 2013
  13. Junio C HamanoJun 25, 2013
  14. 04/16 Refactor quote_path_relative, remove unused paramsJiang Xin, Jun 24, 2013
  15. Junio C HamanoJun 24, 2013
  16. Jiang XinJun 25, 2013
  17. 05/16 Refactor write_name_quoted_relative, remove unused paramsJiang Xin, Jun 24, 2013
  18. Junio C HamanoJun 24, 2013
  19. Jiang XinJun 25, 2013
  20. 06/16 git-clean: refactor git-clean into two phasesJiang Xin, Jun 24, 2013
  21. Junio C HamanoJun 24, 2013
  22. 07/16 git-clean: add support for -i/--interactiveJiang Xin, Jun 24, 2013
  23. 08/16 git-clean: show items of del_list in columnsJiang Xin, Jun 24, 2013
  24. 09/16 git-clean: add colors to interactive git-cleanJiang Xin, Jun 24, 2013
  25. 10/16 git-clean: use a git-add-interactive compatible UIJiang Xin, Jun 24, 2013
  26. 11/16 git-clean: add filter by pattern interactive actionJiang Xin, Jun 24, 2013
  27. 12/16 git-clean: add select by numbers interactive actionJiang Xin, Jun 24, 2013
  28. 13/16 git-clean: add ask each interactive actionJiang Xin, Jun 24, 2013
  29. 14/16 git-clean: add documentation for interactive git-cleanJiang Xin, Jun 24, 2013
  30. 15/16 test: add t7301 for git-clean--interactiveJiang Xin, Jun 24, 2013
  31. 16/16 test: run testcases with POSIX absolute paths on WindowsJiang Xin, Jun 24, 2013
  32. Johannes SixtJun 24, 2013
  33. Jiang XinJun 25, 2013

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.