Re: Small patch to enable build of gdb-7.6 for GNU/Hurd

Pedro Alves
2013-05-24T08:53:22Z

On 05/24/2013 05:27 AM, Joel Brobecker wrote:
> On Thu, May 23, 2013 at 11:59:46PM -0300, Sergio Durigan Junior wrote:
>> Thanks for your patch, Svante.
>>
>> On Thursday, May 23 2013, Svante Signell wrote:
>>
>>> --- a/gdb/nto-tdep.c 2013-05-23 14:28:24.000000000 +0000
>>> +++ b/gdb/nto-tdep.c 2013-05-23 15:01:24.000000000 +0000
>>> @@ -147,9 +147,11 @@ nto_find_and_open_solib (char *solib, un
>>> void
>>> nto_init_solib_absolute_prefix (void)
>>> {
>>> - char buf[PATH_MAX * 2], arch_path[PATH_MAX];
>>> + char *buf, *arch_path;
>>> char *nto_root, *endian;
>>> const char *arch;
>>> + int arch_len, len;
>>> +#define FMT "set solib-absolute-prefix %s"
>>>
>>> nto_root = nto_target ();
>>> if (strcmp (gdbarch_bfd_arch_info (target_gdbarch ())->arch_name, "i386") == 0)
>>> @@ -172,9 +174,13 @@ nto_init_solib_absolute_prefix (void)
>>> == BFD_ENDIAN_BIG ? "be" : "le";
>>> }
>>>
>>> - xsnprintf (arch_path, sizeof (arch_path), "%s/%s%s", nto_root, arch, endian);
>>> + arch_len = strlen (nto_root) + 1 + strlen (arch) + strlen (endian) + 1;
>>> + arch_path = alloca (arch_len);
>>> + xsnprintf (arch_path, arch_len, "%s/%s%s", nto_root, arch, endian);
>>>
>>> - xsnprintf (buf, sizeof (buf), "set solib-absolute-prefix %s", arch_path);
>>> + len = strlen (FMT) - 2 + strlen (arch_path) + 1;
>>> + buf = alloca (len);
>>> + xsnprintf (buf, len, FMT, arch_path);
>>
>> When I define things in the middle of functions/code, I usually #undef
>> them just after I finished using, to avoid conflicts with others
>> #defines. Specially when the #define is called "FMT", which is very
>> generic IMO.
>
> Agreed.
>
> And quite honestly, I find this use of a macro in the middle of
> a function quite ugly and unnecessary, no matter what was done
> before. My preference mirrors Tom's suggestion, but failing that,
> I'd rather FMT be a const char * or a const char [].

Agreed.

const char fmt[] = "..." is better than 'const char *', as the
latter gives you an unnecessary extra pointer.

Make that 'static const char fmt[] = "...";' even.

But really alloca for potentially large/unbounded buffers is evil.
xstrprintf plus a cleanup would definitely be my preference.

--
Pedro Alves