Mercurial > hg > octave-lojdl > gnulib-hg
view doc/functions.texi @ 7376:5b76a3b030e7
.
author | Karl Berry <karl@freefriends.org> |
---|---|
date | Wed, 27 Sep 2006 07:37:50 +0000 |
parents | adb21c293305 |
children | 4b064cbfe0de |
line wrap: on
line source
@node Function Portability @section Portability of Standard Functions @cindex functions @c Copyright (C) 2006 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.2 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, with no Front-Cover Texts, and with no Back-Cover @c Texts. A copy of the license is included in the ``GNU Free @c Documentation License'' file as part of this distribution. Many standard library functions have portability limitations, although they are specified in the @uref{http://www.opengroup.org/susv3, Posix standard}. In this section, we mention only functions that behave differently than specified; we don't mention functions that are not implemented at all on some platforms, or that are implemented but not declared on some platforms. Many of the portability problems have a solution in @ref{Gnulib}. @table @code @item a64l This function was not correctly implemented in glibc versions before 2.2.5. @item accept Some systems don't have a @code{socklen_t} type; in this case this function's third argument type is @samp{int *}. @item asctime This function may overflow its internal buffer if an invalid year is passed. @item asctime_r This function may put more than 26 bytes into the argument buffer if an invalid year is passed. @item basename glibc has two different functions @code{basename}: the POSIX version and the GNU version. @code{basename} assumes file names in POSIX syntax; it does not work with file names in Windows syntax. @item bcmp This function is marked as ``legacy'' in POSIX. Better use @code{memcmp} instead. @item bcopy This function is marked as ``legacy'' in POSIX. Better use @code{memcpy} or @code{memmove} instead. @item btowc On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item bzero This function is marked as ``legacy'' in POSIX. Better use @code{memset} instead. @item chown When applied to a symbolic link, some implementations don't dereference the symlink, i.e.@: they behave like @code{lchown}. @item cproj @itemx cprojf @itemx cprojl The glibc implementation is or was broken. @item creat On Windows, this function returns a file handle in @code{O_TEXT} mode. If you need a file handle in @code{O_BINARY} mode, you need to use the function @code{open} instead. On platforms where @code{off_t} is a 32-bit type, @code{creat} may not work correctly to create files larger than 2 GB. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @item ctime This function may overflow its internal buffer if an invalid year is passed. @item ctime_r This function may put more than 26 bytes into the argument buffer if an invalid year is passed. @item dirname @code{dirname} assumes file names in POSIX syntax; it does not work with file names in Windows syntax. @item dlopen If the file name argument is not absolute, the file is searched for. The search algorithm is system specific. @item dlsym The visibility of symbols loaded in dependent shared libraries or present in the main executable is system dependent. @item ecvt This function is marked as ``legacy'' in POSIX. Better use @code{sprintf} instead. @item errno On Windows, the socket functions don't set @code{errno}; their error code is available through @code{WSAGetLastError()} instead. @item fclose On Windows systems (excluding Cygwin), this function does not set @code{errno} upon failure. @item fcvt This function is marked as ``legacy'' in POSIX. Better use @code{sprintf} instead. @item fdopen @itemx fflush On Windows systems (excluding Cygwin), these functions do not set @code{errno} upon failure. @item fgetc @itemx fgets On Windows systems (excluding Cygwin), these functions do not set @code{errno} upon failure. @item fgetwc @itemx fgetws On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item fnmatch This function is broken in some version of Solaris or glibc. @item fopen On Windows systems (excluding Cygwin), this function does not set @code{errno} upon failure. On Windows, this function returns a file stream in ``text'' mode by default; this means that it translates @code{'\n'} to CR/LF by default. Use the @code{"b"} flag if you need reliable binary I/O. @item fork On some systems, @code{fork} followed by a call of the @code{exec} family (@code{execl}, @code{execlp}, @code{execle}, @code{execv}, @code{execvp}, or @code{execve}) is less efficient than @code{vfork} followed by the same call. @code{vfork} is a variant of @code{fork} that has been introduced to optimize the @code{fork}/@code{exec} pattern. On Windows systems (excluding Cygwin), this function is not implemented; use @code{spawnvp} instead. @item fprintf On NetBSD and Windows, this function doesn't support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}. The fix is to include @file{<libintl.h>} from GNU gettext; it redefines this function so that it is POSIX compliant. On Windows, this function doesn't support the @code{'} flag and the @code{hh}, @code{ll}, @code{j}, @code{t}, @code{z} size specifiers. @item fputc @itemx fputs On Windows systems (excluding Cygwin), these functions do not set @code{errno} upon failure. @item fputwc @itemx fputws On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item fread On Windows systems (excluding Cygwin), this function does not set @code{errno} upon failure. @item free On old systems, @code{free (NULL)} is not allowed. @item freopen On Windows systems (excluding Cygwin), this function does not set @code{errno} upon failure. @item fscanf On Windows systems (excluding Cygwin), this function does not set @code{errno} upon failure. On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j}, @code{t}, @code{z} size specifiers. @item fseek On Windows systems (excluding Cygwin), this function does not set @code{errno} upon failure. @item fstat On platforms where @code{off_t} is a 32-bit type, @code{stat} may not correctly report the size of files or block devices larger than 2 GB. The fix is to use the @code{AC_SYS_LARGEFILE} macro. On Cygwin, @code{fstat} applied to the file descriptors 0 and 1, returns different @code{st_ino} values, even if standard input and standard output are not redirected and refer to the same terminal. @item ftime This function is marked as ``legacy'' in POSIX. Better use @code{gettimeofday} or @code{clock_gettime} instead, and use @code{ftime} only as a fallback for portability to Windows systems. @item fwide On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @code{fwide} is not guaranteed to be able to change a file stream's mode to a different mode than the current one. @item fwprintf On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item fwrite On Windows systems (excluding Cygwin), this function does not set @code{errno} upon failure. @item fwscanf On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item gcvt This function is marked as ``legacy'' in POSIX. Better use @code{sprintf} instead. @item getaddrinfo On Windows, this function is declared in @code{<ws2tcpip.h>} rather than in @code{<netdb.h>}. @item getc @itemx getchar On Windows systems (excluding Cygwin), these functions do not set @code{errno} upon failure. @item getcwd On glibc systems, @code{getcwd (NULL, n)} allocates memory for the result. On other systems, this call is not allowed. @item getgroups On Ultrix 4.3, @code{getgroups (0, 0)} always fails. See macro @samp{AC_FUNC_GETGROUPS}. @item gethostname If the given buffer is too small for the host name, some implementations fail with @code{EINVAL}, instead of returning a truncated host name. @item getopt The default behavior of the glibc implementation of @code{getopt} allows mixing option and non-option arguments on the command line in any order. Other implementations, such as the one in Cygwin, enforce strict POSIX compliance: they require that the option arguments precede the non-option arguments. This is something to watch out in your program's testsuite. @item getpeername Some systems don't have a @code{socklen_t} type; in this case this function's third argument type is @samp{int *}. @item getrusage Many systems don't fill in all the fields of @code{struct rusage} with meaningful values. @item gets This function should never be used, because it can overflow any given buffer. On Windows systems (excluding Cygwin), this function does not set @code{errno} upon failure. @item getsockname Some systems don't have a @code{socklen_t} type; in this case this function's third argument type is @samp{int *}. @item getsockopt Some systems don't have a @code{socklen_t} type; in this case this function's fifth argument type is @samp{int *}. Many socket options are not available on all systems. BeOS has the @code{setsockopt} function, but not the @code{getsockopt} function. @item gettimeofday On some systems, @code{gettimeofday} clobbers the buffer in which @code{localtime} returns its result. @item getwc @itemx getwchar On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item getwd The size of the buffer required for this function is not a compile-time constant. Also, the function truncates a result that would be larger than the minimum buffer size. For these reasons, this function is marked as ``legacy'' in POSIX. Better use the @code{getcwd} function instead. @item glob Some systems may store additional flags in the @code{gl_flags} field. @item gmtime_r Some systems define a function of this name that is incompatible to POSIX. @item iconv This function was not correctly implemented in glibc versions before 2.2. When @code{iconv} encounters an input character that is valid but that can not be converted to the output character set, glibc's and GNU libiconv's @code{iconv} stop the conversion. Some other implementations put an implementation-defined character into the output buffer. @item iconv_open The set of supported encodings and conversions is system dependent. @item index This function is marked as ``legacy'' in POSIX. Better use @code{strchr} instead. @item inet_addr On some old systems, this function returns a @samp{struct in_addr} rather than a scalar type such as @samp{unsigned int} or @samp{unsigned long}. @item ioctl Most @code{ioctl} requests are platform and hardware specific. @item isatty On Windows, @code{isatty} also returns true for character devices such as @file{NUL}. @item iswalnum @itemx iswalpha @itemx iswblank @itemx iswcntrl @itemx iswctype @itemx iswdigit @itemx iswgraph @itemx iswlower @itemx iswprint @itemx iswpunct @itemx iswspace @itemx iswupper @itemx iswxdigit On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item l64a This function was not correctly implemented in glibc versions before 2.2.5. @item localtime_r Some systems define a function of this name that is incompatible to POSIX. @item longjmp The effects of this call are system and compiler optimization dependent, since it restores the contents of register-allocated variables but not the contents of stack-allocated variables. When longjumping out of a signal handler that was being executed on an alternate stack (installed through @code{sigaltstack}), on FreeBSD, NetBSD, OpenBSD, you need to clear the @code{SS_ONSTACK} flag in the @code{stack_t} structure managed by the kernel. @item lseek POSIX does not specify which file descriptors support seeking and which don't. In practice, regular files and block devices support seeking, and ttys, pipes, and most character devices don't support it. On platforms where @code{off_t} is a 32-bit type, @code{lseek} does not work correctly with files larger than 2 GB. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @item lstat When the argument ends in a slash, some systems don't dereference the argument. On platforms where @code{off_t} is a 32-bit type, @code{lstat} may not correctly report the size of files or block devices larger than 2 GB. The fix is to use the @code{AC_SYS_LARGEFILE} macro. On Windows systems (excluding Cygwin), symlinks are not supported, so @code{lstat} does not exist. The fix is to define lstat to use stat. @item mbrtowc @itemx mbsrtowcs @itemx mbstowcs @itemx mbtowc On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item mkdir When the argument ends in a slash, the function call fails on some systems. On Windows systems (excluding Cygwin), this function is called @code{_mkdir} and takes only one argument. The fix is to define a macro like this: @smallexample #define mkdir ((int (*)()) _mkdir) @end smallexample or @smallexample #define mkdir(path,mode) _mkdir (path) @end smallexample @item mkstemp On some systems (HP-UX 10.20, SunOS 4.1.4, Solaris 2.5.1), mkstemp has a silly limit that it can create no more than 26 files from a given template. On OSF/1 4.0f, it can create only 32 files per process. On systems other than glibc 2.0.7 or newer, @code{mkstemp} can create a world or group writable or readable file, if you haven't set the process umask to 077. This is a security risk. @item mktemp This function is not appropriate for creating temporary files. (It has security risks.) Therefore it is marked as ``legacy'' in POSIX. Better use @code{mkstemp} instead. @item mktime Some implementations of @code{mktime} may go into an endless loop. @item mmap To get anonymous memory, on some systems, you can use the flags @code{MAP_ANONYMOUS | MAP_PRIVATE} and @code{-1} instead of a file descriptor; on others you have to use a read-only file descriptor of @file{/dev/zero}. On HP-UX, passing a non-NULL first argument, as a hint for the address (even without @code{MAP_FIXED}, often causes @code{mmap} to fail. Better pass NULL in this case. On HP-UX, @code{MAP_FIXED} basically never works. On other systems, it depends on the circumstances whether memory can be returned at a given address. @item mprotect On AIX, it is not possible to use @code{mprotect} on memory regions allocated with @code{malloc}. @item msync On NetBSD, @code{msync} takes only two arguments. @item nanosleep @item nice In glibc before glibc 2.2.4, @code{nice} returned 0 upon success. @item nl_langinfo Some older versions of glibc had @code{nl_langinfo} but not the @code{CODESET} macro. On Cygwin, which doesn't have locales, @code{nl_langinfo(CODESET)} always returns @code{"US-ASCII"}. @item open On Windows, this function returns a file handle in @code{O_TEXT} mode by default; this means that it translates '\n' to CR/LF by default. Use the @code{O_BINARY} flag if you need reliable binary I/O. On platforms where @code{off_t} is a 32-bit type, @code{open} may not work correctly with files larger than 2 GB. The fix is to use the @code{AC_SYS_LARGEFILE} macro. @item poll On MacOS X 10.4.0 and AIX 5.3, this function doesn't work on special files like @file{/dev/null} and ttys like @file{/dev/tty}. @item printf On NetBSD and Windows, this function doesn't support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}. The fix is to include @file{<libintl.h>} from GNU gettext; it redefines this function so that it is POSIX compliant. On Windows, this function doesn't support the @code{'} flag and the @code{hh}, @code{ll}, @code{j}, @code{t}, @code{z} size specifiers. @item pthread_create On Linux/glibc systems before the advent of NPTL, signals could only be sent to one particular thread. In POSIX, signals are sent to the entire process and executed by any thread of the process that happens to have the particular signal currently unblocked. @item putc @itemx putchar @itemx puts On Windows systems (excluding Cygwin), these functions do not set @code{errno} upon failure. @item putwc @itemx putwchar On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item readlink When @code{readlink} is called on a directory: In the case of NFS mounted directories, Cygwin sets @code{errno} to @code{ENOENT} or @code{EIO} instead of @code{EINVAL}. To avoid this problem, check for a directory before calling @code{readlink}. When @code{readlink} is called on a file that is not a symbolic link: Irix may set @code{errno} to @code{ENXIO} instead of @code{EINVAL}. Cygwin may set errno to @code{EACCES} instead of {EINVAL}. @item realpath This function does not allow to determine the required size of output buffer; PATH_MAX --- if it is defined --- is nothing more than a guess. @item recvfrom Some systems don't have a @code{socklen_t} type; in this case this function's sixth argument type is @samp{int *}. @item regcomp @itemx regexec Many regular expression implementations have bugs. @item rename This function does not work on SunOS 4.1 when the source file name ends in a slash. @item rewind On Windows systems (excluding Cygwin), this function does not set @code{errno} upon failure. @item rindex This function is marked as ``legacy'' in POSIX. Better use @code{strrchr} instead. @item rmdir When @code{rmdir} fails because the specified directory is not empty, the @code{errno} value is system dependent. @item scanf On Windows systems (excluding Cygwin), this function does not set @code{errno} upon failure. On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j}, @code{t}, @code{z} size specifiers. @item select When you call @code{select} with a timeout, some implementations modify the timeout parameter so that upon return from the function, it contains the amount of time not slept. Other implementations leave the timeout parameter unmodified. On Windows systems (excluding Cygwin) and on BeOS, @code{select} can only be called on descriptors created by the @code{socket} function, not on regular file descriptors. On Linux, when some file descriptor refers to a regular file, @code{select} may fail, setting @code{errno} to @code{EBADF}. @item setcontext The effects of this call are system and compiler optimization dependent, since it restores the contents of register-allocated variables but not the contents of stack-allocated variables. @item setenv In some versions of glibc (e.g.@: 2.3.3), @code{setenv} doesn't fail if the first argument contains a @samp{=} character. @item setjmp POSIX does not specify whether @code{setjmp} saves the signal mask in the @code{jmp_buf}. It does on BSD systems, and on glibc systems when @code{_BSD_SOURCE} is defined; in this case @code{setjmp} behaves like @code{sigsetjmp}, and functions @code{_setjmp} and @code{_longjmp} are available that don't save or restore the signal mask. On System V systems, and on glibc systems by default, @code{setjmp} doesn't save the signal mask. @item setlocale On Cygwin, which doesn't have locales, @code{setlocale(LC_ALL,NULL)} always returns @code{"C"}. @item setsockopt Many socket options are not available on all systems. @item setvbuf On Windows systems (excluding Cygwin), this function does not set @code{errno} upon failure. @item shmat Attempts to @code{shmat} into a previously malloc-ed region fail on SunOS 4, with @code{errno} set to @code{EINVAL}, even if there is an @code{munmap} call in between. On Linux, the flag @code{SHM_REMAP} is needed in order to force @code{shmat} to replace existing memory mappings in the specify address range. On other systems, it is not needed. @item shmget On many systems (not Linux), SHMMAX is so small that it is unusable for reasonable applications, and/or @code{shmget} requires superuser privileges. @item sigaction The symbolic value @code{SIG_IGN} for the @code{SIGCHLD} signal is equivalent to a signal handler @smallexample void handle_child (int sigchld) @{ while (waitpid (-1, NULL, WNOHANG) > 0) ; @} @end smallexample except that @code{SIG_IGN} for @code{SIGCHLD} has the effect that the children execution times are not accounted in the @code{times} function. On some systems (BSD? SystemV? Linux?), you need to use the @code{sigaction} flag @code{SA_NOCLDWAIT} in order to obtain this behavior. @item sigaltstack @code{sigaltstack} doesn't work on HP-UX 11/IA-64 and OpenBSD 3.6/Sparc64. @item signal On System V systems, when the signal is triggered, the kernel uninstalls the handler (i.e.@: resets the signal's action to SIG_DFL) before invoking the handler. This opens the door to race conditions: undesired things happen if the signal is triggered twice and the signal handler was not quick enough reinstalling itself as a handler. On BSD systems and glibc systems, on the other hand, when the signal is triggered, the kernel blocks the signal before invoking the handler. This is saner, but POSIX still allows either behavior. To avoid this problem, use @code{sigaction} instead of @code{signal}. @item sigtimedwait Linux implements the meaning of NULL timeout by doing what @code{sigwaitinfo} does; other systems may not do the same. @item sigwait On Linux/glibc systems before the advent of NPTL, signals could only be sent to one particular thread. In POSIX, signals are sent to the entire process and executed by any thread of the process that happens to have the particular signal currently unblocked. @item sleep According to POSIX, the @code{sleep} function may interfere with the program's use of the @code{SIGALRM} signal. On Linux, it doesn't; on other platforms, it may. @item snprintf On NetBSD and Windows, this function doesn't support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}. The fix is to include @file{<libintl.h>} from GNU gettext; it redefines this function so that it is POSIX compliant. On Windows, this function doesn't support the @code{'} flag and the @code{hh}, @code{ll}, @code{j}, @code{t}, @code{z} size specifiers. @item socket On BeOS, the descriptors returned by the @code{socket} function can not be used in calls to @code{read}, @code{write}, and @code{close}; you have to use @code{recv}, @code{send}, @code{closesocket} in these cases instead. @item sprintf On NetBSD and Windows, this function doesn't support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}. The fix is to include @file{<libintl.h>} from GNU gettext; it redefines this function so that it is POSIX compliant. On Windows, this function doesn't support the @code{'} flag and the @code{hh}, @code{ll}, @code{j}, @code{t}, @code{z} size specifiers. @item sscanf On Windows systems (excluding Cygwin), this function does not set @code{errno} upon failure. On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j}, @code{t}, @code{z} size specifiers. @item stat On platforms where @code{off_t} is a 32-bit type, @code{stat} may not correctly report the size of files or block devices larger than 2 GB. The fix is to use the @code{AC_SYS_LARGEFILE} macro. Cygwin's @code{stat} function sometimes sets @code{errno} to @code{EACCES} when @code{ENOENT} would be more appropriate. @item strcasecmp @itemx strcasestr As of 2006, no system is known that implements these functions correctly in multibyte locales. @item strerror_r glibc has an incompatible version of this function. The POSIX compliant code @smallexample char *s = (strerror_r (err, buf, buflen) == 0 ? buf : NULL); @end smallexample is essentially equivalent to this code using the glibc function: @smallexample char *s = strerror_r (err, buf, buflen); @end smallexample @item strstr As of 2006, no system is known that implements this function correctly in multibyte locales. @item swprintf On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. On Windows, this function does not take a buffer size as second argument. @item system On Windows systems (excluding Cygwin), the command processor used by the @code{system} function is @file{cmd.exe}, not @file{/bin/sh}. Accordingly, the rules for quoting shell arguments containing spaces, quote or other special characters are different. @item tcdrain On some systems, @code{tcdrain} on a non-tty fails with @code{errno} set to @code{EINVAL} or, on MacOS X, also @code{EOPNOTSUPP} or @code{ENODEV}, rather than @code{ENOTTY}. @item tcflush On some systems, @code{tcflush} of @code{TCIFLUSH} on a non-tty fails with errno set to @code{EINVAL} rather than @code{ENOTTY}. On some systems, @code{tcflush} of @code{TCOFLUSH} on a non-tty fails with errno set to @code{EINVAL} or, on IRIX, also @code{ENOSYS}, or, on MacOS X, also @code{EOPNOTSUPP} or @code{ENODEV}, rather than @code{ENOTTY}. @item tempnam This function is not appropriate for creating temporary files. (It has security risks.) Better use @code{mkstemp} instead. @item tmpnam This function is not appropriate for creating temporary files. (It has security risks.) Better use @code{mkstemp} instead. @item towctrans @itemx towlower @itemx towupper On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item ungetc On Windows systems (excluding Cygwin), this function does not set @code{errno} upon failure. @item ungetwc On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item unlink Removing an open file is non-portable: On Unix this allows the programs that have the file already open to continue working with it; the file's storage is only freed when the no process has the file open any more. On Windows, the attempt to remove an open file fails. @item usleep According to POSIX, the @code{usleep} function may interfere with the program's use of the @code{SIGALRM} signal. On Linux, it doesn't; on other platforms, it may. @item utime On some systems, @code{utime (file, NULL)} fails to set the file's timestamp to the current time. @item utimes This function is marked as ``legacy'' in POSIX. Better use @code{utime} instead. @item va_arg The second argument of @code{va_arg} must be a type that is invariant under the ``default argument promotions'' (ISO C 99 6.5.2.2 paragraph 6). This means that the following are not valid here: @table @asis @item @samp{float} Use @samp{double} instead. @item @samp{bool} Use @samp{int} instead. @item Integer types smaller than @samp{int}. Use @samp{int} or @samp{unsigned int} instead. @end table This is a portability problem because you don't know the width of some abstract types like @code{uid_t}, @code{gid_t}, @code{mode_t}. So, instead of @smallexample mode = va_arg (ap, mode_t); @end smallexample you have to write @smallexample mode = (sizeof (mode_t) < sizeof (int) ? va_arg (ap, int) : va_arg (ap, mode_t)); @end smallexample @item va_copy Some platforms don't provide this macro. You can use __va_copy where available instead, or otherwise an assignment or @code{memcpy} call. @item vfprintf On NetBSD and Windows, this function doesn't support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}. The fix is to include @file{<libintl.h>} from GNU gettext; it redefines this function so that it is POSIX compliant. On Windows, this function doesn't support the @code{'} flag and the @code{hh}, @code{ll}, @code{j}, @code{t}, @code{z} size specifiers. @item vfscanf On Windows systems (excluding Cygwin), this function does not set @code{errno} upon failure. On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j}, @code{t}, @code{z} size specifiers. @item vprintf @itemx vsnprintf @itemx vsprintf On NetBSD and Windows, these functions don't support format directives that access arguments in an arbitrary order, such as @code{"%2$s"}. The fix is to include @file{<libintl.h>} from GNU gettext; it redefines these functions so that they are POSIX compliant. On Windows, these functions don't support the @code{'} flag and the @code{hh}, @code{ll}, @code{j}, @code{t}, @code{z} size specifiers. @item vscanf @item vsscanf On Windows systems (excluding Cygwin), these functions do not set @code{errno} upon failure. On Windows, these functions don't support the @code{hh}, @code{ll}, @code{j}, @code{t}, @code{z} size specifiers. @item vswprintf On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. On Windows, this function does not take a buffer size as second argument. @item waitid As of 2005, no system is known on which @code{waitid} with flag @code{WNOWAIT} works correctly. @item wcrtomb @itemx wcscat @itemx wcschr @itemx wcscmp @itemx wcscoll @itemx wcscpy @itemx wcscspn @itemx wcsftime @itemx wcslen @itemx wcsncat @itemx wcsncmp @itemx wcsncpy @itemx wcspbrk @itemx wcsrchr @itemx wcsrtombs @itemx wcsspn @itemx wcsstr @itemx wcstod @itemx wcstof @itemx wcstoimax @itemx wcstok @itemx wcstol @itemx wcstold @itemx wcstoll @itemx wcstombs @itemx wcstoul @itemx wcstoull @itemx wcstoumax On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @item wcswcs On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. This function is marked as ``legacy'' in POSIX. Better use @code{wcsstr} instead. @item wcswidth @itemx wcsxfrm @itemx wctob @itemx wctomb @itemx wctrans @itemx wctype @itemx wcwidth @itemx wmemchr @itemx wmemcmp @itemx wmemcpy @itemx wmemmove @itemx wmemset @itemx wprintf @itemx wscanf On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot accommodate all Unicode characters. @end table