Handle some remarks by Ralf Wildenhues.
[pspp] / 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 accomodate 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 accomodate 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 accomodate 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 accomodate 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 accomodate 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 accomodate 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 accomodate 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 accomodate 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 accomodate 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
385 @item mkstemp
386 On some systems (HP-UX 10.20, SunOS 4.1.4, Solaris 2.5.1), mkstemp has a silly
387 limit that it can create no more than 26 files from a given template.  On
388 OSF/1 4.0f, it can create only 32 files per process.
389
390 On systems other than glibc 2.0.7 or newer, @code{mkstemp} can create a
391 world or group writable or readable file, if you haven't set the process
392 umask to 077.  This is a security risk.
393
394 @item mktemp
395 This function is not appropriate for creating temporary files.  (It has
396 security risks.)  Therefore it is marked as ``legacy'' in POSIX.  Better use
397 @code{mkstemp} instead.
398
399 @item mktime
400 Some implementations of @code{mktime} may go into an endless loop.
401
402 @item mmap
403 To get anonymous memory, on some systems, you can use the flags
404 @code{MAP_ANONYMOUS | MAP_PRIVATE} and @code{-1} instead of a file descriptor;
405 on others you have to use a read-only file descriptor of @file{/dev/zero}.
406
407 On HP-UX, passing a non-NULL first argument, as a hint for the address (even
408 without @code{MAP_FIXED}, often causes @code{mmap} to fail.  Better pass NULL
409 in this case.
410
411 On HP-UX, @code{MAP_FIXED} basically never works.  On other systems, it depends
412 on the circumstances whether memory can be returned at a given address.
413
414 @item mprotect
415 On AIX, it is not possible to use @code{mprotect} on memory regions allocated
416 with @code{malloc}.
417
418 @item msync
419 On NetBSD, @code{msync} takes only two arguments.
420
421 @item nanosleep
422
423 @item nice
424 In glibc before glibc 2.2.4, @code{nice} returned 0 upon success.
425
426 @item nl_langinfo
427 Some older versions of glibc had @code{nl_langinfo} but not the @code{CODESET}
428 macro.
429
430 On Cygwin, which doesn't have locales, @code{nl_langinfo(CODESET)} always
431 returns @code{"US-ASCII"}.
432
433 @item open
434 On Windows, this function returns a file handle in @code{O_TEXT} mode by
435 default; this means that it translates '\n' to CR/LF by default.  Use the
436 @code{O_BINARY} flag if you need reliable binary I/O.
437
438 On platforms where @code{off_t} is a 32-bit type, @code{open} may not work
439 correctly with files larger than 2 GB.  The fix is to use the
440 @code{AC_SYS_LARGEFILE} macro.
441
442 @item poll
443 On MacOS X 10.4.0 and AIX 5.3, this function doesn't work on special files
444 like @file{/dev/null} and ttys like @file{/dev/tty}.
445
446 @item printf
447 On NetBSD and Windows, this function doesn't support format directives that
448 access arguments in an arbitrary order, such as @code{"%2$s"}.  The fix is to
449 include @file{<libintl.h>} from GNU gettext; it redefines this function so that
450 it is POSIX compliant.
451
452 On Windows, this function doesn't support the @code{'} flag and the @code{hh},
453 @code{ll}, @code{j}, @code{t}, @code{z} size specifiers.
454
455 @item pthread_create
456 On Linux/glibc systems before the advent of NPTL, signals could only be
457 sent to one particular thread.  In POSIX, signals are sent to the entire
458 process and executed by any thread of the process that happens to have the
459 particular signal currently unblocked.
460
461 @item putc
462 @itemx putchar
463 @itemx puts
464 On Windows systems (excluding Cygwin), these functions do not set @code{errno}
465 upon failure.
466
467 @item putwc
468 @itemx putwchar
469 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
470 accomodate all Unicode characters.
471
472 @item readlink
473 When @code{readlink} is called on a directory: In the case of NFS mounted
474 directories, Cygwin sets errno to @code{ENOENT} or @code{EIO} instead of
475 @code{EINVAL}.  To avoid this problem, check for a directory before calling
476 @code{readlink}.
477
478 When @code{readlink} is called on a file that is not a symbolic link:
479 Irix may set errno to @code{ENXIO} instead of @code{EINVAL}.  Cygwin may set
480 errno to @code{EACCES} instead of {EINVAL}.
481
482 @item realpath
483 This function does not allow to determine the required size of output buffer;
484 PATH_MAX --- if it is defined --- is nothing more than a guess.
485
486 @item recvfrom
487 Some systems don't have a @code{socklen_t} type; in this case this function's
488 sixth argument type is @samp{int *}.
489
490 @item regcomp
491 @itemx regexec
492 Many regular expression implementations have bugs.
493
494 @item rename
495 This function does not work on SunOS 4.1 when the source file name ends in a
496 slash.
497
498 @item rewind
499 On Windows systems (excluding Cygwin), this function does not set @code{errno}
500 upon failure.
501
502 @item rindex
503 This function is marked as ``legacy'' in POSIX.  Better use @code{strrchr}
504 instead.
505
506 @item rmdir
507 When @code{rmdir} fails because the specified directory is not empty, the
508 @code{errno} value is system dependent.
509
510 @item scanf
511 On Windows systems (excluding Cygwin), this function does not set @code{errno}
512 upon failure.
513
514 On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j},
515 @code{t}, @code{z} size specifiers.
516
517 @item select
518 When you call @code{select} with a timeout, some implementations modify the
519 timeout parameter so that upon return from the function, it contains the
520 amount of time not slept.  Other implementations leave the timeout parameter
521 unmodified.
522
523 On Windows systems (excluding Cygwin) and on BeOS, @code{select} can only be
524 called on descriptors created by the @code{socket} function, not on regular
525 file descriptors.
526
527 On Linux, when some file descriptor refers to a regular file, @code{select}
528 may fail, setting errno to @code{EBADF}.
529
530 @item setcontext
531 The effects of this call are system and compiler optimization dependent,
532 since it restores the contents of register-allocated variables but not
533 the contents of stack-allocated variables.
534
535 @item setenv
536 In some versions of glibc (e.g. 2.3.3), @code{setenv} doesn't fail if the
537 first argument contains a @samp{=} character.
538
539 @item setjmp
540 POSIX does not specify whether @code{setjmp} saves the signal mask in the
541 @code{jmp_buf}.  It does on BSD systems, and on glibc systems when
542 @code{_BSD_SOURCE} is defined; in this case @code{setjmp} behaves like
543 @code{sigsetjmp}, and functions @code{_setjmp} and @code{_longjmp} are
544 available that don't save or restore the signal mask.  On System V systems,
545 and on glibc systems by default, @code{setjmp} doesn't save the signal mask.
546
547 @item setlocale
548 On Cygwin, which doesn't have locales, @code{setlocale(LC_ALL,NULL)} always
549 returns @code{"C"}.
550
551 @item setsockopt
552 Many socket options are not available on all systems.
553
554 @item setvbuf
555 On Windows systems (excluding Cygwin), this function does not set @code{errno}
556 upon failure.
557
558 @item shmat
559 Attempts to @code{shmat} into a previously malloc-ed region fail on SunOS 4,
560 with errno set to @code{EINVAL}, even if there is an @code{munmap} call in
561 between.
562
563 On Linux, the flag @code{SHM_REMAP} is needed in order to force @code{shmat}
564 to replace existing memory mappings in the specify address range.  On other
565 systems, it is not needed.
566
567 @item shmget
568 On many systems (not Linux), SHMMAX is so small that it is unusable for
569 reasonable applications, and/or @code{shmget} requires superuser privileges.
570
571 @item sigaction
572 The symbolic value @code{SIG_IGN} for the @code{SIGCHLD} signal is equivalent
573 to a signal handler
574 @smallexample
575 void handle_child (int sigchld)
576 @{
577   while (waitpid (-1, NULL, WNOHANG) > 0)
578     ;
579 @}
580 @end smallexample
581 except that @code{SIG_IGN} for @code{SIGCHLD} has the effect that the children
582 execution times are not accounted in the @code{times} function.
583 On some systems (BSD? SystemV? Linux?), you need to use the @code{sigaction}
584 flag @code{SA_NOCLDWAIT} in order to obtain this behaviour.
585
586 @item sigaltstack
587 @code{sigaltstack} doesn't work on HP-UX 11/IA-64 and OpenBSD 3.6/Sparc64.
588
589 @item signal
590 On System V systems, when the signal is triggered, the kernel uninstalls the
591 handler (i.e. resets the signal's action to SIG_DFL) before invoking the
592 handler.  This opens the door to race conditions: undesired things happen
593 if the signal is triggered twice and the signal handler was not quick enough
594 reinstalling itself as a handler.  On BSD systems and glibc systems, on the
595 other hand, when the signal is triggered, the kernel blocks the signal
596 before invoking the handler.  This is saner, but POSIX still allows either
597 behaviour.  To avoid this problem, use @code{sigaction} instead of
598 @code{signal}.
599
600 @item sigtimedwait
601 Linux implements the meaning of NULL timeout by doing what @code{sigwaitinfo}
602 does; other systems may not do the same.
603
604 @item sigwait
605 On Linux/glibc systems before the advent of NPTL, signals could only be
606 sent to one particular thread.  In POSIX, signals are sent to the entire
607 process and executed by any thread of the process that happens to have the
608 particular signal currently unblocked.
609
610 @item sleep
611 According to POSIX, the @code{sleep} function may interfere with the program's
612 use of the @code{SIGALRM} signal.  On Linux, it doesn't; on other platforms,
613 it may.
614
615 @item snprintf
616 On NetBSD and Windows, this function doesn't support format directives that
617 access arguments in an arbitrary order, such as @code{"%2$s"}.  The fix is to
618 include @file{<libintl.h>} from GNU gettext; it redefines this function so that
619 it is POSIX compliant.
620
621 On Windows, this function doesn't support the @code{'} flag and the @code{hh},
622 @code{ll}, @code{j}, @code{t}, @code{z} size specifiers.
623
624 @item socket
625 On BeOS, the descriptors returned by the @code{socket} function can not be used
626 in calls to @code{read}, @code{write}, and @code{close}; you have to use
627 @code{recv}, @code{send}, @code{closesocket} in these cases instead.
628
629 @item sprintf
630 On NetBSD and Windows, this function doesn't support format directives that
631 access arguments in an arbitrary order, such as @code{"%2$s"}.  The fix is to
632 include @file{<libintl.h>} from GNU gettext; it redefines this function so that
633 it is POSIX compliant.
634
635 On Windows, this function doesn't support the @code{'} flag and the @code{hh},
636 @code{ll}, @code{j}, @code{t}, @code{z} size specifiers.
637
638 @item sscanf
639 On Windows systems (excluding Cygwin), this function does not set @code{errno}
640 upon failure.
641
642 On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j},
643 @code{t}, @code{z} size specifiers.
644
645 @item stat
646 On platforms where @code{off_t} is a 32-bit type, @code{stat} may not correctly
647 report the size of files or block devices larger than 2 GB.  The fix is to
648 use the @code{AC_SYS_LARGEFILE} macro.
649
650 Cygwin's @code{stat} function sometimes sets errno to @code{EACCES} when
651 @code{ENOENT} would be more appropriate.
652
653 @item strcasecmp
654 @itemx strcasestr
655 As of 2006, no system is known that implements these functions correctly in
656 multibyte locales.
657
658 @item strerror_r
659 glibc has an incompatible version of this function.  The POSIX compliant code
660 @smallexample
661 char *s = (strerror_r (err, buf, buflen) == 0 ? buf : NULL);
662 @end smallexample
663 is essentially equivalent to this code using the glibc function:
664 @smallexample
665 char *s = strerror_r (err, buf, buflen);
666 @end smallexample
667
668 @item strstr
669 As of 2006, no system is known that implements this function correctly in
670 multibyte locales.
671
672 @item swprintf
673 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
674 accomodate all Unicode characters.
675
676 On Windows, this function does not take a buffer size as second argument.
677
678 @item system
679 On Windows systems (excluding Cygwin), the command processor used by the
680 @code{system} function is @file{cmd.exe}, not @file{/bin/sh}.  Accordingly,
681 the rules for quoting shell arguments containing spaces, quote or other special
682 characters are different.
683
684 @item tcdrain
685 On some systems, @code{tcdrain} on a non-tty fails with errno set to
686 @code{EINVAL} or, on MacOS X, also @code{EOPNOTSUPP} or @code{ENODEV}, rather
687 than @code{ENOTTY}.
688
689 @item tcflush
690 On some systems, @code{tcflush} of @code{TCIFLUSH} on a non-tty fails with
691 errno set to @code{EINVAL} rather than @code{ENOTTY}.
692
693 On some systems, @code{tcflush} of @code{TCOFLUSH} on a non-tty fails with
694 errno set to @code{EINVAL} or, on IRIX, also @code{ENOSYS}, or, on MacOS X,
695 also @code{EOPNOTSUPP} or @code{ENODEV}, rather than @code{ENOTTY}.
696
697 @item tempnam
698 This function is not appropriate for creating temporary files.  (It has
699 security risks.)  Better use @code{mkstemp} instead.
700
701 @item tmpnam
702 This function is not appropriate for creating temporary files.  (It has
703 security risks.)  Better use @code{mkstemp} instead.
704
705 @item towctrans
706 @itemx towlower
707 @itemx towupper
708 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
709 accomodate all Unicode characters.
710
711 @item ungetc
712 On Windows systems (excluding Cygwin), this function does not set @code{errno}
713 upon failure.
714
715 @item ungetwc
716 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
717 accomodate all Unicode characters.
718
719 @item unlink
720 Removing an open file is unportable: On Unix this allows the programs that
721 have the file already open to continue working with it; the file's storage
722 is only freed when the no process has the file open any more.  On Windows,
723 the attempt to remove an open file fails.
724
725 @item usleep
726 According to POSIX, the @code{usleep} function may interfere with the program's
727 use of the @code{SIGALRM} signal.  On Linux, it doesn't; on other platforms,
728 it may.
729
730 @item utime
731 On some systems, @code{utime (file, NULL)} fails to set the file's timestamp
732 to the current time.
733
734 @item utimes
735 This function is marked as ``legacy'' in POSIX.  Better use @code{utime}
736 instead.
737
738 @item va_arg
739 The second argument of @code{va_arg} must be a type that is invariant under
740 the ``default argument promotions'' (ISO C 99 6.5.2.2 paragraph 6).  This
741 means that the following are not valid here:
742 @table @asis
743 @item @samp{float}
744 Use @samp{double} instead.
745 @item @samp{bool}
746 Use @samp{int} instead.
747 @item Integer types smaller than @samp{int}.
748 Use @samp{int} or @samp{unsigned int} instead.
749 @end table
750
751 This is a portability problem because you don't know the width of some
752 abstract types like @code{uid_t}, @code{gid_t}, @code{mode_t}.  So, instead of
753 @smallexample
754 mode = va_arg (ap, mode_t);
755 @end smallexample
756 you have to write
757 @smallexample
758 mode = (sizeof (mode_t) < sizeof (int)
759         ? va_arg (ap, int)
760         : va_arg (ap, mode_t));
761 @end smallexample
762
763 @item va_copy
764 Some platforms don't provide this macro.  You can use __va_copy where
765 available instead, or otherwise an assignment or @code{memcpy} call.
766
767 @item vfprintf
768 On NetBSD and Windows, this function doesn't support format directives that
769 access arguments in an arbitrary order, such as @code{"%2$s"}.  The fix is to
770 include @file{<libintl.h>} from GNU gettext; it redefines this function so that
771 it is POSIX compliant.
772
773 On Windows, this function doesn't support the @code{'} flag and the @code{hh},
774 @code{ll}, @code{j}, @code{t}, @code{z} size specifiers.
775
776 @item vfscanf
777 On Windows systems (excluding Cygwin), this function does not set @code{errno}
778 upon failure.
779
780 On Windows, this function doesn't support the @code{hh}, @code{ll}, @code{j},
781 @code{t}, @code{z} size specifiers.
782
783 @item vprintf
784 @itemx vsnprintf
785 @itemx vsprintf
786 On NetBSD and Windows, these functions don't support format directives that
787 access arguments in an arbitrary order, such as @code{"%2$s"}.  The fix is to
788 include @file{<libintl.h>} from GNU gettext; it redefines these functions so
789 that they are POSIX compliant.
790
791 On Windows, these functions don't support the @code{'} flag and the @code{hh},
792 @code{ll}, @code{j}, @code{t}, @code{z} size specifiers.
793
794 @item vscanf
795 @item vsscanf
796 On Windows systems (excluding Cygwin), these functions do not set @code{errno}
797 upon failure.
798
799 On Windows, these functions don't support the @code{hh}, @code{ll}, @code{j},
800 @code{t}, @code{z} size specifiers.
801
802 @item vswprintf
803 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
804 accomodate all Unicode characters.
805
806 On Windows, this function does not take a buffer size as second argument.
807
808 @item waitid
809 As of 2005, no system is known on which @code{waitid} with flag @code{WNOWAIT}
810 works correctly.
811
812 @item wcrtomb
813 @itemx wcscat
814 @itemx wcschr
815 @itemx wcscmp
816 @itemx wcscoll
817 @itemx wcscpy
818 @itemx wcscspn
819 @itemx wcsftime
820 @itemx wcslen
821 @itemx wcsncat
822 @itemx wcsncmp
823 @itemx wcsncpy
824 @itemx wcspbrk
825 @itemx wcsrchr
826 @itemx wcsrtombs
827 @itemx wcsspn
828 @itemx wcsstr
829 @itemx wcstod
830 @itemx wcstof
831 @itemx wcstoimax
832 @itemx wcstok
833 @itemx wcstol
834 @itemx wcstold
835 @itemx wcstoll
836 @itemx wcstombs
837 @itemx wcstoul
838 @itemx wcstoull
839 @itemx wcstoumax
840 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
841 accomodate all Unicode characters.
842
843 @item wcswcs
844 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
845 accomodate all Unicode characters.
846
847 This function is marked as ``legacy'' in POSIX.  Better use @code{wcsstr}
848 instead.
849
850 @item wcswidth
851 @itemx wcsxfrm
852 @itemx wctob
853 @itemx wctomb
854 @itemx wctrans
855 @itemx wctype
856 @itemx wcwidth
857 @itemx wmemchr
858 @itemx wmemcmp
859 @itemx wmemcpy
860 @itemx wmemmove
861 @itemx wmemset
862 @itemx wprintf
863 @itemx wscanf
864 On Windows systems, @code{wchar_t} is a 16-bit type and therefore cannot
865 accomodate all Unicode characters.
866
867 @end table