NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

standards/39422: missing guards for wcslcat(), wcslcpy(), wcswidth() & wcwidth()



>Number:         39422
>Category:       standards
>Synopsis:       missing guards for wcslcat(), wcslcpy(), wcswidth() & wcwidth()
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    standards-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu Aug 28 10:00:01 +0000 2008
>Originator:     kretschm%cs.uni-bonn.de@localhost
>Release:        NetBSD 4.0
>Organization:
>Environment:
        
        
System: NetBSD tiger 4.0 NetBSD 4.0 (GENERIC) #1: Thu Dec 27 15:39:36 CET 2007 
ignatios%random85.cs.uni-bonn.de@localhost:/var/itch/sources/4.0/oi/sys/arch/i386/compile/GENERIC
 i386
Architecture: i386
Machine: i386
>Description:
If _ISOC99_SOURCE macro is defined the definition of wcslcpy(),
wcslcat(), wcswidth() and wcwidth() is visible.  Thus it is unhandy
to use such definitions for basic portability checks.

More appropriate would be a behaviour that is given by other include
files where _NETBSD_SOURCE or the corresponding _POSIX_C_SOURCE macro
definitions have to be given to include wcslcpy()/wcslcat() resp.
wcswidth()/wcwidth().

The included fix should correct this.
>How-To-Repeat:
The following code should compile fine, but doesn't because wcslcpy()'s
definition is visible.

#define _ISOC99_SOURCE
#include <wchar.h>

static
void
wcslcpy(void)
{
    /* foo */
}
        
>Fix:
--- wchar.h.orig        2008-08-28 10:16:03.000000000 +0200
+++ wchar.h     2008-08-28 10:22:44.000000000 +0200
@@ -132,11 +132,15 @@
 wchar_t        *wmemmove(wchar_t *, const wchar_t *, size_t);
 wchar_t        *wmemset(wchar_t *, wchar_t, size_t);
 
+#if defined(_NETBSD_SOURCE)
 size_t wcslcat(wchar_t *, const wchar_t *, size_t);
 size_t wcslcpy(wchar_t *, const wchar_t *, size_t);
+#endif
+#if defined(_NETBSD_SOURCE) || (_POSIX_C_SOURCE - 0 >= 200112L)
 int    wcswidth(const wchar_t *, size_t);
-int    wctob(wint_t);
 int    wcwidth(wchar_t);
+#endif
+int    wctob(wint_t);
 
 unsigned long int wcstoul(const wchar_t * __restrict,
        wchar_t ** __restrict, int);

>Unformatted:
        
        


Home | Main Index | Thread Index | Old Index