1 @node Function Portability
2 @section Portability of Standard Functions
5 @c Copyright (C) 2006 Free Software Foundation, Inc.
7 @c Permission is granted to copy, distribute and/or modify this document
8 @c under the terms of the GNU Free Documentation License, Version 1.2 or
9 @c any later version published by the Free Software Foundation; with no
10 @c Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
11 @c Texts. A copy of the license is included in the ``GNU Free
12 @c Documentation License'' file as part of this distribution.
14 Many standard library functions have portability limitations, although
15 they are specified in the
16 @uref{http://www.opengroup.org/susv3, Posix standard}. In this section,
17 we mention only functions that behave differently than specified; we don't
18 mention functions that are not implemented at all on some platforms, or
19 that are implemented but not declared on some platforms. Many of the
20 portability problems have a solution in @ref{Gnulib}.
24 This function was not correctly implemented in glibc versions before 2.2.5.
27 Some systems don't have a @code{socklen_t} type; in this case this function's
28 third argument type is @samp{int *}.
31 This function may overflow its internal buffer if an invalid year is passed.
34 This function may put more than 26 bytes into the argument buffer if an
35 invalid year is passed.
38 glibc has two different functions @code{basename}: the POSIX version and
41 @code{basename} assumes file names in POSIX syntax; it does not work with file
42 names in Windows syntax.
45 This function is marked as ``legacy'' in POSIX. Better use @code{memcmp}
49 This function is marked as ``legacy'' in POSIX. Better use @code{memcpy}
50 or @code{memmove} instead.
53 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
54 accommodate all Unicode characters.
57 This function is marked as ``legacy'' in POSIX. Better use @code{memset}
61 When applied to a symbolic link, some implementations don't dereference
62 the symlink, i.e.@: they behave like @code{lchown}.
67 The glibc implementation is or was broken.
70 On Windows, this function returns a file handle in @code{O_TEXT} mode. If you
71 need a file handle in @code{O_BINARY} mode, you need to use the function
74 On platforms where @code{off_t} is a 32-bit type, @code{creat} may not work
75 correctly to create files larger than 2 GB. The fix is to use the
76 @code{AC_SYS_LARGEFILE} macro.
79 This function may overflow its internal buffer if an invalid year is passed.
82 This function may put more than 26 bytes into the argument buffer if an
83 invalid year is passed.
86 @code{dirname} assumes file names in POSIX syntax; it does not work with file
87 names in Windows syntax.
90 If the file name argument is not absolute, the file is searched for. The
91 search algorithm is system specific.
94 The visibility of symbols loaded in dependent shared libraries or present
95 in the main executable is system dependent.
98 This function is marked as ``legacy'' in POSIX. Better use @code{sprintf}
102 On Windows, the socket functions don't set @code{errno}; their error code is
103 available through @code{WSAGetLastError()} instead.
106 On Windows systems (excluding Cygwin), this function does not set @code{errno}
110 This function is marked as ``legacy'' in POSIX. Better use @code{sprintf}
115 On Windows systems (excluding Cygwin), these functions do not set @code{errno}
120 On Windows systems (excluding Cygwin), these functions do not set @code{errno}
125 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
126 accommodate all Unicode characters.
129 This function is broken in some version of Solaris or glibc.
132 On Windows systems (excluding Cygwin), this function does not set @code{errno}
135 On Windows, this function returns a file stream in ``text'' mode by default;
136 this means that it translates @code{'\n'} to CR/LF by default. Use the
137 @code{"b"} flag if you need reliable binary I/O.
140 On some systems, @code{fork} followed by a call of the @code{exec} family
141 (@code{execl}, @code{execlp}, @code{execle}, @code{execv}, @code{execvp},
142 or @code{execve}) is less efficient than @code{vfork} followed by the same
143 call. @code{vfork} is a variant of @code{fork} that has been introduced to
144 optimize the @code{fork}/@code{exec} pattern.
146 On Windows systems (excluding Cygwin), this function is not implemented; use
147 @code{spawnvp} instead.
150 On NetBSD and Windows, this function doesn't support format directives that
151 access arguments in an arbitrary order, such as @code{"%2$s"}. The fix is to
152 include @file{<libintl.h>} from GNU gettext; it redefines this function so that
153 it is POSIX compliant.
155 On Windows systems (excluding Cygwin), this function doesn't support
156 the @code{'} flag and the @code{hh}, @code{ll}, @code{j}, @code{t},
157 @code{z} size specifiers.
161 On Windows systems (excluding Cygwin), these functions do not set @code{errno}
166 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
167 accommodate all Unicode characters.
170 On Windows systems (excluding Cygwin), this function does not set @code{errno}
174 On old systems, @code{free (NULL)} is not allowed.
177 On Windows systems (excluding Cygwin), this function does not set @code{errno}
181 On Windows systems (excluding Cygwin), this function does not set @code{errno}
184 On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j},
185 @code{t}, @code{z} size specifiers.
188 On Windows systems (excluding Cygwin), this function does not set @code{errno}
192 On platforms where @code{off_t} is a 32-bit type, @code{stat} may not correctly
193 report the size of files or block devices larger than 2 GB. The fix is to
194 use the @code{AC_SYS_LARGEFILE} macro.
196 On Cygwin, @code{fstat} applied to the file descriptors 0 and 1, returns
197 different @code{st_ino} values, even if standard input and standard output
198 are not redirected and refer to the same terminal.
201 This function is marked as ``legacy'' in POSIX. Better use @code{gettimeofday}
202 or @code{clock_gettime} instead, and use @code{ftime} only as a fallback for
203 portability to Windows systems.
206 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
207 accommodate all Unicode characters.
209 @code{fwide} is not guaranteed to be able to change a file stream's mode
210 to a different mode than the current one.
213 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
214 accommodate all Unicode characters.
217 On Windows systems (excluding Cygwin), this function does not set @code{errno}
221 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
222 accommodate all Unicode characters.
225 This function is marked as ``legacy'' in POSIX. Better use @code{sprintf}
229 On Windows, this function is declared in @code{<ws2tcpip.h>} rather than in
234 On Windows systems (excluding Cygwin), these functions do not set @code{errno}
238 On glibc systems, @code{getcwd (NULL, n)} allocates memory for the result.
239 On other systems, this call is not allowed.
242 On Ultrix 4.3, @code{getgroups (0, 0)} always fails. See macro
243 @samp{AC_FUNC_GETGROUPS}.
246 If the given buffer is too small for the host name, some implementations
247 fail with @code{EINVAL}, instead of returning a truncated host name.
250 The default behavior of the glibc implementation of @code{getopt} allows
251 mixing option and non-option arguments on the command line in any order.
252 Other implementations, such as the one in Cygwin, enforce strict POSIX
253 compliance: they require that the option arguments precede the non-option
254 arguments. This is something to watch out in your program's testsuite.
257 Some systems don't have a @code{socklen_t} type; in this case this function's
258 third argument type is @samp{int *}.
261 Many systems don't fill in all the fields of @code{struct rusage} with
265 This function should never be used, because it can overflow any given buffer.
267 On Windows systems (excluding Cygwin), this function does not set @code{errno}
271 Some systems don't have a @code{socklen_t} type; in this case this function's
272 third argument type is @samp{int *}.
275 Some systems don't have a @code{socklen_t} type; in this case this function's
276 fifth argument type is @samp{int *}.
278 Many socket options are not available on all systems.
280 BeOS has the @code{setsockopt} function, but not the @code{getsockopt}
284 On some systems, @code{gettimeofday} clobbers the buffer in which
285 @code{localtime} returns its result.
289 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
290 accommodate all Unicode characters.
293 The size of the buffer required for this function is not a compile-time
294 constant. Also, the function truncates a result that would be larger than
295 the minimum buffer size. For these reasons, this function is marked as
296 ``legacy'' in POSIX. Better use the @code{getcwd} function instead.
299 Some systems may store additional flags in the @code{gl_flags} field.
302 Some systems define a function of this name that is incompatible to POSIX.
305 This function was not correctly implemented in glibc versions before 2.2.
307 When @code{iconv} encounters an input character that is valid but that can
308 not be converted to the output character set, glibc's and GNU libiconv's
309 @code{iconv} stop the conversion. Some other implementations put an
310 implementation-defined character into the output buffer.
313 The set of supported encodings and conversions is system dependent.
316 This function is marked as ``legacy'' in POSIX. Better use @code{strchr}
320 On some old systems, this function returns a @samp{struct in_addr} rather
321 than a scalar type such as @samp{unsigned int} or @samp{unsigned long}.
324 Most @code{ioctl} requests are platform and hardware specific.
327 On Windows, @code{isatty} also returns true for character devices such as
343 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
344 accommodate all Unicode characters.
347 This function was not correctly implemented in glibc versions before 2.2.5.
350 Some systems define a function of this name that is incompatible to POSIX.
353 The effects of this call are system and compiler optimization dependent,
354 since it restores the contents of register-allocated variables but not
355 the contents of stack-allocated variables.
357 When longjumping out of a signal handler that was being executed on an
358 alternate stack (installed through @code{sigaltstack}), on FreeBSD, NetBSD,
359 OpenBSD, you need to clear the @code{SS_ONSTACK} flag in the @code{stack_t}
360 structure managed by the kernel.
363 POSIX does not specify which file descriptors support seeking and which don't.
364 In practice, regular files and block devices support seeking, and ttys, pipes,
365 and most character devices don't support it.
367 On platforms where @code{off_t} is a 32-bit type, @code{lseek} does not work
368 correctly with files larger than 2 GB. The fix is to use the
369 @code{AC_SYS_LARGEFILE} macro.
372 When the argument ends in a slash, some systems don't dereference the
375 On platforms where @code{off_t} is a 32-bit type, @code{lstat} may not
376 correctly report the size of files or block devices larger than 2 GB. The fix
377 is to use the @code{AC_SYS_LARGEFILE} macro.
379 On Windows systems (excluding Cygwin), symlinks are not supported, so
380 @code{lstat} does not exist. The fix is to define lstat to use stat.
386 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
387 accommodate all Unicode characters.
390 When the argument ends in a slash, the function call fails on some systems.
392 On Windows systems (excluding Cygwin), this function is called @code{_mkdir}
393 and takes only one argument. The fix is to define a macro like this:
395 #define mkdir ((int (*)()) _mkdir)
399 #define mkdir(path,mode) _mkdir (path)
403 On some systems (HP-UX 10.20, SunOS 4.1.4, Solaris 2.5.1), mkstemp has a silly
404 limit that it can create no more than 26 files from a given template. On
405 OSF/1 4.0f, it can create only 32 files per process.
407 On systems other than glibc 2.0.7 or newer, @code{mkstemp} can create a
408 world or group writable or readable file, if you haven't set the process
409 umask to 077. This is a security risk.
412 This function is not appropriate for creating temporary files. (It has
413 security risks.) Therefore it is marked as ``legacy'' in POSIX. Better use
414 @code{mkstemp} instead.
417 Some implementations of @code{mktime} may go into an endless loop.
420 To get anonymous memory, on some systems, you can use the flags
421 @code{MAP_ANONYMOUS | MAP_PRIVATE} and @code{-1} instead of a file descriptor;
422 on others you have to use a read-only file descriptor of @file{/dev/zero}.
424 On HP-UX, passing a non-NULL first argument, as a hint for the address (even
425 without @code{MAP_FIXED}, often causes @code{mmap} to fail. Better pass NULL
428 On HP-UX, @code{MAP_FIXED} basically never works. On other systems, it depends
429 on the circumstances whether memory can be returned at a given address.
432 On AIX, it is not possible to use @code{mprotect} on memory regions allocated
436 On NetBSD, @code{msync} takes only two arguments.
441 In glibc before glibc 2.2.4, @code{nice} returned 0 upon success.
444 Some older versions of glibc had @code{nl_langinfo} but not the @code{CODESET}
447 On Cygwin, which doesn't have locales, @code{nl_langinfo(CODESET)} always
448 returns @code{"US-ASCII"}.
451 On Windows, this function returns a file handle in @code{O_TEXT} mode by
452 default; this means that it translates '\n' to CR/LF by default. Use the
453 @code{O_BINARY} flag if you need reliable binary I/O.
455 On platforms where @code{off_t} is a 32-bit type, @code{open} may not work
456 correctly with files larger than 2 GB. The fix is to use the
457 @code{AC_SYS_LARGEFILE} macro.
460 On MacOS X 10.4.0 and AIX 5.3, this function doesn't work on special files
461 like @file{/dev/null} and ttys like @file{/dev/tty}.
464 On NetBSD and Windows, this function doesn't support format directives that
465 access arguments in an arbitrary order, such as @code{"%2$s"}. The fix is to
466 include @file{<libintl.h>} from GNU gettext; it redefines this function so that
467 it is POSIX compliant.
469 On Windows systems (excluding Cygwin), this function doesn't support
470 the @code{'} flag and the @code{hh}, @code{ll}, @code{j}, @code{t},
471 @code{z} size specifiers.
474 On Linux/glibc systems before the advent of NPTL, signals could only be
475 sent to one particular thread. In POSIX, signals are sent to the entire
476 process and executed by any thread of the process that happens to have the
477 particular signal currently unblocked.
482 On Windows systems (excluding Cygwin), these functions do not set @code{errno}
487 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
488 accommodate all Unicode characters.
491 When @code{readlink} is called on a directory: In the case of NFS mounted
492 directories, Cygwin sets @code{errno} to @code{ENOENT} or @code{EIO} instead of
493 @code{EINVAL}. To avoid this problem, check for a directory before calling
496 When @code{readlink} is called on a file that is not a symbolic link:
497 Irix may set @code{errno} to @code{ENXIO} instead of @code{EINVAL}. Cygwin
498 may set errno to @code{EACCES} instead of {EINVAL}.
501 This function does not allow to determine the required size of output buffer;
502 PATH_MAX --- if it is defined --- is nothing more than a guess.
505 Some systems don't have a @code{socklen_t} type; in this case this function's
506 sixth argument type is @samp{int *}.
510 Many regular expression implementations have bugs.
513 This function does not work on SunOS 4.1 when the source file name ends in a
517 On Windows systems (excluding Cygwin), this function does not set @code{errno}
521 This function is marked as ``legacy'' in POSIX. Better use @code{strrchr}
525 When @code{rmdir} fails because the specified directory is not empty, the
526 @code{errno} value is system dependent.
529 On Windows systems (excluding Cygwin), this function does not set @code{errno}
532 On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j},
533 @code{t}, @code{z} size specifiers.
536 When you call @code{select} with a timeout, some implementations modify the
537 timeout parameter so that upon return from the function, it contains the
538 amount of time not slept. Other implementations leave the timeout parameter
541 On Windows systems (excluding Cygwin) and on BeOS, @code{select} can only be
542 called on descriptors created by the @code{socket} function, not on regular
545 On Linux, when some file descriptor refers to a regular file, @code{select}
546 may fail, setting @code{errno} to @code{EBADF}.
549 The effects of this call are system and compiler optimization dependent,
550 since it restores the contents of register-allocated variables but not
551 the contents of stack-allocated variables.
554 In some versions of glibc (e.g.@: 2.3.3), @code{setenv} doesn't fail if the
555 first argument contains a @samp{=} character.
558 POSIX does not specify whether @code{setjmp} saves the signal mask in the
559 @code{jmp_buf}. It does on BSD systems, and on glibc systems when
560 @code{_BSD_SOURCE} is defined; in this case @code{setjmp} behaves like
561 @code{sigsetjmp}, and functions @code{_setjmp} and @code{_longjmp} are
562 available that don't save or restore the signal mask. On System V systems,
563 and on glibc systems by default, @code{setjmp} doesn't save the signal mask.
566 On Cygwin, which doesn't have locales, @code{setlocale(LC_ALL,NULL)} always
570 Many socket options are not available on all systems.
573 On Windows systems (excluding Cygwin), this function does not set @code{errno}
577 Attempts to @code{shmat} into a previously malloc-ed region fail on SunOS 4,
578 with @code{errno} set to @code{EINVAL}, even if there is an @code{munmap} call
581 On Linux, the flag @code{SHM_REMAP} is needed in order to force @code{shmat}
582 to replace existing memory mappings in the specify address range. On other
583 systems, it is not needed.
586 On many systems (not Linux), SHMMAX is so small that it is unusable for
587 reasonable applications, and/or @code{shmget} requires superuser privileges.
590 The symbolic value @code{SIG_IGN} for the @code{SIGCHLD} signal is equivalent
593 void handle_child (int sigchld)
595 while (waitpid (-1, NULL, WNOHANG) > 0)
599 except that @code{SIG_IGN} for @code{SIGCHLD} has the effect that the children
600 execution times are not accounted in the @code{times} function.
601 On some systems (BSD? SystemV? Linux?), you need to use the @code{sigaction}
602 flag @code{SA_NOCLDWAIT} in order to obtain this behavior.
605 @code{sigaltstack} doesn't work on HP-UX 11/IA-64 and OpenBSD 3.6/Sparc64.
608 On System V systems, when the signal is triggered, the kernel uninstalls the
609 handler (i.e.@: resets the signal's action to SIG_DFL) before invoking the
610 handler. This opens the door to race conditions: undesired things happen
611 if the signal is triggered twice and the signal handler was not quick enough
612 reinstalling itself as a handler. On BSD systems and glibc systems, on the
613 other hand, when the signal is triggered, the kernel blocks the signal
614 before invoking the handler. This is saner, but POSIX still allows either
615 behavior. To avoid this problem, use @code{sigaction} instead of
619 Linux implements the meaning of NULL timeout by doing what @code{sigwaitinfo}
620 does; other systems may not do the same.
623 On Linux/glibc systems before the advent of NPTL, signals could only be
624 sent to one particular thread. In POSIX, signals are sent to the entire
625 process and executed by any thread of the process that happens to have the
626 particular signal currently unblocked.
629 According to POSIX, the @code{sleep} function may interfere with the program's
630 use of the @code{SIGALRM} signal. On Linux, it doesn't; on other platforms,
634 On NetBSD and Windows, this function doesn't support format directives that
635 access arguments in an arbitrary order, such as @code{"%2$s"}. The fix is to
636 include @file{<libintl.h>} from GNU gettext; it redefines this function so that
637 it is POSIX compliant.
639 On Windows systems (excluding Cygwin), this function doesn't support
640 the @code{'} flag and the @code{hh}, @code{ll}, @code{j}, @code{t},
641 @code{z} size specifiers.
644 On BeOS, the descriptors returned by the @code{socket} function can not be used
645 in calls to @code{read}, @code{write}, and @code{close}; you have to use
646 @code{recv}, @code{send}, @code{closesocket} in these cases instead.
649 On NetBSD and Windows, this function doesn't support format directives that
650 access arguments in an arbitrary order, such as @code{"%2$s"}. The fix is to
651 include @file{<libintl.h>} from GNU gettext; it redefines this function so that
652 it is POSIX compliant.
654 On Windows systems (excluding Cygwin), this function doesn't support
655 the @code{'} flag and the @code{hh}, @code{ll}, @code{j}, @code{t},
656 @code{z} size specifiers.
659 On Windows systems (excluding Cygwin), this function does not set @code{errno}
662 On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j},
663 @code{t}, @code{z} size specifiers.
666 On platforms where @code{off_t} is a 32-bit type, @code{stat} may not correctly
667 report the size of files or block devices larger than 2 GB. The fix is to
668 use the @code{AC_SYS_LARGEFILE} macro.
670 Cygwin's @code{stat} function sometimes sets @code{errno} to @code{EACCES} when
671 @code{ENOENT} would be more appropriate.
675 As of 2006, no system is known that implements these functions correctly in
679 glibc has an incompatible version of this function. The POSIX compliant code
681 char *s = (strerror_r (err, buf, buflen) == 0 ? buf : NULL);
683 is essentially equivalent to this code using the glibc function:
685 char *s = strerror_r (err, buf, buflen);
689 As of 2006, no system is known that implements this function correctly in
693 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
694 accommodate all Unicode characters.
696 On Windows, this function does not take a buffer size as second argument.
699 On Windows systems (excluding Cygwin), the command processor used by the
700 @code{system} function is @file{cmd.exe}, not @file{/bin/sh}. Accordingly,
701 the rules for quoting shell arguments containing spaces, quote or other special
702 characters are different.
705 On some systems, @code{tcdrain} on a non-tty fails with @code{errno} set to
706 @code{EINVAL} or, on MacOS X, also @code{EOPNOTSUPP} or @code{ENODEV}, rather
710 On some systems, @code{tcflush} of @code{TCIFLUSH} on a non-tty fails with
711 errno set to @code{EINVAL} rather than @code{ENOTTY}.
713 On some systems, @code{tcflush} of @code{TCOFLUSH} on a non-tty fails with
714 errno set to @code{EINVAL} or, on IRIX, also @code{ENOSYS}, or, on MacOS X,
715 also @code{EOPNOTSUPP} or @code{ENODEV}, rather than @code{ENOTTY}.
718 This function is not appropriate for creating temporary files. (It has
719 security risks.) Better use @code{mkstemp} instead.
722 This function is not appropriate for creating temporary files. (It has
723 security risks.) Better use @code{mkstemp} instead.
728 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
729 accommodate all Unicode characters.
732 On Windows systems (excluding Cygwin), this function does not set @code{errno}
736 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
737 accommodate all Unicode characters.
740 Removing an open file is non-portable: On Unix this allows the programs that
741 have the file already open to continue working with it; the file's storage
742 is only freed when the no process has the file open any more. On Windows,
743 the attempt to remove an open file fails.
746 According to POSIX, the @code{usleep} function may interfere with the program's
747 use of the @code{SIGALRM} signal. On Linux, it doesn't; on other platforms,
751 On some systems, @code{utime (file, NULL)} fails to set the file's timestamp
755 This function is marked as ``legacy'' in POSIX. Better use @code{utime}
759 The second argument of @code{va_arg} must be a type that is invariant under
760 the ``default argument promotions'' (ISO C 99 6.5.2.2 paragraph 6). This
761 means that the following are not valid here:
764 Use @samp{double} instead.
766 Use @samp{int} instead.
767 @item Integer types smaller than @samp{int}.
768 Use @samp{int} or @samp{unsigned int} instead.
771 This is a portability problem because you don't know the width of some
772 abstract types like @code{uid_t}, @code{gid_t}, @code{mode_t}. So, instead of
774 mode = va_arg (ap, mode_t);
778 mode = (sizeof (mode_t) < sizeof (int)
780 : va_arg (ap, mode_t));
784 Some platforms don't provide this macro. You can use __va_copy where
785 available instead, or otherwise an assignment or @code{memcpy} call.
788 On NetBSD and Windows, this function doesn't support format directives that
789 access arguments in an arbitrary order, such as @code{"%2$s"}. The fix is to
790 include @file{<libintl.h>} from GNU gettext; it redefines this function so that
791 it is POSIX compliant.
793 On Windows systems (excluding Cygwin), this function doesn't support
794 the @code{'} flag and the @code{hh}, @code{ll}, @code{j}, @code{t},
795 @code{z} size specifiers.
798 On Windows systems (excluding Cygwin), this function does not set @code{errno}
801 On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j},
802 @code{t}, @code{z} size specifiers.
807 On NetBSD and Windows, these functions don't support format directives that
808 access arguments in an arbitrary order, such as @code{"%2$s"}. The fix is to
809 include @file{<libintl.h>} from GNU gettext; it redefines these functions so
810 that they are POSIX compliant.
812 On Windows systems (excluding Cygwin), this function doesn't support
813 the @code{'} flag and the @code{hh}, @code{ll}, @code{j}, @code{t},
814 @code{z} size specifiers.
818 On Windows systems (excluding Cygwin), these functions do not set @code{errno}
821 On Windows, these functions don't support the @code{hh}, @code{ll}, @code{j},
822 @code{t}, @code{z} size specifiers.
825 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
826 accommodate all Unicode characters.
828 On Windows, this function does not take a buffer size as second argument.
831 As of 2005, no system is known on which @code{waitid} with flag @code{WNOWAIT}
862 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
863 accommodate all Unicode characters.
866 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
867 accommodate all Unicode characters.
869 This function is marked as ``legacy'' in POSIX. Better use @code{wcsstr}
886 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
887 accommodate all Unicode characters.