Hi,

Fair enough. This is the response I got from UK Customer Support. The
MAXERRSTR_SIZE might have been available in previous versions of
VxWorks, I don't know, but it's not anymore. I think the comment should
be updated to at least reflect why a 256 byte buffer should be used, but
that's just my opinion. I just thought I'd let you guys know.


----- quote -----
Hi Jeroen,
I will be assisting on this question.
You don't say what OS/ compiler version you are using so I will show the
method as well as the answer....

Looking at vxWorks 6.9.3 the code for strerror_r (kernel version) is
located in target/src/libc/strerror.c

There we also see the descriptive comment block:
* strerror_r - map an error number to an error string 
*
* This routine maps the error number in <errcode> to an error message
string.
* It stores the error string in <buffer>.  The size of <buffer> should
be 
* NAME_MAX + 1 - using a smaller buffer may lead to stack corruption.
NAME_MAX 
* is defined in limits.h.
*
And some further searching shows
#define NAME_MAX        _PARM_NAME_MAX  /* max filename length excluding
EOS */
#define _PARM_NAME_MAX      255


Therefore the maximum length will be 256.

It is also possible to get this by  examining the code:
STATUS strerror_r 
    (
    int    errcode,     /* error code */
    char * buffer       /* string buffer */
    )
    {
    char * str;

    if (buffer == NULL)
        return (ERROR);

    str = strerrorIf (errcode);

    if (str != NULL)
        strlcpy (buffer, str, (size_t) NAME_MAX + 1);
    else
        snprintf (buffer, (size_t) NAME_MAX + 1, "errno = %#x",
errcode);

    return (OK);
    }
Where we clearly see the NAME_MAX+1 restriction on the strlcpy and
snprintf lines.

You should be able to apply the same techniques to whatever version you
have presuming you have source code.  If you don't  I can look if you
tell me the precise OS version & whether this is for kernel or RTP.


Please reply to say if this answer your question.
Best regards,
Robert Varley
----- /quote -----

Best regards,
Jeroen Koekkoek


On Sat, 2014-04-05 at 22:37 +0200, Daniel Stenberg wrote:
> On Sat, 5 Apr 2014, Jeroen Koekkoek wrote:
> 
> > In your strerror function in cURL there is a quote that states the buffer 
> > should be 150 bytes on VxWorks, this quote is incorrect. A buffer of 256 is 
> > used, which is correct. You might want to update the quote. Please see 
> > http://stackoverflow.com/questions/22856387/maximum-size-of-message-for-strerror-r-on-vxworks
> >  
> > for details.
> 
> You referring to your own question and your own answer on stackoverflow is 
> not 
> a reliable source. This change was brought by a person who built and used 
> libcurl on vxworks back in 2009.
> 
> Also, please use the curl-library mailing list for libcurl discussions.
> 
> -- 
> 
>   / daniel.haxx.se


-------------------------------------------------------------------
List admin: http://cool.haxx.se/list/listinfo/curl-library
Etiquette:  http://curl.haxx.se/mail/etiquette.html

Reply via email to