Add inet_pton.
[gnulib.git] / doc / functions.texi
1 @node Function Portability
2 @section Portability of Standard Functions
3 @cindex functions
4
5 Many standard library functions have portability limitations, although
6 they are specified in the
7 @uref{http://www.opengroup.org/susv3, Posix standard}.  In this section,
8 we mention only functions that behave differently than specified; we don't
9 mention functions that are not implemented at all on some platforms, or
10 that are implemented but not declared on some platforms.  Many of the
11 portability problems have a solution in @ref{Gnulib}.
12
13 @table @code
14 @item a64l
15 This function was not correctly implemented in glibc versions before 2.2.5.
16
17 @item accept
18 Some systems don't have a @code{socklen_t} type; in this case this function's
19 third argument type is @samp{int *}.
20
21 @item asctime
22 This function may overflow its internal buffer if an invalid year is passed.
23
24 @item asctime_r
25 This function may put more than 26 bytes into the argument buffer if an
26 invalid year is passed.
27
28 @item basename
29 glibc has two different functions @code{basename}: the POSIX version and
30 the GNU version.
31
32 @code{basename} assumes file names in POSIX syntax; it does not work with file
33 names in Windows syntax.
34
35 @item bcmp
36 This function is marked as ``legacy'' in POSIX.  Better use @code{memcmp}
37 instead.
38
39 @item bcopy
40 This function is marked as ``legacy'' in POSIX.  Better use @code{memcpy}
41 or @code{memmove} instead.
42
43 @item btowc
44 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
45 accommodate all Unicode characters.
46
47 @item bzero
48 This function is marked as ``legacy'' in POSIX.  Better use @code{memset}
49 instead.
50
51 @item chown
52 When applied to a symbolic link, some implementations don't dereference
53 the symlink, i.e.@: they behave like @code{lchown}.
54
55 @item cproj
56 @itemx cprojf
57 @itemx cprojl
58 The glibc implementation is or was broken.
59
60 @item creat
61 On Windows, this function returns a file handle in @code{O_TEXT} mode.  If you
62 need a file handle in @code{O_BINARY} mode, you need to use the function
63 @code{open} instead.
64
65 On platforms where @code{off_t} is a 32-bit type, @code{creat} may not work
66 correctly to create files larger than 2 GB.  The fix is to use the
67 @code{AC_SYS_LARGEFILE} macro.
68
69 @item ctime
70 This function may overflow its internal buffer if an invalid year is passed.
71
72 @item ctime_r
73 This function may put more than 26 bytes into the argument buffer if an
74 invalid year is passed.
75
76 @item dirname
77 @code{dirname} assumes file names in POSIX syntax; it does not work with file
78 names in Windows syntax.
79
80 @item dlopen
81 If the file name argument is not absolute, the file is searched for.  The
82 search algorithm is system specific.
83
84 @item dlsym
85 The visibility of symbols loaded in dependent shared libraries or present
86 in the main executable is system dependent.
87
88 @item ecvt
89 This function is marked as ``legacy'' in POSIX.  Better use @code{sprintf}
90 instead.
91
92 @item errno
93 On Windows, the socket functions don't set @code{errno}; their error code is
94 available through @code{WSAGetLastError()} instead.
95
96 @item fclose
97 On Windows systems (excluding Cygwin), this function does not set @code{errno}
98 upon failure.
99
100 @item fcvt
101 This function is marked as ``legacy'' in POSIX.  Better use @code{sprintf}
102 instead.
103
104 @item fdopen
105 @itemx fflush
106 On Windows systems (excluding Cygwin), these functions do not set @code{errno}
107 upon failure.
108
109 @item fgetc
110 @itemx fgets
111 On Windows systems (excluding Cygwin), these functions do not set @code{errno}
112 upon failure.
113
114 @item fgetwc
115 @itemx fgetws
116 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
117 accommodate all Unicode characters.
118
119 @item fnmatch
120 This function is broken in some version of Solaris or glibc.
121
122 @item fopen
123 On Windows systems (excluding Cygwin), this function does not set @code{errno}
124 upon failure.
125
126 On Windows, this function returns a file stream in ``text'' mode by default;
127 this means that it translates @code{'\n'} to CR/LF by default.  Use the
128 @code{"b"} flag if you need reliable binary I/O.
129
130 @item fork
131 On some systems, @code{fork} followed by a call of the @code{exec} family
132 (@code{execl}, @code{execlp}, @code{execle}, @code{execv}, @code{execvp},
133 or @code{execve}) is less efficient than @code{vfork} followed by the same
134 call.  @code{vfork} is a variant of @code{fork} that has been introduced to
135 optimize the @code{fork}/@code{exec} pattern.
136
137 On Windows systems (excluding Cygwin), this function is not implemented; use
138 @code{spawnvp} instead.
139
140 @item fprintf
141 On NetBSD and Windows, this function doesn't support format directives that
142 access arguments in an arbitrary order, such as @code{"%2$s"}.  The fix is to
143 include @file{<libintl.h>} from GNU gettext; it redefines this function so that
144 it is POSIX compliant.
145
146 On Windows, this function doesn't support the @code{'} flag and the @code{hh},
147 @code{ll}, @code{j}, @code{t}, @code{z} size specifiers.
148
149 @item fputc
150 @itemx fputs
151 On Windows systems (excluding Cygwin), these functions do not set @code{errno}
152 upon failure.
153
154 @item fputwc
155 @itemx fputws
156 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
157 accommodate all Unicode characters.
158
159 @item fread
160 On Windows systems (excluding Cygwin), this function does not set @code{errno}
161 upon failure.
162
163 @item free
164 On old systems, @code{free (NULL)} is not allowed.
165
166 @item freopen
167 On Windows systems (excluding Cygwin), this function does not set @code{errno}
168 upon failure.
169
170 @item fscanf
171 On Windows systems (excluding Cygwin), this function does not set @code{errno}
172 upon failure.
173
174 On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j},
175 @code{t}, @code{z} size specifiers.
176
177 @item fseek
178 On Windows systems (excluding Cygwin), this function does not set @code{errno}
179 upon failure.
180
181 @item fstat
182 On platforms where @code{off_t} is a 32-bit type, @code{stat} may not correctly
183 report the size of files or block devices larger than 2 GB.  The fix is to
184 use the @code{AC_SYS_LARGEFILE} macro.
185
186 On Cygwin, @code{fstat} applied to the file descriptors 0 and 1, returns
187 different @code{st_ino} values, even if standard input and standard output
188 are not redirected and refer to the same terminal.
189
190 @item ftime
191 This function is marked as ``legacy'' in POSIX.  Better use @code{gettimeofday}
192 or @code{clock_gettime} instead, and use @code{ftime} only as a fallback for
193 portability to Windows systems.
194
195 @item fwide
196 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
197 accommodate all Unicode characters.
198
199 @code{fwide} is not guaranteed to be able to change a file stream's mode
200 to a different mode than the current one.
201
202 @item fwprintf
203 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
204 accommodate all Unicode characters.
205
206 @item fwrite
207 On Windows systems (excluding Cygwin), this function does not set @code{errno}
208 upon failure.
209
210 @item fwscanf
211 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
212 accommodate all Unicode characters.
213
214 @item gcvt
215 This function is marked as ``legacy'' in POSIX.  Better use @code{sprintf}
216 instead.
217
218 @item getaddrinfo
219 On Windows, this function is declared in @code{<ws2tcpip.h>} rather than in
220 @code{<netdb.h>}.
221
222 @item getc
223 @itemx getchar
224 On Windows systems (excluding Cygwin), these functions do not set @code{errno}
225 upon failure.
226
227 @item getcwd
228 On glibc systems, @code{getcwd (NULL, n)} allocates memory for the result.
229 On other systems, this call is not allowed.
230
231 @item getgroups
232 On Ultrix 4.3, @code{getgroups (0, 0)} always fails.  See macro
233 @samp{AC_FUNC_GETGROUPS}.
234
235 @item gethostname
236 If the given buffer is too small for the host name, some implementations
237 fail with @code{EINVAL}, instead of returning a truncated host name.
238
239 @item getopt
240 The default behaviour of the glibc implementation of @code{getopt} allows
241 mixing option and non-option arguments on the command line in any order.
242 Other implementations, such as the one in Cygwin, enforce strict POSIX
243 compliance: they require that the option arguments precede the non-option
244 arguments.  This is something to watch out in your program's testsuite.
245
246 @item getpeername
247 Some systems don't have a @code{socklen_t} type; in this case this function's
248 third argument type is @samp{int *}.
249
250 @item getrusage
251 Many systems don't fill in all the fields of @code{struct rusage} with
252 meaningful values.
253
254 @item gets
255 This function should never be used, because it can overflow any given buffer.
256
257 On Windows systems (excluding Cygwin), this function does not set @code{errno}
258 upon failure.
259
260 @item getsockname
261 Some systems don't have a @code{socklen_t} type; in this case this function's
262 third argument type is @samp{int *}.
263
264 @item getsockopt
265 Some systems don't have a @code{socklen_t} type; in this case this function's
266 fifth argument type is @samp{int *}.
267
268 Many socket options are not available on all systems.
269
270 BeOS has the @code{setsockopt} function, but not the @code{getsockopt}
271 function.
272
273 @item gettimeofday
274 On some systems, @code{gettimeofday} clobbers the buffer in which
275 @code{localtime} returns its result.
276
277 @item getwc
278 @itemx getwchar
279 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
280 accommodate all Unicode characters.
281
282 @item getwd
283 The size of the buffer required for this function is not a compile-time
284 constant. Also, the function truncates a result that would be larger than
285 the minimum buffer size. For these reasons, this function is marked as
286 ``legacy'' in POSIX.  Better use the @code{getcwd} function instead.
287
288 @item glob
289 Some systems may store additional flags in the @code{gl_flags} field.
290
291 @item gmtime_r
292 Some systems define a function of this name that is incompatible to POSIX.
293
294 @item iconv
295 This function was not correctly implemented in glibc versions before 2.2.
296
297 When @code{iconv} encounters an input character that is valid but that can
298 not be converted to the output character set, glibc's and GNU libiconv's
299 @code{iconv} stop the conversion.  Some other implementations put an
300 implementation-defined character into the output buffer.
301
302 @item iconv_open
303 The set of supported encodings and conversions is system dependent.
304
305 @item index
306 This function is marked as ``legacy'' in POSIX.  Better use @code{strchr}
307 instead.
308
309 @item inet_addr
310 On some old systems, this function returns a @samp{struct in_addr} rather
311 than a scalar type such as @samp{unsigned int} or @samp{unsigned long}.
312
313 @item ioctl
314 Most @code{ioctl} requests are platform and hardware specific.
315
316 @item isatty
317 On Windows, @code{isatty} also returns true for character devices such as
318 @file{NUL}.
319
320 @item iswalnum
321 @itemx iswalpha
322 @itemx iswblank
323 @itemx iswcntrl
324 @itemx iswctype
325 @itemx iswdigit
326 @itemx iswgraph
327 @itemx iswlower
328 @itemx iswprint
329 @itemx iswpunct
330 @itemx iswspace
331 @itemx iswupper
332 @itemx iswxdigit
333 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
334 accommodate all Unicode characters.
335
336 @item l64a
337 This function was not correctly implemented in glibc versions before 2.2.5.
338
339 @item localtime_r
340 Some systems define a function of this name that is incompatible to POSIX.
341
342 @item longjmp
343 The effects of this call are system and compiler optimization dependent,
344 since it restores the contents of register-allocated variables but not
345 the contents of stack-allocated variables.
346
347 When longjumping out of a signal handler that was being executed on an
348 alternate stack (installed through @code{sigaltstack}), on FreeBSD, NetBSD,
349 OpenBSD, you need to clear the @code{SS_ONSTACK} flag in the @code{stack_t}
350 structure managed by the kernel.
351
352 @item lseek
353 POSIX does not specify which file descriptors support seeking and which don't.
354 In practice, regular files and block devices support seeking, and ttys, pipes,
355 and most character devices don't support it.
356
357 On platforms where @code{off_t} is a 32-bit type, @code{lseek} does not work
358 correctly with files larger than 2 GB.  The fix is to use the
359 @code{AC_SYS_LARGEFILE} macro.
360
361 @item lstat
362 When the argument ends in a slash, some systems don't dereference the
363 argument.
364
365 On platforms where @code{off_t} is a 32-bit type, @code{lstat} may not
366 correctly report the size of files or block devices larger than 2 GB.  The fix
367 is to use the @code{AC_SYS_LARGEFILE} macro.
368
369 @item mbrtowc
370 @itemx mbsrtowcs
371 @itemx mbstowcs
372 @itemx mbtowc
373 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
374 accommodate all Unicode characters.
375
376 @item mkdir
377 When the argument ends in a slash, the function call fails on some systems.
378
379 On Windows systems (excluding Cygwin), this function is called @code{_mkdir}
380 and takes only one argument.  The fix is to define a macro like this:
381 @smallexample
382 #define mkdir ((int (*)()) _mkdir)
383 @end smallexample
384 or
385 @smallexample
386 #define mkdir(path,mode) _mkdir (path)
387 @end smallexample
388
389 @item mkstemp
390 On some systems (HP-UX 10.20, SunOS 4.1.4, Solaris 2.5.1), mkstemp has a silly
391 limit that it can create no more than 26 files from a given template.  On
392 OSF/1 4.0f, it can create only 32 files per process.
393
394 On systems other than glibc 2.0.7 or newer, @code{mkstemp} can create a
395 world or group writable or readable file, if you haven't set the process
396 umask to 077.  This is a security risk.
397
398 @item mktemp
399 This function is not appropriate for creating temporary files.  (It has
400 security risks.)  Therefore it is marked as ``legacy'' in POSIX.  Better use
401 @code{mkstemp} instead.
402
403 @item mktime
404 Some implementations of @code{mktime} may go into an endless loop.
405
406 @item mmap
407 To get anonymous memory, on some systems, you can use the flags
408 @code{MAP_ANONYMOUS | MAP_PRIVATE} and @code{-1} instead of a file descriptor;
409 on others you have to use a read-only file descriptor of @file{/dev/zero}.
410
411 On HP-UX, passing a non-NULL first argument, as a hint for the address (even
412 without @code{MAP_FIXED}, often causes @code{mmap} to fail.  Better pass NULL
413 in this case.
414
415 On HP-UX, @code{MAP_FIXED} basically never works.  On other systems, it depends
416 on the circumstances whether memory can be returned at a given address.
417
418 @item mprotect
419 On AIX, it is not possible to use @code{mprotect} on memory regions allocated
420 with @code{malloc}.
421
422 @item msync
423 On NetBSD, @code{msync} takes only two arguments.
424
425 @item nanosleep
426
427 @item nice
428 In glibc before glibc 2.2.4, @code{nice} returned 0 upon success.
429
430 @item nl_langinfo
431 Some older versions of glibc had @code{nl_langinfo} but not the @code{CODESET}
432 macro.
433
434 On Cygwin, which doesn't have locales, @code{nl_langinfo(CODESET)} always
435 returns @code{"US-ASCII"}.
436
437 @item open
438 On Windows, this function returns a file handle in @code{O_TEXT} mode by
439 default; this means that it translates '\n' to CR/LF by default.  Use the
440 @code{O_BINARY} flag if you need reliable binary I/O.
441
442 On platforms where @code{off_t} is a 32-bit type, @code{open} may not work
443 correctly with files larger than 2 GB.  The fix is to use the
444 @code{AC_SYS_LARGEFILE} macro.
445
446 @item poll
447 On MacOS X 10.4.0 and AIX 5.3, this function doesn't work on special files
448 like @file{/dev/null} and ttys like @file{/dev/tty}.
449
450 @item printf
451 On NetBSD and Windows, this function doesn't support format directives that
452 access arguments in an arbitrary order, such as @code{"%2$s"}.  The fix is to
453 include @file{<libintl.h>} from GNU gettext; it redefines this function so that
454 it is POSIX compliant.
455
456 On Windows, this function doesn't support the @code{'} flag and the @code{hh},
457 @code{ll}, @code{j}, @code{t}, @code{z} size specifiers.
458
459 @item pthread_create
460 On Linux/glibc systems before the advent of NPTL, signals could only be
461 sent to one particular thread.  In POSIX, signals are sent to the entire
462 process and executed by any thread of the process that happens to have the
463 particular signal currently unblocked.
464
465 @item putc
466 @itemx putchar
467 @itemx puts
468 On Windows systems (excluding Cygwin), these functions do not set @code{errno}
469 upon failure.
470
471 @item putwc
472 @itemx putwchar
473 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
474 accommodate all Unicode characters.
475
476 @item readlink
477 When @code{readlink} is called on a directory: In the case of NFS mounted
478 directories, Cygwin sets @code{errno} to @code{ENOENT} or @code{EIO} instead of
479 @code{EINVAL}.  To avoid this problem, check for a directory before calling
480 @code{readlink}.
481
482 When @code{readlink} is called on a file that is not a symbolic link:
483 Irix may set @code{errno} to @code{ENXIO} instead of @code{EINVAL}.  Cygwin
484 may set errno to @code{EACCES} instead of {EINVAL}.
485
486 @item realpath
487 This function does not allow to determine the required size of output buffer;
488 PATH_MAX --- if it is defined --- is nothing more than a guess.
489
490 @item recvfrom
491 Some systems don't have a @code{socklen_t} type; in this case this function's
492 sixth argument type is @samp{int *}.
493
494 @item regcomp
495 @itemx regexec
496 Many regular expression implementations have bugs.
497
498 @item rename
499 This function does not work on SunOS 4.1 when the source file name ends in a
500 slash.
501
502 @item rewind
503 On Windows systems (excluding Cygwin), this function does not set @code{errno}
504 upon failure.
505
506 @item rindex
507 This function is marked as ``legacy'' in POSIX.  Better use @code{strrchr}
508 instead.
509
510 @item rmdir
511 When @code{rmdir} fails because the specified directory is not empty, the
512 @code{errno} value is system dependent.
513
514 @item scanf
515 On Windows systems (excluding Cygwin), this function does not set @code{errno}
516 upon failure.
517
518 On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j},
519 @code{t}, @code{z} size specifiers.
520
521 @item select
522 When you call @code{select} with a timeout, some implementations modify the
523 timeout parameter so that upon return from the function, it contains the
524 amount of time not slept.  Other implementations leave the timeout parameter
525 unmodified.
526
527 On Windows systems (excluding Cygwin) and on BeOS, @code{select} can only be
528 called on descriptors created by the @code{socket} function, not on regular
529 file descriptors.
530
531 On Linux, when some file descriptor refers to a regular file, @code{select}
532 may fail, setting @code{errno} to @code{EBADF}.
533
534 @item setcontext
535 The effects of this call are system and compiler optimization dependent,
536 since it restores the contents of register-allocated variables but not
537 the contents of stack-allocated variables.
538
539 @item setenv
540 In some versions of glibc (e.g.@: 2.3.3), @code{setenv} doesn't fail if the
541 first argument contains a @samp{=} character.
542
543 @item setjmp
544 POSIX does not specify whether @code{setjmp} saves the signal mask in the
545 @code{jmp_buf}.  It does on BSD systems, and on glibc systems when
546 @code{_BSD_SOURCE} is defined; in this case @code{setjmp} behaves like
547 @code{sigsetjmp}, and functions @code{_setjmp} and @code{_longjmp} are
548 available that don't save or restore the signal mask.  On System V systems,
549 and on glibc systems by default, @code{setjmp} doesn't save the signal mask.
550
551 @item setlocale
552 On Cygwin, which doesn't have locales, @code{setlocale(LC_ALL,NULL)} always
553 returns @code{"C"}.
554
555 @item setsockopt
556 Many socket options are not available on all systems.
557
558 @item setvbuf
559 On Windows systems (excluding Cygwin), this function does not set @code{errno}
560 upon failure.
561
562 @item shmat
563 Attempts to @code{shmat} into a previously malloc-ed region fail on SunOS 4,
564 with @code{errno} set to @code{EINVAL}, even if there is an @code{munmap} call
565 in between.
566
567 On Linux, the flag @code{SHM_REMAP} is needed in order to force @code{shmat}
568 to replace existing memory mappings in the specify address range.  On other
569 systems, it is not needed.
570
571 @item shmget
572 On many systems (not Linux), SHMMAX is so small that it is unusable for
573 reasonable applications, and/or @code{shmget} requires superuser privileges.
574
575 @item sigaction
576 The symbolic value @code{SIG_IGN} for the @code{SIGCHLD} signal is equivalent
577 to a signal handler
578 @smallexample
579 void handle_child (int sigchld)
580 @{
581   while (waitpid (-1, NULL, WNOHANG) > 0)
582     ;
583 @}
584 @end smallexample
585 except that @code{SIG_IGN} for @code{SIGCHLD} has the effect that the children
586 execution times are not accounted in the @code{times} function.
587 On some systems (BSD? SystemV? Linux?), you need to use the @code{sigaction}
588 flag @code{SA_NOCLDWAIT} in order to obtain this behaviour.
589
590 @item sigaltstack
591 @code{sigaltstack} doesn't work on HP-UX 11/IA-64 and OpenBSD 3.6/Sparc64.
592
593 @item signal
594 On System V systems, when the signal is triggered, the kernel uninstalls the
595 handler (i.e.@: resets the signal's action to SIG_DFL) before invoking the
596 handler.  This opens the door to race conditions: undesired things happen
597 if the signal is triggered twice and the signal handler was not quick enough
598 reinstalling itself as a handler.  On BSD systems and glibc systems, on the
599 other hand, when the signal is triggered, the kernel blocks the signal
600 before invoking the handler.  This is saner, but POSIX still allows either
601 behaviour.  To avoid this problem, use @code{sigaction} instead of
602 @code{signal}.
603
604 @item sigtimedwait
605 Linux implements the meaning of NULL timeout by doing what @code{sigwaitinfo}
606 does; other systems may not do the same.
607
608 @item sigwait
609 On Linux/glibc systems before the advent of NPTL, signals could only be
610 sent to one particular thread.  In POSIX, signals are sent to the entire
611 process and executed by any thread of the process that happens to have the
612 particular signal currently unblocked.
613
614 @item sleep
615 According to POSIX, the @code{sleep} function may interfere with the program's
616 use of the @code{SIGALRM} signal.  On Linux, it doesn't; on other platforms,
617 it may.
618
619 @item snprintf
620 On NetBSD and Windows, this function doesn't support format directives that
621 access arguments in an arbitrary order, such as @code{"%2$s"}.  The fix is to
622 include @file{<libintl.h>} from GNU gettext; it redefines this function so that
623 it is POSIX compliant.
624
625 On Windows, this function doesn't support the @code{'} flag and the @code{hh},
626 @code{ll}, @code{j}, @code{t}, @code{z} size specifiers.
627
628 @item socket
629 On BeOS, the descriptors returned by the @code{socket} function can not be used
630 in calls to @code{read}, @code{write}, and @code{close}; you have to use
631 @code{recv}, @code{send}, @code{closesocket} in these cases instead.
632
633 @item sprintf
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.
638
639 On Windows, this function doesn't support the @code{'} flag and the @code{hh},
640 @code{ll}, @code{j}, @code{t}, @code{z} size specifiers.
641
642 @item sscanf
643 On Windows systems (excluding Cygwin), this function does not set @code{errno}
644 upon failure.
645
646 On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j},
647 @code{t}, @code{z} size specifiers.
648
649 @item stat
650 On platforms where @code{off_t} is a 32-bit type, @code{stat} may not correctly
651 report the size of files or block devices larger than 2 GB.  The fix is to
652 use the @code{AC_SYS_LARGEFILE} macro.
653
654 Cygwin's @code{stat} function sometimes sets @code{errno} to @code{EACCES} when
655 @code{ENOENT} would be more appropriate.
656
657 @item strcasecmp
658 @itemx strcasestr
659 As of 2006, no system is known that implements these functions correctly in
660 multibyte locales.
661
662 @item strerror_r
663 glibc has an incompatible version of this function.  The POSIX compliant code
664 @smallexample
665 char *s = (strerror_r (err, buf, buflen) == 0 ? buf : NULL);
666 @end smallexample
667 is essentially equivalent to this code using the glibc function:
668 @smallexample
669 char *s = strerror_r (err, buf, buflen);
670 @end smallexample
671
672 @item strstr
673 As of 2006, no system is known that implements this function correctly in
674 multibyte locales.
675
676 @item swprintf
677 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
678 accommodate all Unicode characters.
679
680 On Windows, this function does not take a buffer size as second argument.
681
682 @item system
683 On Windows systems (excluding Cygwin), the command processor used by the
684 @code{system} function is @file{cmd.exe}, not @file{/bin/sh}.  Accordingly,
685 the rules for quoting shell arguments containing spaces, quote or other special
686 characters are different.
687
688 @item tcdrain
689 On some systems, @code{tcdrain} on a non-tty fails with @code{errno} set to
690 @code{EINVAL} or, on MacOS X, also @code{EOPNOTSUPP} or @code{ENODEV}, rather
691 than @code{ENOTTY}.
692
693 @item tcflush
694 On some systems, @code{tcflush} of @code{TCIFLUSH} on a non-tty fails with
695 errno set to @code{EINVAL} rather than @code{ENOTTY}.
696
697 On some systems, @code{tcflush} of @code{TCOFLUSH} on a non-tty fails with
698 errno set to @code{EINVAL} or, on IRIX, also @code{ENOSYS}, or, on MacOS X,
699 also @code{EOPNOTSUPP} or @code{ENODEV}, rather than @code{ENOTTY}.
700
701 @item tempnam
702 This function is not appropriate for creating temporary files.  (It has
703 security risks.)  Better use @code{mkstemp} instead.
704
705 @item tmpnam
706 This function is not appropriate for creating temporary files.  (It has
707 security risks.)  Better use @code{mkstemp} instead.
708
709 @item towctrans
710 @itemx towlower
711 @itemx towupper
712 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
713 accommodate all Unicode characters.
714
715 @item ungetc
716 On Windows systems (excluding Cygwin), this function does not set @code{errno}
717 upon failure.
718
719 @item ungetwc
720 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
721 accommodate all Unicode characters.
722
723 @item unlink
724 Removing an open file is non-portable: On Unix this allows the programs that
725 have the file already open to continue working with it; the file's storage
726 is only freed when the no process has the file open any more.  On Windows,
727 the attempt to remove an open file fails.
728
729 @item usleep
730 According to POSIX, the @code{usleep} function may interfere with the program's
731 use of the @code{SIGALRM} signal.  On Linux, it doesn't; on other platforms,
732 it may.
733
734 @item utime
735 On some systems, @code{utime (file, NULL)} fails to set the file's timestamp
736 to the current time.
737
738 @item utimes
739 This function is marked as ``legacy'' in POSIX.  Better use @code{utime}
740 instead.
741
742 @item va_arg
743 The second argument of @code{va_arg} must be a type that is invariant under
744 the ``default argument promotions'' (ISO C 99 6.5.2.2 paragraph 6).  This
745 means that the following are not valid here:
746 @table @asis
747 @item @samp{float}
748 Use @samp{double} instead.
749 @item @samp{bool}
750 Use @samp{int} instead.
751 @item Integer types smaller than @samp{int}.
752 Use @samp{int} or @samp{unsigned int} instead.
753 @end table
754
755 This is a portability problem because you don't know the width of some
756 abstract types like @code{uid_t}, @code{gid_t}, @code{mode_t}.  So, instead of
757 @smallexample
758 mode = va_arg (ap, mode_t);
759 @end smallexample
760 you have to write
761 @smallexample
762 mode = (sizeof (mode_t) < sizeof (int)
763         ? va_arg (ap, int)
764         : va_arg (ap, mode_t));
765 @end smallexample
766
767 @item va_copy
768 Some platforms don't provide this macro.  You can use __va_copy where
769 available instead, or otherwise an assignment or @code{memcpy} call.
770
771 @item vfprintf
772 On NetBSD and Windows, this function doesn't support format directives that
773 access arguments in an arbitrary order, such as @code{"%2$s"}.  The fix is to
774 include @file{<libintl.h>} from GNU gettext; it redefines this function so that
775 it is POSIX compliant.
776
777 On Windows, this function doesn't support the @code{'} flag and the @code{hh},
778 @code{ll}, @code{j}, @code{t}, @code{z} size specifiers.
779
780 @item vfscanf
781 On Windows systems (excluding Cygwin), this function does not set @code{errno}
782 upon failure.
783
784 On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j},
785 @code{t}, @code{z} size specifiers.
786
787 @item vprintf
788 @itemx vsnprintf
789 @itemx vsprintf
790 On NetBSD and Windows, these functions don't support format directives that
791 access arguments in an arbitrary order, such as @code{"%2$s"}.  The fix is to
792 include @file{<libintl.h>} from GNU gettext; it redefines these functions so
793 that they are POSIX compliant.
794
795 On Windows, these functions don't support the @code{'} flag and the @code{hh},
796 @code{ll}, @code{j}, @code{t}, @code{z} size specifiers.
797
798 @item vscanf
799 @item vsscanf
800 On Windows systems (excluding Cygwin), these functions do not set @code{errno}
801 upon failure.
802
803 On Windows, these functions don't support the @code{hh}, @code{ll}, @code{j},
804 @code{t}, @code{z} size specifiers.
805
806 @item vswprintf
807 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
808 accommodate all Unicode characters.
809
810 On Windows, this function does not take a buffer size as second argument.
811
812 @item waitid
813 As of 2005, no system is known on which @code{waitid} with flag @code{WNOWAIT}
814 works correctly.
815
816 @item wcrtomb
817 @itemx wcscat
818 @itemx wcschr
819 @itemx wcscmp
820 @itemx wcscoll
821 @itemx wcscpy
822 @itemx wcscspn
823 @itemx wcsftime
824 @itemx wcslen
825 @itemx wcsncat
826 @itemx wcsncmp
827 @itemx wcsncpy
828 @itemx wcspbrk
829 @itemx wcsrchr
830 @itemx wcsrtombs
831 @itemx wcsspn
832 @itemx wcsstr
833 @itemx wcstod
834 @itemx wcstof
835 @itemx wcstoimax
836 @itemx wcstok
837 @itemx wcstol
838 @itemx wcstold
839 @itemx wcstoll
840 @itemx wcstombs
841 @itemx wcstoul
842 @itemx wcstoull
843 @itemx wcstoumax
844 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
845 accommodate all Unicode characters.
846
847 @item wcswcs
848 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
849 accommodate all Unicode characters.
850
851 This function is marked as ``legacy'' in POSIX.  Better use @code{wcsstr}
852 instead.
853
854 @item wcswidth
855 @itemx wcsxfrm
856 @itemx wctob
857 @itemx wctomb
858 @itemx wctrans
859 @itemx wctype
860 @itemx wcwidth
861 @itemx wmemchr
862 @itemx wmemcmp
863 @itemx wmemcpy
864 @itemx wmemmove
865 @itemx wmemset
866 @itemx wprintf
867 @itemx wscanf
868 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
869 accommodate all Unicode characters.
870
871 @end table