Subject: Re: [PATCH] merge-file: correctly find files when called in subdir

From: Jonathan Nieder <[email-masked]>
Date: Sat, 16 Oct 2010 20:11:11 -0500

Bert Wesarg wrote:
> On Sat, Oct 16, 2010 at 13:33, Thomas Rast <[email-masked]> wrote:

>> --- a/builtin/merge-file.c
>> +++ b/builtin/merge-file.c
>> @@ -65,10 +66,18 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
[...]
>> +               if (prefix)
>> +                       name = prefix_filename(prefix, prefixlen, argv[i]);
>> +               else
>> +                       name = argv[i];
>
> I think you can safe this condition, if you set prefixlen to 0.

I'm not so sure.  On Windows, prefix_filename() starts with

	char *p;
	/* don't add prefix to absolute paths, but still replace '\' by '/' */
	if (is_absolute_path(arg))
		pfx_len = 0;
	else
		memcpy(path, pfx, pfx_len);

and memcpy() has undefined behavior when pfx is NULL (even with
pfx_len of 0; see WG14/N1256: 7.21.1 "String function conventions").
Even if the win32api memcpy does the right thing with NULL pfx, I
cannot trust GCC when they are given that kind of license. :)