On Tue, May 22, 2012 at 10:33 PM, Janne Blomqvist
<blomqvist.ja...@gmail.com> wrote:
> On Tue, May 22, 2012 at 5:57 PM, Tobias Burnus <bur...@net-b.de> wrote:
>> On 05/22/2012 03:06 PM, Tobias Burnus wrote:
>>>
>>> The attached patches fix compilation issues on VxWorks.
>>>
>>> a) VxWorks has strerror_r but contrary to POSIX, the function in VxWorks
>>> (at least in older versions) takes only two arguments: errnum and buf and
>>> not also the buffer length. I added a configure check for that variant.
>>
>>
>> I forgot to attach that patch. Now with patch and automake 1.11.1 for the
>> generated files.
>>
>> Tobias
>
> For the a) patch (strerror_r): The configure.ac diff occurs twice in
> the patch, and the patch file has DOS line endings. Also, based on
> some googling the vxworks 2-arg strerror_r returns OK or ERROR (an
> enum, I presume). So the trick with builtin_choose_expr is both wrong
> and unnecessary. Thus I'd replace
>
> +#elif defined(HAVE_STRERROR_R_2ARGS)
> +  return
> +    __builtin_choose_expr (__builtin_classify_type (strerror_r (0, buf))
> +                          == 5,
> +                          /* char*-returning strerror_r()  */
> +                          strerror_r (errnum, buf),
> +                          /* int-returning strerror_r ()  */
> +                          (strerror_r (errnum, buf), buf));
>
> with
>
> #elif defined(HAVE_STRERROR_R_2ARGS)
> if (strerror_r (errnum, buf) == OK)
>  return buf;
> return NULL;

Googling some more, it seems the vxworks STATUS is just a typedef for
int, so I guess the original patch works. Also the error checking is
not useful here, so we could do just

#elif defined(HAVE_STRERROR_R_2ARGS)
strerror_r (errnum, buf);
return buf;

-- 
Janne Blomqvist

Reply via email to