Hi Paul,
> Thanks for reporting that. I installed into Gnulib the attached
> somewhat-more-elaborate patch, which should fix the problem.
The change in lib/canonicalize-lgpl.c line 288 (after the 'malloca'
call) looks like a mistake to me. malloca() is not specified to
set errno upon failure (see lib/malloca.h line 53) and in fact
does not set errno upon failure through integer-overflow (see
lib/malloca.c line 103). The hunk
@@ -278,7 +285,7 @@ __realpath (const char *name, char *resolved)
buf = malloca (path_max);
if (!buf)
{
- errno = ENOMEM;
+ alloc_failed ();
goto error;
}
has thus removed the 'errno = ENOMEM;' statement on Unix platforms.
I think the correction should be to put back the errno = ENOMEM;
statement (in __set_errno disguise, if you prefer that).
Bruno