On Fri, Jul 08, 2011 at 03:01:45AM +0100, Nicholas Marriott wrote:
> Index: wcsdup.3
> ===================================================================
> RCS file: /cvs/src/lib/libc/string/wcsdup.3,v
> retrieving revision 1.2
> diff -u -p -r1.2 wcsdup.3
> --- wcsdup.3  5 Jul 2011 19:01:31 -0000       1.2
> +++ wcsdup.3  8 Jul 2011 02:01:22 -0000
> @@ -61,9 +61,14 @@ The following will point
>  to an allocated area of memory containing the nul-terminated string
>  .Qq foobar :
>  .Bd -literal -offset indent
> -wchar_t *p;
> +const char   *o = "foobar";
> +wchar_t              *p, b[32];
>  
> -if ((p = wcsdup(L"foobar")) == NULL) {
> +if (mbstowcs(b, o, sizeof(b)) == (size_t)-1) {
> +     fprintf(stderr, "Failed to convert string.\en");

s#\en#\n# in above line.

I suppose wcsdup() relies on the string to be NUL-terminated?
If the return value of mbstowcs() equals sizeof(b) the string in b
is not NUL-terminated. We should probably add an example to the
mbstowcs() man page as well to make this abundantly clear.

In real code I'd probably use something like perror() or strerror() but
that's not what this page is about so I'm fine with fprintf(stderr, ...)

> +     exit(1);
> +}
> +if ((p = wcsdup(b)) == NULL) {
>       fprintf(stderr, "Out of memory.\en");
>       exit(1);
>  }

Reply via email to