|
|
# |
|
|
# Synchronize RHEL 7.1 manual with upstream manual. |
|
|
# |
|
|
# Include updates that don't impact material differences |
|
|
# between the upstream master and 2.17-based RHEL implemenation. |
|
|
# |
|
|
diff -urN glibc-2.17-c758a686/manual/argp.texi glibc-2.17-c758a686/manual/argp.texi |
|
|
--- glibc-2.17-c758a686/manual/argp.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/argp.texi 2014-09-12 16:10:06.043792722 -0400 |
|
|
@@ -36,6 +36,35 @@ |
|
|
@comment argp.h |
|
|
@comment GNU |
|
|
@deftypefun {error_t} argp_parse (const struct argp *@var{argp}, int @var{argc}, char **@var{argv}, unsigned @var{flags}, int *@var{arg_index}, void *@var{input}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:argpbuf} @mtslocale{} @mtsenv{}}@asunsafe{@ascuheap{} @ascuintl{} @asulock{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
+@c Optionally alloca()tes standard help options, initializes the parser, |
|
|
+@c then parses individual args in a loop, and then finalizes. |
|
|
+@c parser_init |
|
|
+@c calc_sizes ok |
|
|
+@c option_is_end ok |
|
|
+@c malloc @ascuheap @acsmem |
|
|
+@c parser_convert @mtslocale |
|
|
+@c convert_options @mtslocale |
|
|
+@c option_is_end ok |
|
|
+@c option_is_short ok |
|
|
+@c isprint, but locale may change within the loop |
|
|
+@c find_long_option ok |
|
|
+@c group_parse |
|
|
+@c group->parser (from argp->parser) |
|
|
+@c parser_parse_next |
|
|
+@c getopt_long(_only)_r many issues, same as non_r minus @mtasurace |
|
|
+@c parser_parse_arg |
|
|
+@c group_parse dup |
|
|
+@c parser_parse_opt |
|
|
+@c group_parse dup |
|
|
+@c argp_error dup @mtasurace:argpbuf @mtsenv @mtslocale @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock |
|
|
+@c dgettext (bad key error) dup @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c parser_finalize |
|
|
+@c group_parse |
|
|
+@c fprintf dup @mtslocale @asucorrupt @aculock @acucorrupt [no @ascuheap @acsmem] |
|
|
+@c dgettext dup @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c arg_state_help |
|
|
+@c free dup @ascuhelp @acsmem |
|
|
The @code{argp_parse} function parses the arguments in @var{argv}, of |
|
|
length @var{argc}, using the argp parser @var{argp}. @xref{Argp |
|
|
Parsers}. Passing a null pointer for @var{argp} is the same as using |
|
|
@@ -660,6 +689,8 @@ |
|
|
@comment argp.h |
|
|
@comment GNU |
|
|
@deftypefun void argp_usage (const struct argp_state *@var{state}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:argpbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @ascuintl{} @asucorrupt{}}@acunsafe{@acsmem{} @acucorrupt{} @aculock{}}} |
|
|
+@c Just calls argp_state_help with stderr and ARGP_HELP_STD_USAGE. |
|
|
Outputs the standard usage message for the argp parser referred to by |
|
|
@var{state} to @code{@var{state}->err_stream} and terminate the program |
|
|
with @code{exit (argp_err_exit_status)}. @xref{Argp Global Variables}. |
|
|
@@ -669,6 +700,13 @@ |
|
|
@comment argp.h |
|
|
@comment GNU |
|
|
@deftypefun void argp_error (const struct argp_state *@var{state}, const char *@var{fmt}, @dots{}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:argpbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @ascuintl{} @asucorrupt{}}@acunsafe{@acsmem{} @acucorrupt{} @aculock{}}} |
|
|
+@c Lock stream, vasprintf the formatted message into a buffer, print the |
|
|
+@c buffer prefixed by the short program name (in libc, |
|
|
+@c argp_short_program_name is a macro that expands to |
|
|
+@c program_invocation_short_name), releases the buffer, then call |
|
|
+@c argp_state_help with stream and ARGP_HELP_STD_ERR, unlocking the |
|
|
+@c stream at the end. |
|
|
Prints the printf format string @var{fmt} and following args, preceded |
|
|
by the program name and @samp{:}, and followed by a @w{@samp{Try @dots{} |
|
|
--help}} message, and terminates the program with an exit status of |
|
|
@@ -679,6 +717,12 @@ |
|
|
@comment argp.h |
|
|
@comment GNU |
|
|
@deftypefun void argp_failure (const struct argp_state *@var{state}, int @var{status}, int @var{errnum}, const char *@var{fmt}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{}}} |
|
|
+@c Lock stream, write out the short program name, vasprintf the optional |
|
|
+@c formatted message to a buffer, print the buffer prefixed by colon and |
|
|
+@c blank, release the buffer, call strerror_r with an automatic buffer, |
|
|
+@c print it out after colon and blank, put[w]c a line break, unlock the |
|
|
+@c stream, then exit unless ARGP_NO_EXIT. |
|
|
Similar to the standard gnu error-reporting function @code{error}, this |
|
|
prints the program name and @samp{:}, the printf format string |
|
|
@var{fmt}, and the appropriate following args. If it is non-zero, the |
|
|
@@ -695,6 +739,142 @@ |
|
|
@comment argp.h |
|
|
@comment GNU |
|
|
@deftypefun void argp_state_help (const struct argp_state *@var{state}, FILE *@var{stream}, unsigned @var{flags}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:argpbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @ascuintl{} @asucorrupt{}}@acunsafe{@acsmem{} @acucorrupt{} @aculock{}}} |
|
|
+@c Just calls _help with the short program name and optionally exit. |
|
|
+@c The main problems in _help, besides the usual issues with stream I/O |
|
|
+@c and translation, are the use of a static buffer (uparams, thus |
|
|
+@c @mtasurace:argpbuf) that makes the whole thing thread-unsafe, reading |
|
|
+@c from the environment for ARGP_HELP_FMT, accessing the locale object |
|
|
+@c multiple times. |
|
|
+ |
|
|
+@c _help @mtsenv @mtasurace:argpbuf @mtslocale @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock |
|
|
+@c dgettext @ascuintl |
|
|
+@c flockfile @aculock |
|
|
+@c funlockfile @aculock |
|
|
+@c fill_in_uparams @mtsenv @mtasurace:argpbuf @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem |
|
|
+@c argp_failure dup (status = errnum = 0) |
|
|
+@c atoi dup @mtslocale |
|
|
+@c argp_hol @ascuheap @acsmem |
|
|
+@c make_hol @ascuheap @acsmem |
|
|
+@c hol_add_cluster @ascuheap @acsmem |
|
|
+@c hol_append @ascuheap @acsmem |
|
|
+@c hol_set_group ok |
|
|
+@c hol_find_entry ok |
|
|
+@c hol_sort @mtslocale @acucorrupt |
|
|
+@c qsort dup @acucorrupt |
|
|
+@c hol_entry_qcmp @mtslocale |
|
|
+@c hol_entry_cmp @mtslocale |
|
|
+@c group_cmp ok |
|
|
+@c hol_cluster_cmp ok |
|
|
+@c group_cmp ok |
|
|
+@c hol_entry_first_short @mtslocale |
|
|
+@c hol_entry_short_iterate [@mtslocale] |
|
|
+@c until_short ok |
|
|
+@c oshort ok |
|
|
+@c isprint ok |
|
|
+@c odoc ok |
|
|
+@c hol_entry_first_long ok |
|
|
+@c canon_doc_option @mtslocale |
|
|
+@c tolower dup |
|
|
+@c hol_usage @mtslocale @ascuintl @ascuheap @acsmem |
|
|
+@c hol_entry_short_iterate ok |
|
|
+@c add_argless_short_opt ok |
|
|
+@c argp_fmtstream_printf dup |
|
|
+@c hol_entry_short_iterate @mtslocale @ascuintl @ascuheap @acsmem |
|
|
+@c usage_argful_short_opt @mtslocale @ascuintl @ascuheap @acsmem |
|
|
+@c dgettext dup |
|
|
+@c argp_fmtstream_printf dup |
|
|
+@c hol_entry_long_iterate @mtslocale @ascuintl @ascuheap @acsmem |
|
|
+@c usage_long_opt @mtslocale @ascuintl @ascuheap @acsmem |
|
|
+@c dgettext dup |
|
|
+@c argp_fmtstream_printf dup |
|
|
+@c hol_help @mtslocale @mtasurace:argpbuf @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock |
|
|
+@c hol_entry_help @mtslocale @mtasurace:argpbuf @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock |
|
|
+@c argp_fmtstream_set_lmargin dup |
|
|
+@c argp_fmtstream_wmargin dup |
|
|
+@c argp_fmtstream_set_wmargin dup |
|
|
+@c comma @mtslocale @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock |
|
|
+@c argp_fmtstream_putc dup |
|
|
+@c hol_cluster_is_child ok |
|
|
+@c argp_fmtstream_wmargin dup |
|
|
+@c print_header dup |
|
|
+@c argp_fmtstream_set_wmargin dup |
|
|
+@c argp_fmtstream_puts dup |
|
|
+@c indent_to dup |
|
|
+@c argp_fmtstream_putc dup |
|
|
+@c arg @mtslocale @ascuheap @acsmem |
|
|
+@c argp_fmtstream_printf dup |
|
|
+@c odoc dup |
|
|
+@c argp_fmtstream_puts dup |
|
|
+@c argp_fmtstream_printf dup |
|
|
+@c print_header @mtslocale @mtasurace:argpbuf @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock |
|
|
+@c dgettext dup |
|
|
+@c filter_doc dup |
|
|
+@c argp_fmtstream_putc dup |
|
|
+@c indent_to dup |
|
|
+@c argp_fmtstream_set_lmargin dup |
|
|
+@c argp_fmtstream_set_wmargin dup |
|
|
+@c argp_fmtstream_puts dup |
|
|
+@c free dup |
|
|
+@c filter_doc dup |
|
|
+@c argp_fmtstream_point dup |
|
|
+@c indent_to @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock |
|
|
+@c argp_fmtstream_point dup |
|
|
+@c argp_fmtstream_putc dup |
|
|
+@c dgettext dup |
|
|
+@c filter_doc dup |
|
|
+@c argp_fmtstream_putc dup |
|
|
+@c argp_fmtstream_puts dup |
|
|
+@c free dup |
|
|
+@c hol_free @ascuheap @acsmem |
|
|
+@c free dup |
|
|
+@c argp_args_levels ok |
|
|
+@c argp_args_usage @mtslocale @ascuintl @ascuheap @asucorrupt @acsmem @acucorrupt @aculock |
|
|
+@c dgettext dup |
|
|
+@c filter_doc ok |
|
|
+@c argp_input ok |
|
|
+@c argp->help_filter |
|
|
+@c space @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock |
|
|
+@c argp_fmtstream_point dup |
|
|
+@c argp_fmtstream_rmargin @mtslocale @asucorrupt @acucorrupt @aculock |
|
|
+@c argp_fmtstream_update dup |
|
|
+@c argp_fmtstream_putc dup |
|
|
+@c argp_fmtstream_write dup |
|
|
+@c free dup |
|
|
+@c argp_doc @mtslocale @ascuheap @ascuintl @asucorrupt @acsmem @acucorrupt @aculock |
|
|
+@c dgettext @ascuintl |
|
|
+@c strndup @ascuheap @acsmem |
|
|
+@c argp_input dup |
|
|
+@c argp->help_filter |
|
|
+@c argp_fmtstream_putc @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock |
|
|
+@c argp_fmtstream_ensure dup |
|
|
+@c argp_fmtstream_write dup |
|
|
+@c argp_fmtstream_puts dup |
|
|
+@c argp_fmtstream_point @mtslocale @asucorrupt @acucorrupt @aculock |
|
|
+@c argp_fmtstream_update dup |
|
|
+@c argp_fmtstream_lmargin dup |
|
|
+@c free dup |
|
|
+@c argp_make_fmtstream @ascuheap @acsmem |
|
|
+@c argp_fmtstream_free @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock |
|
|
+@c argp_fmtstream_update @mtslocale @asucorrupt @acucorrupt @aculock |
|
|
+@c put[w]c_unlocked dup |
|
|
+@c isblank in loop @mtslocale |
|
|
+@c fxprintf @aculock |
|
|
+@c fxprintf @aculock |
|
|
+@c free dup |
|
|
+@c argp_fmtstream_set_wmargin @mtslocale @asucorrupt @acucorrupt @aculock |
|
|
+@c argp_fmtstream_update dup |
|
|
+@c argp_fmtstream_printf @mtslocale @ascuheap @acsmem |
|
|
+@c argp_fmtstream_ensure dup |
|
|
+@c vsnprintf dup |
|
|
+@c argp_fmtstream_set_lmargin @mtslocale @asucorrupt @acucorrupt @aculock |
|
|
+@c argp_fmtstream_update dup |
|
|
+@c argp_fmtstream_puts @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock |
|
|
+@c argp_fmtstream_write @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock |
|
|
+@c argp_fmtstream_ensure @mtslocale @ascuheap @asucorrupt @acsmem @acucorrupt @aculock |
|
|
+@c argp_fmtstream_update dup |
|
|
+@c fxprintf @aculock |
|
|
+@c realloc @ascuheap @acsmem |
|
|
Outputs a help message for the argp parser referred to by @var{state}, |
|
|
to @var{stream}. The @var{flags} argument determines what sort of help |
|
|
message is produced. @xref{Argp Help Flags}. |
|
|
@@ -928,6 +1108,8 @@ |
|
|
@comment argp.h |
|
|
@comment GNU |
|
|
@deftypefun void argp_help (const struct argp *@var{argp}, FILE *@var{stream}, unsigned @var{flags}, char *@var{name}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:argpbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @ascuintl{} @asucorrupt{}}@acunsafe{@acsmem{} @acucorrupt{} @aculock{}}} |
|
|
+@c Just calls _help. |
|
|
This outputs a help message for the argp parser @var{argp} to |
|
|
@var{stream}. The type of messages printed will be determined by |
|
|
@var{flags}. |
|
|
diff -urN glibc-2.17-c758a686/manual/arith.texi glibc-2.17-c758a686/manual/arith.texi |
|
|
--- glibc-2.17-c758a686/manual/arith.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/arith.texi 2014-09-12 16:10:06.043792722 -0400 |
|
|
@@ -160,6 +160,8 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun div_t div (int @var{numerator}, int @var{denominator}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Functions in this section are pure, and thus safe. |
|
|
This function @code{div} computes the quotient and remainder from |
|
|
the division of @var{numerator} by @var{denominator}, returning the |
|
|
result in a structure of type @code{div_t}. |
|
|
@@ -199,6 +201,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun ldiv_t ldiv (long int @var{numerator}, long int @var{denominator}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{ldiv} function is similar to @code{div}, except that the |
|
|
arguments are of type @code{long int} and the result is returned as a |
|
|
structure of type @code{ldiv_t}. |
|
|
@@ -225,6 +228,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun lldiv_t lldiv (long long int @var{numerator}, long long int @var{denominator}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{lldiv} function is like the @code{div} function, but the |
|
|
arguments are of type @code{long long int} and the result is returned as |
|
|
a structure of type @code{lldiv_t}. |
|
|
@@ -256,6 +260,7 @@ |
|
|
@comment inttypes.h |
|
|
@comment ISO |
|
|
@deftypefun imaxdiv_t imaxdiv (intmax_t @var{numerator}, intmax_t @var{denominator}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{imaxdiv} function is like the @code{div} function, but the |
|
|
arguments are of type @code{intmax_t} and the result is returned as |
|
|
a structure of type @code{imaxdiv_t}. |
|
|
@@ -318,6 +323,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefn {Macro} int fpclassify (@emph{float-type} @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This is a generic macro which works on all floating-point types and |
|
|
which returns a value of type @code{int}. The possible values are: |
|
|
|
|
|
@@ -354,6 +360,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefn {Macro} int isfinite (@emph{float-type} @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro returns a nonzero value if @var{x} is finite: not plus or |
|
|
minus infinity, and not NaN. It is equivalent to |
|
|
|
|
|
@@ -368,6 +375,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefn {Macro} int isnormal (@emph{float-type} @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro returns a nonzero value if @var{x} is finite and normalized. |
|
|
It is equivalent to |
|
|
|
|
|
@@ -379,6 +387,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefn {Macro} int isnan (@emph{float-type} @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro returns a nonzero value if @var{x} is NaN. It is equivalent |
|
|
to |
|
|
|
|
|
@@ -387,6 +396,15 @@ |
|
|
@end smallexample |
|
|
@end deftypefn |
|
|
|
|
|
+@comment math.h |
|
|
+@comment GNU |
|
|
+@deftypefn {Macro} int issignaling (@emph{float-type} @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+This macro returns a nonzero value if @var{x} is a signaling NaN |
|
|
+(sNaN). It is based on draft TS 18661 and currently enabled as a GNU |
|
|
+extension. |
|
|
+@end deftypefn |
|
|
+ |
|
|
Another set of floating-point classification functions was provided by |
|
|
BSD. @Theglibc{} also supports these functions; however, we |
|
|
recommend that you use the ISO C99 macros in new code. Those are standard |
|
|
@@ -402,6 +420,7 @@ |
|
|
@comment math.h |
|
|
@comment BSD |
|
|
@deftypefunx int isinfl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function returns @code{-1} if @var{x} represents negative infinity, |
|
|
@code{1} if @var{x} represents positive infinity, and @code{0} otherwise. |
|
|
@end deftypefun |
|
|
@@ -415,6 +434,7 @@ |
|
|
@comment math.h |
|
|
@comment BSD |
|
|
@deftypefunx int isnanl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function returns a nonzero value if @var{x} is a ``not a number'' |
|
|
value, and zero otherwise. |
|
|
|
|
|
@@ -437,6 +457,7 @@ |
|
|
@comment math.h |
|
|
@comment BSD |
|
|
@deftypefunx int finitel (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function returns a nonzero value if @var{x} is finite or a ``not a |
|
|
number'' value, and zero otherwise. |
|
|
@end deftypefun |
|
|
@@ -489,7 +510,8 @@ |
|
|
is called when certain exceptions occur inside math library functions. |
|
|
However, the Unix98 standard deprecates this interface. We support it |
|
|
for historical compatibility, but recommend that you do not use it in |
|
|
-new programs. |
|
|
+new programs. When this interface is used, exceptions may not be |
|
|
+raised. |
|
|
|
|
|
@noindent |
|
|
The exceptions defined in @w{IEEE 754} are: |
|
|
@@ -705,6 +727,14 @@ |
|
|
@comment fenv.h |
|
|
@comment ISO |
|
|
@deftypefun int feclearexcept (int @var{excepts}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{@assposix{}}@acsafe{@acsposix{}}} |
|
|
+@c The other functions in this section that modify FP status register |
|
|
+@c mostly do so with non-atomic load-modify-store sequences, but since |
|
|
+@c the register is thread-specific, this should be fine, and safe for |
|
|
+@c cancellation. As long as the FP environment is restored before the |
|
|
+@c signal handler returns control to the interrupted thread (like any |
|
|
+@c kernel should do), the functions are also safe for use in signal |
|
|
+@c handlers. |
|
|
This function clears all of the supported exception flags indicated by |
|
|
@var{excepts}. |
|
|
|
|
|
@@ -715,6 +745,7 @@ |
|
|
@comment fenv.h |
|
|
@comment ISO |
|
|
@deftypefun int feraiseexcept (int @var{excepts}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function raises the supported exceptions indicated by |
|
|
@var{excepts}. If more than one exception bit in @var{excepts} is set |
|
|
the order in which the exceptions are raised is undefined except that |
|
|
@@ -730,6 +761,7 @@ |
|
|
@comment fenv.h |
|
|
@comment ISO |
|
|
@deftypefun int fetestexcept (int @var{excepts}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Test whether the exception flags indicated by the parameter @var{except} |
|
|
are currently set. If any of them are, a nonzero value is returned |
|
|
which specifies which exceptions are set. Otherwise the result is zero. |
|
|
@@ -766,6 +798,7 @@ |
|
|
@comment fenv.h |
|
|
@comment ISO |
|
|
@deftypefun int fegetexceptflag (fexcept_t *@var{flagp}, int @var{excepts}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function stores in the variable pointed to by @var{flagp} an |
|
|
implementation-defined value representing the current setting of the |
|
|
exception flags indicated by @var{excepts}. |
|
|
@@ -777,6 +810,7 @@ |
|
|
@comment fenv.h |
|
|
@comment ISO |
|
|
@deftypefun int fesetexceptflag (const fexcept_t *@var{flagp}, int @var{excepts}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function restores the flags for the exceptions indicated by |
|
|
@var{excepts} to the values stored in the variable pointed to by |
|
|
@var{flagp}. |
|
|
@@ -798,7 +832,8 @@ |
|
|
Many of the math functions are defined only over a subset of the real or |
|
|
complex numbers. Even if they are mathematically defined, their result |
|
|
may be larger or smaller than the range representable by their return |
|
|
-type. These are known as @dfn{domain errors}, @dfn{overflows}, and |
|
|
+type without loss of accuracy. These are known as @dfn{domain errors}, |
|
|
+@dfn{overflows}, and |
|
|
@dfn{underflows}, respectively. Math functions do several things when |
|
|
one of these errors occurs. In this manual we will refer to the |
|
|
complete response as @dfn{signalling} a domain error, overflow, or |
|
|
@@ -808,11 +843,20 @@ |
|
|
exception and returns NaN. It also sets @var{errno} to @code{EDOM}; |
|
|
this is for compatibility with old systems that do not support @w{IEEE |
|
|
754} exception handling. Likewise, when overflow occurs, math |
|
|
-functions raise the overflow exception and return @math{@infinity{}} or |
|
|
-@math{-@infinity{}} as appropriate. They also set @var{errno} to |
|
|
-@code{ERANGE}. When underflow occurs, the underflow exception is |
|
|
-raised, and zero (appropriately signed) is returned. @var{errno} may be |
|
|
-set to @code{ERANGE}, but this is not guaranteed. |
|
|
+functions raise the overflow exception and, in the default rounding |
|
|
+mode, return @math{@infinity{}} or @math{-@infinity{}} as appropriate |
|
|
+(in other rounding modes, the largest finite value of the appropriate |
|
|
+sign is returned when appropriate for that rounding mode). They also |
|
|
+set @var{errno} to @code{ERANGE} if returning @math{@infinity{}} or |
|
|
+@math{-@infinity{}}; @var{errno} may or may not be set to |
|
|
+@code{ERANGE} when a finite value is returned on overflow. When |
|
|
+underflow occurs, the underflow exception is raised, and zero |
|
|
+(appropriately signed) or a subnormal value, as appropriate for the |
|
|
+mathematical result of the function and the rounding mode, is |
|
|
+returned. @var{errno} may be set to @code{ERANGE}, but this is not |
|
|
+guaranteed; it is intended that @theglibc{} should set it when the |
|
|
+underflow is to an appropriately signed zero, but not necessarily for |
|
|
+other underflows. |
|
|
|
|
|
Some of the math functions are defined mathematically to result in a |
|
|
complex value over parts of their domains. The most familiar example of |
|
|
@@ -932,6 +976,7 @@ |
|
|
@comment fenv.h |
|
|
@comment ISO |
|
|
@deftypefun int fegetround (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Returns the currently selected rounding mode, represented by one of the |
|
|
values of the defined rounding mode macros. |
|
|
@end deftypefun |
|
|
@@ -942,6 +987,7 @@ |
|
|
@comment fenv.h |
|
|
@comment ISO |
|
|
@deftypefun int fesetround (int @var{round}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Changes the currently selected rounding mode to @var{round}. If |
|
|
@var{round} does not correspond to one of the supported rounding modes |
|
|
nothing is changed. @code{fesetround} returns zero if it changed the |
|
|
@@ -986,6 +1032,7 @@ |
|
|
@comment fenv.h |
|
|
@comment ISO |
|
|
@deftypefun int fegetenv (fenv_t *@var{envp}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Store the floating-point environment in the variable pointed to by |
|
|
@var{envp}. |
|
|
|
|
|
@@ -996,6 +1043,7 @@ |
|
|
@comment fenv.h |
|
|
@comment ISO |
|
|
@deftypefun int feholdexcept (fenv_t *@var{envp}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Store the current floating-point environment in the object pointed to by |
|
|
@var{envp}. Then clear all exception flags, and set the FPU to trap no |
|
|
exceptions. Not all FPUs support trapping no exceptions; if |
|
|
@@ -1034,6 +1082,7 @@ |
|
|
@comment fenv.h |
|
|
@comment ISO |
|
|
@deftypefun int fesetenv (const fenv_t *@var{envp}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Set the floating-point environment to that described by @var{envp}. |
|
|
|
|
|
The function returns zero in case the operation was successful, a |
|
|
@@ -1043,6 +1092,7 @@ |
|
|
@comment fenv.h |
|
|
@comment ISO |
|
|
@deftypefun int feupdateenv (const fenv_t *@var{envp}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Like @code{fesetenv}, this function sets the floating-point environment |
|
|
to that described by @var{envp}. However, if any exceptions were |
|
|
flagged in the status word before @code{feupdateenv} was called, they |
|
|
@@ -1063,6 +1113,7 @@ |
|
|
@comment fenv.h |
|
|
@comment GNU |
|
|
@deftypefun int feenableexcept (int @var{excepts}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This functions enables traps for each of the exceptions as indicated by |
|
|
the parameter @var{except}. The individual exceptions are described in |
|
|
@ref{Status bit operations}. Only the specified exceptions are |
|
|
@@ -1075,6 +1126,7 @@ |
|
|
@comment fenv.h |
|
|
@comment GNU |
|
|
@deftypefun int fedisableexcept (int @var{excepts}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This functions disables traps for each of the exceptions as indicated by |
|
|
the parameter @var{except}. The individual exceptions are described in |
|
|
@ref{Status bit operations}. Only the specified exceptions are |
|
|
@@ -1086,7 +1138,8 @@ |
|
|
|
|
|
@comment fenv.h |
|
|
@comment GNU |
|
|
-@deftypefun int fegetexcept (int @var{excepts}) |
|
|
+@deftypefun int fegetexcept (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The function returns a bitmask of all currently enabled exceptions. It |
|
|
returns @code{-1} in case of failure. |
|
|
@end deftypefun |
|
|
@@ -1138,6 +1191,7 @@ |
|
|
@comment inttypes.h |
|
|
@comment ISO |
|
|
@deftypefunx intmax_t imaxabs (intmax_t @var{number}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the absolute value of @var{number}. |
|
|
|
|
|
Most computers use a two's complement integer representation, in which |
|
|
@@ -1159,6 +1213,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} fabsl (long double @var{number}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function returns the absolute value of the floating-point number |
|
|
@var{number}. |
|
|
@end deftypefun |
|
|
@@ -1172,6 +1227,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} cabsl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the absolute value of the complex number @var{z} |
|
|
(@pxref{Complex Numbers}). The absolute value of a complex number is: |
|
|
|
|
|
@@ -1181,7 +1237,7 @@ |
|
|
|
|
|
This function should always be used instead of the direct formula |
|
|
because it takes special care to avoid losing precision. It may also |
|
|
-take advantage of hardware support for this operation. See @code{hypot} |
|
|
+take advantage of hardware support for this operation. See @code{hypot} |
|
|
in @ref{Exponents and Logarithms}. |
|
|
@end deftypefun |
|
|
|
|
|
@@ -1209,12 +1265,13 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} frexpl (long double @var{value}, int *@var{exponent}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions are used to split the number @var{value} |
|
|
into a normalized fraction and an exponent. |
|
|
|
|
|
If the argument @var{value} is not zero, the return value is @var{value} |
|
|
-times a power of two, and is always in the range 1/2 (inclusive) to 1 |
|
|
-(exclusive). The corresponding exponent is stored in |
|
|
+times a power of two, and its magnitude is always in the range 1/2 |
|
|
+(inclusive) to 1 (exclusive). The corresponding exponent is stored in |
|
|
@code{*@var{exponent}}; the return value multiplied by 2 raised to this |
|
|
exponent equals the original number @var{value}. |
|
|
|
|
|
@@ -1234,6 +1291,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} ldexpl (long double @var{value}, int @var{exponent}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the result of multiplying the floating-point |
|
|
number @var{value} by 2 raised to the power @var{exponent}. (It can |
|
|
be used to reassemble floating-point numbers that were taken apart |
|
|
@@ -1248,51 +1306,55 @@ |
|
|
|
|
|
@comment math.h |
|
|
@comment BSD |
|
|
-@deftypefun double scalb (double @var{value}, int @var{exponent}) |
|
|
+@deftypefun double scalb (double @var{value}, double @var{exponent}) |
|
|
@comment math.h |
|
|
@comment BSD |
|
|
-@deftypefunx float scalbf (float @var{value}, int @var{exponent}) |
|
|
+@deftypefunx float scalbf (float @var{value}, float @var{exponent}) |
|
|
@comment math.h |
|
|
@comment BSD |
|
|
-@deftypefunx {long double} scalbl (long double @var{value}, int @var{exponent}) |
|
|
+@deftypefunx {long double} scalbl (long double @var{value}, long double @var{exponent}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{scalb} function is the BSD name for @code{ldexp}. |
|
|
@end deftypefun |
|
|
|
|
|
@comment math.h |
|
|
@comment BSD |
|
|
-@deftypefun {long long int} scalbn (double @var{x}, int @var{n}) |
|
|
+@deftypefun double scalbn (double @var{x}, int @var{n}) |
|
|
@comment math.h |
|
|
@comment BSD |
|
|
-@deftypefunx {long long int} scalbnf (float @var{x}, int @var{n}) |
|
|
+@deftypefunx float scalbnf (float @var{x}, int @var{n}) |
|
|
@comment math.h |
|
|
@comment BSD |
|
|
-@deftypefunx {long long int} scalbnl (long double @var{x}, int @var{n}) |
|
|
+@deftypefunx {long double} scalbnl (long double @var{x}, int @var{n}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{scalbn} is identical to @code{scalb}, except that the exponent |
|
|
@var{n} is an @code{int} instead of a floating-point number. |
|
|
@end deftypefun |
|
|
|
|
|
@comment math.h |
|
|
@comment BSD |
|
|
-@deftypefun {long long int} scalbln (double @var{x}, long int @var{n}) |
|
|
+@deftypefun double scalbln (double @var{x}, long int @var{n}) |
|
|
@comment math.h |
|
|
@comment BSD |
|
|
-@deftypefunx {long long int} scalblnf (float @var{x}, long int @var{n}) |
|
|
+@deftypefunx float scalblnf (float @var{x}, long int @var{n}) |
|
|
@comment math.h |
|
|
@comment BSD |
|
|
-@deftypefunx {long long int} scalblnl (long double @var{x}, long int @var{n}) |
|
|
+@deftypefunx {long double} scalblnl (long double @var{x}, long int @var{n}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{scalbln} is identical to @code{scalb}, except that the exponent |
|
|
@var{n} is a @code{long int} instead of a floating-point number. |
|
|
@end deftypefun |
|
|
|
|
|
@comment math.h |
|
|
@comment BSD |
|
|
-@deftypefun {long long int} significand (double @var{x}) |
|
|
+@deftypefun double significand (double @var{x}) |
|
|
@comment math.h |
|
|
@comment BSD |
|
|
-@deftypefunx {long long int} significandf (float @var{x}) |
|
|
+@deftypefunx float significandf (float @var{x}) |
|
|
@comment math.h |
|
|
@comment BSD |
|
|
-@deftypefunx {long long int} significandl (long double @var{x}) |
|
|
+@deftypefunx {long double} significandl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{significand} returns the mantissa of @var{x} scaled to the range |
|
|
@math{[1, 2)}. |
|
|
It is equivalent to @w{@code{scalb (@var{x}, (double) -ilogb (@var{x}))}}. |
|
|
@@ -1307,7 +1369,7 @@ |
|
|
|
|
|
@pindex math.h |
|
|
The functions listed here perform operations such as rounding and |
|
|
-truncation of floating-point values. Some of these functions convert |
|
|
+truncation of floating-point values. Some of these functions convert |
|
|
floating point numbers to integer values. They are all declared in |
|
|
@file{math.h}. |
|
|
|
|
|
@@ -1327,6 +1389,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} ceill (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions round @var{x} upwards to the nearest integer, |
|
|
returning that value as a @code{double}. Thus, @code{ceil (1.5)} |
|
|
is @code{2.0}. |
|
|
@@ -1341,6 +1404,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} floorl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions round @var{x} downwards to the nearest |
|
|
integer, returning that value as a @code{double}. Thus, @code{floor |
|
|
(1.5)} is @code{1.0} and @code{floor (-1.5)} is @code{-2.0}. |
|
|
@@ -1355,6 +1419,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} truncl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{trunc} functions round @var{x} towards zero to the nearest |
|
|
integer (returned in floating-point format). Thus, @code{trunc (1.5)} |
|
|
is @code{1.0} and @code{trunc (-1.5)} is @code{-1.0}. |
|
|
@@ -1369,6 +1434,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} rintl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions round @var{x} to an integer value according to the |
|
|
current rounding mode. @xref{Floating Point Parameters}, for |
|
|
information about the various rounding modes. The default |
|
|
@@ -1389,6 +1455,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} nearbyintl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the same value as the @code{rint} functions, but |
|
|
do not raise the inexact exception if @var{x} is not an integer. |
|
|
@end deftypefun |
|
|
@@ -1402,6 +1469,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} roundl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions are similar to @code{rint}, but they round halfway |
|
|
cases away from zero instead of to the nearest integer (or other |
|
|
current rounding mode). |
|
|
@@ -1416,6 +1484,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long int} lrintl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions are just like @code{rint}, but they return a |
|
|
@code{long int} instead of a floating-point number. |
|
|
@end deftypefun |
|
|
@@ -1429,6 +1498,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long long int} llrintl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions are just like @code{rint}, but they return a |
|
|
@code{long long int} instead of a floating-point number. |
|
|
@end deftypefun |
|
|
@@ -1442,6 +1512,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long int} lroundl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions are just like @code{round}, but they return a |
|
|
@code{long int} instead of a floating-point number. |
|
|
@end deftypefun |
|
|
@@ -1455,6 +1526,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long long int} llroundl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions are just like @code{round}, but they return a |
|
|
@code{long long int} instead of a floating-point number. |
|
|
@end deftypefun |
|
|
@@ -1469,6 +1541,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} modfl (long double @var{value}, long double *@var{integer-part}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions break the argument @var{value} into an integer part and a |
|
|
fractional part (between @code{-1} and @code{1}, exclusive). Their sum |
|
|
equals @var{value}. Each of the parts has the same sign as @var{value}, |
|
|
@@ -1495,6 +1568,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} fmodl (long double @var{numerator}, long double @var{denominator}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions compute the remainder from the division of |
|
|
@var{numerator} by @var{denominator}. Specifically, the return value is |
|
|
@code{@var{numerator} - @w{@var{n} * @var{denominator}}}, where @var{n} |
|
|
@@ -1517,6 +1591,7 @@ |
|
|
@comment math.h |
|
|
@comment BSD |
|
|
@deftypefunx {long double} dreml (long double @var{numerator}, long double @var{denominator}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions are like @code{fmod} except that they round the |
|
|
internal quotient @var{n} to the nearest integer instead of towards zero |
|
|
to an integer. For example, @code{drem (6.5, 2.3)} returns @code{-0.4}, |
|
|
@@ -1540,6 +1615,7 @@ |
|
|
@comment math.h |
|
|
@comment BSD |
|
|
@deftypefunx {long double} remainderl (long double @var{numerator}, long double @var{denominator}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is another name for @code{drem}. |
|
|
@end deftypefun |
|
|
|
|
|
@@ -1561,6 +1637,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} copysignl (long double @var{x}, long double @var{y}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return @var{x} but with the sign of @var{y}. They work |
|
|
even if @var{x} or @var{y} are NaN or zero. Both of these can carry a |
|
|
sign (although not all implementations support it) and this is one of |
|
|
@@ -1576,6 +1653,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefun int signbit (@emph{float-type} @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{signbit} is a generic macro which can work on all floating-point |
|
|
types. It returns a nonzero value if the value of @var{x} has its sign |
|
|
bit set. |
|
|
@@ -1594,6 +1672,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} nextafterl (long double @var{x}, long double @var{y}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{nextafter} function returns the next representable neighbor of |
|
|
@var{x} in the direction towards @var{y}. The size of the step between |
|
|
@var{x} and the result depends on the type of the result. If |
|
|
@@ -1617,6 +1696,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} nexttowardl (long double @var{x}, long double @var{y}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions are identical to the corresponding versions of |
|
|
@code{nextafter} except that their second argument is a @code{long |
|
|
double}. |
|
|
@@ -1632,6 +1712,8 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} nanl (const char *@var{tagp}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c The unsafe-but-ruled-safe locale use comes from strtod. |
|
|
The @code{nan} function returns a representation of NaN, provided that |
|
|
NaN is supported by the target platform. |
|
|
@code{nan ("@var{n-char-sequence}")} is equivalent to |
|
|
@@ -1666,6 +1748,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefn Macro int isgreater (@emph{real-floating} @var{x}, @emph{real-floating} @var{y}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro determines whether the argument @var{x} is greater than |
|
|
@var{y}. It is equivalent to @code{(@var{x}) > (@var{y})}, but no |
|
|
exception is raised if @var{x} or @var{y} are NaN. |
|
|
@@ -1674,6 +1757,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefn Macro int isgreaterequal (@emph{real-floating} @var{x}, @emph{real-floating} @var{y}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro determines whether the argument @var{x} is greater than or |
|
|
equal to @var{y}. It is equivalent to @code{(@var{x}) >= (@var{y})}, but no |
|
|
exception is raised if @var{x} or @var{y} are NaN. |
|
|
@@ -1682,6 +1766,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefn Macro int isless (@emph{real-floating} @var{x}, @emph{real-floating} @var{y}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro determines whether the argument @var{x} is less than @var{y}. |
|
|
It is equivalent to @code{(@var{x}) < (@var{y})}, but no exception is |
|
|
raised if @var{x} or @var{y} are NaN. |
|
|
@@ -1690,6 +1775,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefn Macro int islessequal (@emph{real-floating} @var{x}, @emph{real-floating} @var{y}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro determines whether the argument @var{x} is less than or equal |
|
|
to @var{y}. It is equivalent to @code{(@var{x}) <= (@var{y})}, but no |
|
|
exception is raised if @var{x} or @var{y} are NaN. |
|
|
@@ -1698,6 +1784,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefn Macro int islessgreater (@emph{real-floating} @var{x}, @emph{real-floating} @var{y}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro determines whether the argument @var{x} is less or greater |
|
|
than @var{y}. It is equivalent to @code{(@var{x}) < (@var{y}) || |
|
|
(@var{x}) > (@var{y})} (although it only evaluates @var{x} and @var{y} |
|
|
@@ -1710,6 +1797,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefn Macro int isunordered (@emph{real-floating} @var{x}, @emph{real-floating} @var{y}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro determines whether its arguments are unordered. In other |
|
|
words, it is true if @var{x} or @var{y} are NaN, and false otherwise. |
|
|
@end deftypefn |
|
|
@@ -1743,6 +1831,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} fminl (long double @var{x}, long double @var{y}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{fmin} function returns the lesser of the two values @var{x} |
|
|
and @var{y}. It is similar to the expression |
|
|
@smallexample |
|
|
@@ -1763,6 +1852,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} fmaxl (long double @var{x}, long double @var{y}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{fmax} function returns the greater of the two values @var{x} |
|
|
and @var{y}. |
|
|
|
|
|
@@ -1779,6 +1869,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} fdiml (long double @var{x}, long double @var{y}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{fdim} function returns the positive difference between |
|
|
@var{x} and @var{y}. The positive difference is @math{@var{x} - |
|
|
@var{y}} if @var{x} is greater than @var{y}, and @math{0} otherwise. |
|
|
@@ -1796,6 +1887,7 @@ |
|
|
@comment ISO |
|
|
@deftypefunx {long double} fmal (long double @var{x}, long double @var{y}, long double @var{z}) |
|
|
@cindex butterfly |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{fma} function performs floating-point multiply-add. This is |
|
|
the operation @math{(@var{x} @mul{} @var{y}) + @var{z}}, but the |
|
|
intermediate result is not rounded to the destination type. This can |
|
|
@@ -1925,6 +2017,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} creall (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the real part of the complex number @var{z}. |
|
|
@end deftypefun |
|
|
|
|
|
@@ -1937,6 +2030,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} cimagl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the imaginary part of the complex number @var{z}. |
|
|
@end deftypefun |
|
|
|
|
|
@@ -1949,6 +2043,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} conjl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the conjugate value of the complex number |
|
|
@var{z}. The conjugate of a complex number has the same real part and a |
|
|
negated imaginary part. In other words, @samp{conj(a + bi) = a + -bi}. |
|
|
@@ -1963,6 +2058,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} cargl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the argument of the complex number @var{z}. |
|
|
The argument of a complex number is the angle in the complex plane |
|
|
between the positive real axis and a line passing through zero and the |
|
|
@@ -1981,8 +2077,9 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} cprojl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the projection of the complex value @var{z} onto |
|
|
-the Riemann sphere. Values with a infinite imaginary part are projected |
|
|
+the Riemann sphere. Values with an infinite imaginary part are projected |
|
|
to positive infinity on the real axis, even if the real part is NaN. If |
|
|
the real part is infinite, the result is equivalent to |
|
|
|
|
|
@@ -2026,6 +2123,15 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun {long int} strtol (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c strtol uses the thread-local pointer to the locale in effect, and |
|
|
+@c strtol_l loads the LC_NUMERIC locale data from it early on and once, |
|
|
+@c but if the locale is the global locale, and another thread calls |
|
|
+@c setlocale in a way that modifies the pointer to the LC_CTYPE locale |
|
|
+@c category, the behavior of e.g. IS*, TOUPPER will vary throughout the |
|
|
+@c execution of the function, because they re-read the locale data from |
|
|
+@c the given locale pointer. We solved this by documenting setlocale as |
|
|
+@c MT-Unsafe. |
|
|
The @code{strtol} (``string-to-long'') function converts the initial |
|
|
part of @var{string} to a signed integer, which is returned as a value |
|
|
of type @code{long int}. |
|
|
@@ -2089,6 +2195,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun {long int} wcstol (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
The @code{wcstol} function is equivalent to the @code{strtol} function |
|
|
in nearly all aspects but handles wide character strings. |
|
|
|
|
|
@@ -2098,6 +2205,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun {unsigned long int} strtoul (const char *retrict @var{string}, char **restrict @var{tailptr}, int @var{base}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
The @code{strtoul} (``string-to-unsigned-long'') function is like |
|
|
@code{strtol} except it converts to an @code{unsigned long int} value. |
|
|
The syntax is the same as described above for @code{strtol}. The value |
|
|
@@ -2116,6 +2224,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun {unsigned long int} wcstoul (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
The @code{wcstoul} function is equivalent to the @code{strtoul} function |
|
|
in nearly all aspects but handles wide character strings. |
|
|
|
|
|
@@ -2125,6 +2234,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun {long long int} strtoll (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
The @code{strtoll} function is like @code{strtol} except that it returns |
|
|
a @code{long long int} value, and accepts numbers with a correspondingly |
|
|
larger range. |
|
|
@@ -2141,6 +2251,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun {long long int} wcstoll (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
The @code{wcstoll} function is equivalent to the @code{strtoll} function |
|
|
in nearly all aspects but handles wide character strings. |
|
|
|
|
|
@@ -2150,12 +2261,14 @@ |
|
|
@comment stdlib.h |
|
|
@comment BSD |
|
|
@deftypefun {long long int} strtoq (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
@code{strtoq} (``string-to-quad-word'') is the BSD name for @code{strtoll}. |
|
|
@end deftypefun |
|
|
|
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun {long long int} wcstoq (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
The @code{wcstoq} function is equivalent to the @code{strtoq} function |
|
|
in nearly all aspects but handles wide character strings. |
|
|
|
|
|
@@ -2165,6 +2278,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun {unsigned long long int} strtoull (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
The @code{strtoull} function is related to @code{strtoll} the same way |
|
|
@code{strtoul} is related to @code{strtol}. |
|
|
|
|
|
@@ -2174,6 +2288,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun {unsigned long long int} wcstoull (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
The @code{wcstoull} function is equivalent to the @code{strtoull} function |
|
|
in nearly all aspects but handles wide character strings. |
|
|
|
|
|
@@ -2183,12 +2298,14 @@ |
|
|
@comment stdlib.h |
|
|
@comment BSD |
|
|
@deftypefun {unsigned long long int} strtouq (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
@code{strtouq} is the BSD name for @code{strtoull}. |
|
|
@end deftypefun |
|
|
|
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun {unsigned long long int} wcstouq (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
The @code{wcstouq} function is equivalent to the @code{strtouq} function |
|
|
in nearly all aspects but handles wide character strings. |
|
|
|
|
|
@@ -2198,6 +2315,7 @@ |
|
|
@comment inttypes.h |
|
|
@comment ISO |
|
|
@deftypefun intmax_t strtoimax (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
The @code{strtoimax} function is like @code{strtol} except that it returns |
|
|
a @code{intmax_t} value, and accepts numbers of a corresponding range. |
|
|
|
|
|
@@ -2214,6 +2332,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun intmax_t wcstoimax (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
The @code{wcstoimax} function is equivalent to the @code{strtoimax} function |
|
|
in nearly all aspects but handles wide character strings. |
|
|
|
|
|
@@ -2223,6 +2342,7 @@ |
|
|
@comment inttypes.h |
|
|
@comment ISO |
|
|
@deftypefun uintmax_t strtoumax (const char *restrict @var{string}, char **restrict @var{tailptr}, int @var{base}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
The @code{strtoumax} function is related to @code{strtoimax} |
|
|
the same way that @code{strtoul} is related to @code{strtol}. |
|
|
|
|
|
@@ -2233,6 +2353,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun uintmax_t wcstoumax (const wchar_t *restrict @var{string}, wchar_t **restrict @var{tailptr}, int @var{base}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
The @code{wcstoumax} function is equivalent to the @code{strtoumax} function |
|
|
in nearly all aspects but handles wide character strings. |
|
|
|
|
|
@@ -2242,6 +2363,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun {long int} atol (const char *@var{string}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
This function is similar to the @code{strtol} function with a @var{base} |
|
|
argument of @code{10}, except that it need not detect overflow errors. |
|
|
The @code{atol} function is provided mostly for compatibility with |
|
|
@@ -2251,6 +2373,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun int atoi (const char *@var{string}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
This function is like @code{atol}, except that it returns an @code{int}. |
|
|
The @code{atoi} function is also considered obsolete; use @code{strtol} |
|
|
instead. |
|
|
@@ -2259,6 +2382,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun {long long int} atoll (const char *@var{string}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
This function is similar to @code{atol}, except it returns a @code{long |
|
|
long int}. |
|
|
|
|
|
@@ -2323,6 +2447,35 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun double strtod (const char *restrict @var{string}, char **restrict @var{tailptr}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c Besides the unsafe-but-ruled-safe locale uses, this uses a lot of |
|
|
+@c mpn, but it's all safe. |
|
|
+@c |
|
|
+@c round_and_return |
|
|
+@c get_rounding_mode ok |
|
|
+@c mpn_add_1 ok |
|
|
+@c mpn_rshift ok |
|
|
+@c MPN_ZERO ok |
|
|
+@c MPN2FLOAT -> mpn_construct_(float|double|long_double) ok |
|
|
+@c str_to_mpn |
|
|
+@c mpn_mul_1 -> umul_ppmm ok |
|
|
+@c mpn_add_1 ok |
|
|
+@c mpn_lshift_1 -> mpn_lshift ok |
|
|
+@c STRTOF_INTERNAL |
|
|
+@c MPN_VAR ok |
|
|
+@c SET_MANTISSA ok |
|
|
+@c STRNCASECMP ok, wide and narrow |
|
|
+@c round_and_return ok |
|
|
+@c mpn_mul ok |
|
|
+@c mpn_addmul_1 ok |
|
|
+@c ... mpn_sub |
|
|
+@c mpn_lshift ok |
|
|
+@c udiv_qrnnd ok |
|
|
+@c count_leading_zeros ok |
|
|
+@c add_ssaaaa ok |
|
|
+@c sub_ddmmss ok |
|
|
+@c umul_ppmm ok |
|
|
+@c mpn_submul_1 ok |
|
|
The @code{strtod} (``string-to-double'') function converts the initial |
|
|
part of @var{string} to a floating-point number, which is returned as a |
|
|
value of type @code{double}. |
|
|
@@ -2408,6 +2561,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} strtold (const char *@var{string}, char **@var{tailptr}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
These functions are analogous to @code{strtod}, but return @code{float} |
|
|
and @code{long double} values respectively. They report errors in the |
|
|
same way as @code{strtod}. @code{strtof} can be substantially faster |
|
|
@@ -2427,6 +2581,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} wcstold (const wchar_t *@var{string}, wchar_t **@var{tailptr}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
The @code{wcstod}, @code{wcstof}, and @code{wcstol} functions are |
|
|
equivalent in nearly all aspect to the @code{strtod}, @code{strtof}, and |
|
|
@code{strtold} functions but it handles wide character string. |
|
|
@@ -2439,6 +2594,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun double atof (const char *@var{string}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
This function is similar to the @code{strtod} function, except that it |
|
|
need not detect overflow and underflow errors. The @code{atof} function |
|
|
is provided mostly for compatibility with existing code; using |
|
|
@@ -2447,7 +2603,8 @@ |
|
|
|
|
|
@Theglibc{} also provides @samp{_l} versions of these functions, |
|
|
which take an additional argument, the locale to use in conversion. |
|
|
-@xref{Parsing of Integers}. |
|
|
+ |
|
|
+See also @ref{Parsing of Integers}. |
|
|
|
|
|
@node System V Number Conversion |
|
|
@section Old-fashioned System V number-to-string functions |
|
|
@@ -2465,9 +2622,10 @@ |
|
|
@comment stdlib.h |
|
|
@comment SVID, Unix98 |
|
|
@deftypefun {char *} ecvt (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:ecvt}}@asunsafe{}@acsafe{}} |
|
|
The function @code{ecvt} converts the floating-point number @var{value} |
|
|
to a string with at most @var{ndigit} decimal digits. The |
|
|
-returned string contains no decimal point or sign. The first digit of |
|
|
+returned string contains no decimal point or sign. The first digit of |
|
|
the string is non-zero (unless @var{value} is actually zero) and the |
|
|
last digit is rounded to nearest. @code{*@var{decpt}} is set to the |
|
|
index in the string of the first digit after the decimal point. |
|
|
@@ -2490,6 +2648,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment SVID, Unix98 |
|
|
@deftypefun {char *} fcvt (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:fcvt}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
The function @code{fcvt} is like @code{ecvt}, but @var{ndigit} specifies |
|
|
the number of digits after the decimal point. If @var{ndigit} is less |
|
|
than zero, @var{value} is rounded to the @math{@var{ndigit}+1}'th place to the |
|
|
@@ -2508,6 +2667,9 @@ |
|
|
@comment stdlib.h |
|
|
@comment SVID, Unix98 |
|
|
@deftypefun {char *} gcvt (double @var{value}, int @var{ndigit}, char *@var{buf}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c gcvt calls sprintf, that ultimately calls vfprintf, which malloc()s |
|
|
+@c args_value if it's too large, but gcvt never exercises this path. |
|
|
@code{gcvt} is functionally equivalent to @samp{sprintf(buf, "%*g", |
|
|
ndigit, value}. It is provided only for compatibility's sake. It |
|
|
returns @var{buf}. |
|
|
@@ -2522,6 +2684,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} qecvt (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:qecvt}}@asunsafe{}@acsafe{}} |
|
|
This function is equivalent to @code{ecvt} except that it takes a |
|
|
@code{long double} for the first parameter and that @var{ndigit} is |
|
|
restricted by the precision of a @code{long double}. |
|
|
@@ -2530,6 +2693,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} qfcvt (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:qfcvt}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This function is equivalent to @code{fcvt} except that it |
|
|
takes a @code{long double} for the first parameter and that @var{ndigit} is |
|
|
restricted by the precision of a @code{long double}. |
|
|
@@ -2538,6 +2702,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} qgcvt (long double @var{value}, int @var{ndigit}, char *@var{buf}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is equivalent to @code{gcvt} except that it takes a |
|
|
@code{long double} for the first parameter and that @var{ndigit} is |
|
|
restricted by the precision of a @code{long double}. |
|
|
@@ -2558,6 +2723,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun int ecvt_r (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{ecvt_r} function is the same as @code{ecvt}, except |
|
|
that it places its result into the user-specified buffer pointed to by |
|
|
@var{buf}, with length @var{len}. The return value is @code{-1} in |
|
|
@@ -2569,6 +2735,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment SVID, Unix98 |
|
|
@deftypefun int fcvt_r (double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{fcvt_r} function is the same as @code{fcvt}, except that it |
|
|
places its result into the user-specified buffer pointed to by |
|
|
@var{buf}, with length @var{len}. The return value is @code{-1} in |
|
|
@@ -2580,6 +2747,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun int qecvt_r (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{qecvt_r} function is the same as @code{qecvt}, except |
|
|
that it places its result into the user-specified buffer pointed to by |
|
|
@var{buf}, with length @var{len}. The return value is @code{-1} in |
|
|
@@ -2591,6 +2759,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun int qfcvt_r (long double @var{value}, int @var{ndigit}, int *@var{decpt}, int *@var{neg}, char *@var{buf}, size_t @var{len}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{qfcvt_r} function is the same as @code{qfcvt}, except |
|
|
that it places its result into the user-specified buffer pointed to by |
|
|
@var{buf}, with length @var{len}. The return value is @code{-1} in |
|
|
diff -urN glibc-2.17-c758a686/manual/charset.texi glibc-2.17-c758a686/manual/charset.texi |
|
|
--- glibc-2.17-c758a686/manual/charset.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/charset.texi 2014-09-12 16:10:06.045792717 -0400 |
|
|
@@ -504,6 +504,14 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun int mbsinit (const mbstate_t *@var{ps}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c ps is dereferenced once, unguarded. This would call for @mtsrace:ps, |
|
|
+@c but since a single word-sized field is (atomically) accessed, any |
|
|
+@c race here would be harmless. Other functions that take an optional |
|
|
+@c mbstate_t* argument named ps are marked with @mtasurace:<func>/!ps, |
|
|
+@c to indicate that the function uses a static buffer if ps is NULL. |
|
|
+@c These could also have been marked with @mtsrace:ps, but we'll omit |
|
|
+@c that for brevity, for it's somewhat redundant with the @mtasurace. |
|
|
The @code{mbsinit} function determines whether the state object pointed |
|
|
to by @var{ps} is in the initial state. If @var{ps} is a null pointer or |
|
|
the object is in the initial state the return value is nonzero. Otherwise |
|
|
@@ -559,6 +567,14 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun wint_t btowc (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c Calls btowc_fct or __fct; reads from locale, and from the |
|
|
+@c get_gconv_fcts result multiple times. get_gconv_fcts calls |
|
|
+@c __wcsmbs_load_conv to initialize the ctype if it's null. |
|
|
+@c wcsmbs_load_conv takes a non-recursive wrlock before allocating |
|
|
+@c memory for the fcts structure, initializing it, and then storing it |
|
|
+@c in the locale object. The initialization involves dlopening and a |
|
|
+@c lot more. |
|
|
The @code{btowc} function (``byte to wide character'') converts a valid |
|
|
single byte character @var{c} in the initial shift state into the wide |
|
|
character equivalent using the conversion rules from the currently |
|
|
@@ -615,6 +631,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun int wctob (wint_t @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
The @code{wctob} function (``wide character to byte'') takes as the |
|
|
parameter a valid wide character. If the multibyte representation for |
|
|
this character in the initial state is exactly one byte long, the return |
|
|
@@ -634,6 +651,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun size_t mbrtowc (wchar_t *restrict @var{pwc}, const char *restrict @var{s}, size_t @var{n}, mbstate_t *restrict @var{ps}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:mbrtowc/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
@cindex stateful |
|
|
The @code{mbrtowc} function (``multibyte restartable to wide |
|
|
character'') converts the next multibyte character in the string pointed |
|
|
@@ -728,6 +746,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun size_t mbrlen (const char *restrict @var{s}, size_t @var{n}, mbstate_t *@var{ps}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:mbrlen/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
The @code{mbrlen} function (``multibyte restartable length'') computes |
|
|
the number of at most @var{n} bytes starting at @var{s}, which form the |
|
|
next valid and complete multibyte character. |
|
|
@@ -786,7 +805,7 @@ |
|
|
This function simply calls @code{mbrlen} for each multibyte character |
|
|
in the string and counts the number of function calls. Please note that |
|
|
we here use @code{MB_LEN_MAX} as the size argument in the @code{mbrlen} |
|
|
-call. This is acceptable since a) this value is larger then the length of |
|
|
+call. This is acceptable since a) this value is larger than the length of |
|
|
the longest multibyte character sequence and b) we know that the string |
|
|
@var{s} ends with a NUL byte, which cannot be part of any other multibyte |
|
|
character sequence but the one representing the NUL wide character. |
|
|
@@ -811,6 +830,50 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun size_t wcrtomb (char *restrict @var{s}, wchar_t @var{wc}, mbstate_t *restrict @var{ps}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:wcrtomb/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c wcrtomb uses a static, non-thread-local unguarded state variable when |
|
|
+@c PS is NULL. When a state is passed in, and it's not used |
|
|
+@c concurrently in other threads, this function behaves safely as long |
|
|
+@c as gconv modules don't bring MT safety issues of their own. |
|
|
+@c Attempting to load gconv modules or to build conversion chains in |
|
|
+@c signal handlers may encounter gconv databases or caches in a |
|
|
+@c partially-updated state, and asynchronous cancellation may leave them |
|
|
+@c in such states, besides leaking the lock that guards them. |
|
|
+@c get_gconv_fcts ok |
|
|
+@c wcsmbs_load_conv ok |
|
|
+@c norm_add_slashes ok |
|
|
+@c wcsmbs_getfct ok |
|
|
+@c gconv_find_transform ok |
|
|
+@c gconv_read_conf (libc_once) |
|
|
+@c gconv_lookup_cache ok |
|
|
+@c find_module_idx ok |
|
|
+@c find_module ok |
|
|
+@c gconv_find_shlib (ok) |
|
|
+@c ->init_fct (assumed ok) |
|
|
+@c gconv_get_builtin_trans ok |
|
|
+@c gconv_release_step ok |
|
|
+@c do_lookup_alias ok |
|
|
+@c find_derivation ok |
|
|
+@c derivation_lookup ok |
|
|
+@c increment_counter ok |
|
|
+@c gconv_find_shlib ok |
|
|
+@c step->init_fct (assumed ok) |
|
|
+@c gen_steps ok |
|
|
+@c gconv_find_shlib ok |
|
|
+@c dlopen (presumed ok) |
|
|
+@c dlsym (presumed ok) |
|
|
+@c step->init_fct (assumed ok) |
|
|
+@c step->end_fct (assumed ok) |
|
|
+@c gconv_get_builtin_trans ok |
|
|
+@c gconv_release_step ok |
|
|
+@c add_derivation ok |
|
|
+@c gconv_close_transform ok |
|
|
+@c gconv_release_step ok |
|
|
+@c step->end_fct (assumed ok) |
|
|
+@c gconv_release_shlib ok |
|
|
+@c dlclose (presumed ok) |
|
|
+@c gconv_release_cache ok |
|
|
+@c ->tomb->__fct (assumed ok) |
|
|
The @code{wcrtomb} function (``wide character restartable to |
|
|
multibyte'') converts a single wide character into a multibyte string |
|
|
corresponding to that wide character. |
|
|
@@ -955,8 +1018,9 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun size_t mbsrtowcs (wchar_t *restrict @var{dst}, const char **restrict @var{src}, size_t @var{len}, mbstate_t *restrict @var{ps}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:mbsrtowcs/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
The @code{mbsrtowcs} function (``multibyte string restartable to wide |
|
|
-character string'') converts an NUL-terminated multibyte character |
|
|
+character string'') converts a NUL-terminated multibyte character |
|
|
string at @code{*@var{src}} into an equivalent wide character string, |
|
|
including the NUL wide character at the end. The conversion is started |
|
|
using the state information from the object pointed to by @var{ps} or |
|
|
@@ -1039,6 +1103,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun size_t wcsrtombs (char *restrict @var{dst}, const wchar_t **restrict @var{src}, size_t @var{len}, mbstate_t *restrict @var{ps}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:wcsrtombs/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
The @code{wcsrtombs} function (``wide character string restartable to |
|
|
multibyte string'') converts the NUL-terminated wide character string at |
|
|
@code{*@var{src}} into an equivalent multibyte character string and |
|
|
@@ -1084,6 +1149,7 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun size_t mbsnrtowcs (wchar_t *restrict @var{dst}, const char **restrict @var{src}, size_t @var{nmc}, size_t @var{len}, mbstate_t *restrict @var{ps}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:mbsnrtowcs/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
The @code{mbsnrtowcs} function is very similar to the @code{mbsrtowcs} |
|
|
function. All the parameters are the same except for @var{nmc}, which is |
|
|
new. The return value is the same as for @code{mbsrtowcs}. |
|
|
@@ -1136,6 +1202,7 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun size_t wcsnrtombs (char *restrict @var{dst}, const wchar_t **restrict @var{src}, size_t @var{nwc}, size_t @var{len}, mbstate_t *restrict @var{ps}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:wcsnrtombs/!ps}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
The @code{wcsnrtombs} function implements the conversion from wide |
|
|
character strings to multibyte character strings. It is similar to |
|
|
@code{wcsrtombs} but, just like @code{mbsnrtowcs}, it takes an extra |
|
|
@@ -1280,6 +1347,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun int mbtowc (wchar_t *restrict @var{result}, const char *restrict @var{string}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
The @code{mbtowc} (``multibyte to wide character'') function when called |
|
|
with non-null @var{string} converts the first multibyte character |
|
|
beginning at @var{string} to its corresponding wide character code. It |
|
|
@@ -1314,6 +1382,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun int wctomb (char *@var{string}, wchar_t @var{wchar}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
The @code{wctomb} (``wide character to multibyte'') function converts |
|
|
the wide character code @var{wchar} to its corresponding multibyte |
|
|
character sequence, and stores the result in bytes starting at |
|
|
@@ -1353,6 +1422,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun int mblen (const char *@var{string}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
The @code{mblen} function with a non-null @var{string} argument returns |
|
|
the number of bytes that make up the multibyte character beginning at |
|
|
@var{string}, never examining more than @var{size} bytes. (The idea is |
|
|
@@ -1391,6 +1461,9 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun size_t mbstowcs (wchar_t *@var{wstring}, const char *@var{string}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c Odd... Although this was supposed to be non-reentrant, the internal |
|
|
+@c state is not a static buffer, but an automatic variable. |
|
|
The @code{mbstowcs} (``multibyte string to wide character string'') |
|
|
function converts the null-terminated string of multibyte characters |
|
|
@var{string} to an array of wide character codes, storing not more than |
|
|
@@ -1431,6 +1504,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun size_t wcstombs (char *@var{string}, const wchar_t *@var{wstring}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
The @code{wcstombs} (``wide character string to multibyte string'') |
|
|
function converts the null-terminated wide character array @var{wstring} |
|
|
into a string containing multibyte characters, storing not more than |
|
|
@@ -1618,6 +1692,16 @@ |
|
|
@comment iconv.h |
|
|
@comment XPG2 |
|
|
@deftypefun iconv_t iconv_open (const char *@var{tocode}, const char *@var{fromcode}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c Calls malloc if tocode and/or fromcode are too big for alloca. Calls |
|
|
+@c strip and upstr on both, then gconv_open. strip and upstr call |
|
|
+@c isalnum_l and toupper_l with the C locale. gconv_open may MT-safely |
|
|
+@c tokenize toset, replace unspecified codesets with the current locale |
|
|
+@c (possibly two different accesses), and finally it calls |
|
|
+@c gconv_find_transform and initializes the gconv_t result with all the |
|
|
+@c steps in the conversion sequence, running each one's initializer, |
|
|
+@c destructing and releasing them all if anything fails. |
|
|
+ |
|
|
The @code{iconv_open} function has to be used before starting a |
|
|
conversion. The two parameters this function takes determine the |
|
|
source and destination character set for the conversion, and if the |
|
|
@@ -1625,7 +1709,7 @@ |
|
|
function returns a handle. |
|
|
|
|
|
If the wanted conversion is not available, the @code{iconv_open} function |
|
|
-returns @code{(iconv_t) -1}. In this case the global variable |
|
|
+returns @code{(iconv_t) -1}. In this case the global variable |
|
|
@code{errno} can have the following values: |
|
|
|
|
|
@table @code |
|
|
@@ -1682,6 +1766,12 @@ |
|
|
@comment iconv.h |
|
|
@comment XPG2 |
|
|
@deftypefun int iconv_close (iconv_t @var{cd}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} |
|
|
+@c Calls gconv_close to destruct and release each of the conversion |
|
|
+@c steps, release the gconv_t object, then call gconv_close_transform. |
|
|
+@c Access to the gconv_t object is not guarded, but calling iconv_close |
|
|
+@c concurrently with any other use is undefined. |
|
|
+ |
|
|
The @code{iconv_close} function frees all resources associated with the |
|
|
handle @var{cd}, which must have been returned by a successful call to |
|
|
the @code{iconv_open} function. |
|
|
@@ -1708,6 +1798,10 @@ |
|
|
@comment iconv.h |
|
|
@comment XPG2 |
|
|
@deftypefun size_t iconv (iconv_t @var{cd}, char **@var{inbuf}, size_t *@var{inbytesleft}, char **@var{outbuf}, size_t *@var{outbytesleft}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:cd}}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
+@c Without guarding access to the iconv_t object pointed to by cd, call |
|
|
+@c the conversion function to convert inbuf or flush the internal |
|
|
+@c conversion state. |
|
|
@cindex stateful |
|
|
The @code{iconv} function converts the text in the input buffer |
|
|
according to the rules associated with the descriptor @var{cd} and |
|
|
@@ -1744,7 +1838,7 @@ |
|
|
Therefore an @code{iconv} call to reset the state should always be |
|
|
performed if some protocol requires this for the output text. |
|
|
|
|
|
-The conversion stops for one of three reasons. The first is that all |
|
|
+The conversion stops for one of three reasons. The first is that all |
|
|
characters from the input buffer are converted. This actually can mean |
|
|
two things: either all bytes from the input buffer are consumed or |
|
|
there are some bytes at the end of the buffer that possibly can form a |
|
|
@@ -2039,7 +2133,7 @@ |
|
|
|
|
|
Unfortunately, the answer is: there is no general solution. On some |
|
|
systems guessing might help. On those systems most character sets can |
|
|
-convert to and from UTF-8 encoded @w{ISO 10646} or Unicode text. Beside |
|
|
+convert to and from UTF-8 encoded @w{ISO 10646} or Unicode text. Beside |
|
|
this only some very system-specific methods can help. Since the |
|
|
conversion functions come from loadable modules and these modules must |
|
|
be stored somewhere in the filesystem, one @emph{could} try to find them |
|
|
@@ -2239,7 +2333,7 @@ |
|
|
|
|
|
So far this section has described how modules are located and considered |
|
|
to be used. What remains to be described is the interface of the modules |
|
|
-so that one can write new ones. This section describes the interface as |
|
|
+so that one can write new ones. This section describes the interface as |
|
|
it is in use in January 1999. The interface will change a bit in the |
|
|
future but, with luck, only in an upwardly compatible way. |
|
|
|
|
|
@@ -2485,7 +2579,7 @@ |
|
|
same size, the minimum and maximum values are the same. |
|
|
|
|
|
@item __stateful |
|
|
-This element must be initialized to an nonzero value if the source |
|
|
+This element must be initialized to a nonzero value if the source |
|
|
character set is stateful. Otherwise it must be zero. |
|
|
@end table |
|
|
|
|
|
@@ -2824,7 +2918,7 @@ |
|
|
/* @r{Run the conversion loop. @code{status} is set} |
|
|
@r{appropriately afterwards.} */ |
|
|
|
|
|
- /* @r{If this is the last step, leave the loop. There is} |
|
|
+ /* @r{If this is the last step, leave the loop. There is} |
|
|
@r{nothing we can do.} */ |
|
|
if (data->__is_last) |
|
|
@{ |
|
|
diff -urN glibc-2.17-c758a686/manual/check-safety.sh glibc-2.17-c758a686/manual/check-safety.sh |
|
|
--- glibc-2.17-c758a686/manual/check-safety.sh 1969-12-31 19:00:00.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/check-safety.sh 2014-09-12 16:10:06.044792719 -0400 |
|
|
@@ -0,0 +1,119 @@ |
|
|
+#! /bin/sh |
|
|
+ |
|
|
+# Copyright 2014 Free Software Foundation, Inc. |
|
|
+# This file is part of the GNU C Library. |
|
|
+ |
|
|
+# The GNU C Library is free software; you can redistribute it and/or |
|
|
+# modify it under the terms of the GNU Lesser General Public |
|
|
+# License as published by the Free Software Foundation; either |
|
|
+# version 2.1 of the License, or (at your option) any later version. |
|
|
+ |
|
|
+# The GNU C Library is distributed in the hope that it will be useful, |
|
|
+# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
|
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|
|
+# Lesser General Public License for more details. |
|
|
+ |
|
|
+# You should have received a copy of the GNU Lesser General Public |
|
|
+# License along with the GNU C Library; if not, see |
|
|
+# <http://www.gnu.org/licenses/>. |
|
|
+ |
|
|
+ |
|
|
+# Check that the @safety notes are self-consistent, i.e., that they're |
|
|
+# in proper order (mt then as then ac), that remarks appear within |
|
|
+# corresponding sections (mt within mt, etc), that unsafety always has |
|
|
+# an explicit reason and when there's a reason for unsafety it's not |
|
|
+# safe, and that there aren't duplicates remarks. |
|
|
+ |
|
|
+ |
|
|
+success=: |
|
|
+ |
|
|
+# If no arguments are given, take all *.texi files in the current directory. |
|
|
+test $# != 0 || set *.texi |
|
|
+ |
|
|
+# Check that all safety remarks have entries for all of MT, AS and AC, |
|
|
+# in this order, with an optional prelim note before them. |
|
|
+grep -n '^@safety' "$@" | |
|
|
+grep -v ':@safety{\(@prelim{}\)\?@mt\(un\)\?safe{.*}'\ |
|
|
+'@as\(un\)\?safe{.*}@ac\(un\)\?safe{.*}}' && |
|
|
+success=false |
|
|
+ |
|
|
+# Check that @mt-started notes appear within @mtsafe or @mtunsafe, |
|
|
+# that @as-started notes appear within @assafe or @asunsafe, and that |
|
|
+# @ac-started notes appear within @acsafe or @acunsafe. Also check |
|
|
+# that @mt, @as and @ac are followed by an s (for safe) or u (for |
|
|
+# unsafe), but let @mt have as, ac or asc before [su], and let @as |
|
|
+# have a c (for cancel) before [su]. Also make sure blanks separate |
|
|
+# each of the annotations. |
|
|
+grep -n '^@safety' "$@" | |
|
|
+grep -v ':@safety{\(@prelim{}\)\?'\ |
|
|
+'@mt\(un\)\?safe{\(@mt\(asc\?\|ac\)\?[su][^ ]*}\)\?'\ |
|
|
+'\( @mt\(asc\?\|ac\)\?[su][^ ]*}\)*}'\ |
|
|
+'@as\(un\)\?safe{\(@asc\?[su][^ ]*}\)\?'\ |
|
|
+'\( @asc\?[su][^ ]*}\)*}'\ |
|
|
+'@ac\(un\)\?safe{\(@ac[su][^ ]*}\)\?'\ |
|
|
+'\( @ac[su][^ ]*}\)*}}' && |
|
|
+success=false |
|
|
+ |
|
|
+# Make sure safety lines marked as @mtsafe do not contain any |
|
|
+# MT-Unsafe remark; that would be @mtu, but there could be as, ac or |
|
|
+# asc between mt and u. |
|
|
+grep -n '^@safety.*@mtsafe' "$@" | |
|
|
+grep '@mt\(asc\?\|ac\)?u' "$@" && |
|
|
+success=false |
|
|
+ |
|
|
+# Make sure @mtunsafe lines contain at least one @mtu remark (with |
|
|
+# optional as, ac or asc between mt and u). |
|
|
+grep -n '^@safety.*@mtunsafe' "$@" | |
|
|
+grep -v '@mtunsafe{.*@mt\(asc\?\|ac\)\?u' && |
|
|
+success=false |
|
|
+ |
|
|
+# Make sure safety lines marked as @assafe do not contain any AS-Unsafe |
|
|
+# remark, which could be @asu or @mtasu note (with an optional c |
|
|
+# between as and u in both cases). |
|
|
+grep -n '^@safety.*@assafe' "$@" | |
|
|
+grep '@\(mt\)\?asc\?u' && |
|
|
+success=false |
|
|
+ |
|
|
+# Make sure @asunsafe lines contain at least one @asu remark (which |
|
|
+# could be @ascu, or @mtasu or even @mtascu). |
|
|
+grep -n '^@safety.*@asunsafe' "$@" | |
|
|
+grep -v '@mtasc\?u.*@asunsafe\|@asunsafe{.*@asc\?u' && |
|
|
+success=false |
|
|
+ |
|
|
+# Make sure safety lines marked as @acsafe do not contain any |
|
|
+# AC-Unsafe remark, which could be @acu, @ascu or even @mtacu or |
|
|
+# @mtascu. |
|
|
+grep -n '^@safety.*@acsafe' "$@" | |
|
|
+grep '@\(mt\)\?as\?cu' && |
|
|
+success=false |
|
|
+ |
|
|
+# Make sure @acunsafe lines contain at least one @acu remark (possibly |
|
|
+# implied by @ascu, @mtacu or @mtascu). |
|
|
+grep -n '^@safety.*@acunsafe' "$@" | |
|
|
+grep -v '@\(mtas\?\|as\)cu.*@acunsafe\|@acunsafe{.*@acu' && |
|
|
+success=false |
|
|
+ |
|
|
+# Make sure there aren't duplicate remarks in the same safety note. |
|
|
+grep -n '^@safety' "$@" | |
|
|
+grep '[^:]\(@\(mt\|a[sc]\)[^ {]*{[^ ]*}\).*[^:]\1' && |
|
|
+success=false |
|
|
+ |
|
|
+# Check that comments containing safety remarks do not contain {}s, |
|
|
+# that all @mt remarks appear before @as remarks, that in turn appear |
|
|
+# before @ac remarks, all properly blank-separated, and that an |
|
|
+# optional comment about exclusions is between []s at the end of the |
|
|
+# line. |
|
|
+grep -n '^@c \+[^@ ]\+\( dup\)\?'\ |
|
|
+'\( @\(mt\|a[sc]\)[^ ]*\)*\( \[.*\]\)\?$' "$@" | |
|
|
+grep -v ':@c *[^@{}]*\( @mt[^ {}]*\)*'\ |
|
|
+'\( @as[^ {}]*\)*\( @ac[^ {}]*\)*\( \[.*\]\)\?$' && |
|
|
+success=false |
|
|
+ |
|
|
+# Check that comments containing safety remarks do not contain |
|
|
+# duplicate remarks. |
|
|
+grep -n '^@c \+[^@ ]\+\( dup\)\?'\ |
|
|
+'\( @\(mt\|a[sc]\)[^ ]*\)*\( \[.*\]\)\?$' "$@" | |
|
|
+grep '[^:]\(@\(mt\|a[sc]\)[^ ]*\) \(.*[^:]\)\?\1\($\| \)' && |
|
|
+success=false |
|
|
+ |
|
|
+$success |
|
|
diff -urN glibc-2.17-c758a686/manual/conf.texi glibc-2.17-c758a686/manual/conf.texi |
|
|
--- glibc-2.17-c758a686/manual/conf.texi 2014-09-12 16:08:17.965070383 -0400 |
|
|
+++ glibc-2.17-c758a686/manual/conf.texi 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -114,7 +114,7 @@ |
|
|
|
|
|
@comment limits.h |
|
|
@comment POSIX.1 |
|
|
-@deftypevr Macro int SSIZE_MAX |
|
|
+@deftypevr Macro ssize_t SSIZE_MAX |
|
|
The largest value that can fit in an object of type @code{ssize_t}. |
|
|
Effectively, this is the limit on the number of bytes that can be read |
|
|
or written in a single operation. |
|
|
@@ -288,6 +288,17 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun {long int} sysconf (int @var{parameter}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c Some parts of the implementation open /proc and /sys files and dirs |
|
|
+@c to collect system details, using fd and stream I/O depending on the |
|
|
+@c case. _SC_TZNAME_MAX calls __tzname_max, that (while holding a lock) |
|
|
+@c calls tzset_internal, that calls getenv if it's called the first |
|
|
+@c time; there are free and strdup calls in there too. The returned max |
|
|
+@c value may change over time for TZNAME_MAX, depending on selected |
|
|
+@c timezones; NPROCS, NPROCS_CONF, PHYS_PAGES, AVPHYS_PAGES, |
|
|
+@c NGROUPS_MAX, SIGQUEUE_MAX, depending on variable values read from |
|
|
+@c /proc at each call, and from rlimit-obtained values CHILD_MAX, |
|
|
+@c OPEN_MAX, ARG_MAX, SIGQUEUE_MAX. |
|
|
This function is used to inquire about runtime system parameters. The |
|
|
@var{parameter} argument should be one of the @samp{_SC_} symbols listed |
|
|
below. |
|
|
@@ -1121,7 +1132,7 @@ |
|
|
have on @emph{any} POSIX system. @xref{File Minimums}. |
|
|
|
|
|
@cindex limits, link count of files |
|
|
-@comment limits.h |
|
|
+@comment limits.h (optional) |
|
|
@comment POSIX.1 |
|
|
@deftypevr Macro int LINK_MAX |
|
|
The uniform system limit (if any) for the number of names for a given |
|
|
@@ -1348,6 +1359,11 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun {long int} pathconf (const char *@var{filename}, int @var{parameter}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c When __statfs_link_max finds an ext* filesystem, it may read |
|
|
+@c /proc/mounts or similar as a mntent stream. |
|
|
+@c __statfs_chown_restricted may read from |
|
|
+@c /proc/sys/fs/xfs/restrict_chown as a file descriptor. |
|
|
This function is used to inquire about the limits that apply to |
|
|
the file named @var{filename}. |
|
|
|
|
|
@@ -1375,6 +1391,8 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun {long int} fpathconf (int @var{filedes}, int @var{parameter}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c Same caveats as pathconf. |
|
|
This is just like @code{pathconf} except that an open file descriptor |
|
|
is used to specify the file for which information is requested, instead |
|
|
of a file name. |
|
|
@@ -1624,6 +1642,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.2 |
|
|
@deftypefun size_t confstr (int @var{parameter}, char *@var{buf}, size_t @var{len}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function reads the value of a string-valued system parameter, |
|
|
storing the string into @var{len} bytes of memory space starting at |
|
|
@var{buf}. The @var{parameter} argument should be one of the |
|
|
diff -urN glibc-2.17-c758a686/manual/crypt.texi glibc-2.17-c758a686/manual/crypt.texi |
|
|
--- glibc-2.17-c758a686/manual/crypt.texi 2014-09-12 16:08:18.169069859 -0400 |
|
|
+++ glibc-2.17-c758a686/manual/crypt.texi 2014-09-12 16:10:06.042792724 -0400 |
|
|
@@ -30,15 +30,15 @@ |
|
|
and the other based on the Data Encryption Standard (DES) that is |
|
|
compatible with Unix systems. |
|
|
|
|
|
-@cindex AUTH_DES |
|
|
+@vindex AUTH_DES |
|
|
@cindex FIPS 140-2 |
|
|
It also provides support for Secure RPC, and some library functions that |
|
|
-can be used to perform normal DES encryption. The use of DES when |
|
|
-using @code{AUTH_DES} in Secure RPC for authentication as provided by |
|
|
-@theglibc{} is not FIPS 140-2 compliant nor is any other use of DES |
|
|
-within @theglibc{}. It is recommended that Secure RPC should not be used |
|
|
-for systems that need to be FIPS 140-2 compliant since all forms of |
|
|
-supported authentication use normal DES. |
|
|
+can be used to perform normal DES encryption. The @code{AUTH_DES} |
|
|
+authentication flavor in Secure RPC, as provided by @theglibc{}, |
|
|
+uses DES and does not comply with FIPS 140-2 nor does any other use of DES |
|
|
+within @theglibc{}. It is recommended that Secure RPC should not be used |
|
|
+for systems that need to comply with FIPS 140-2 since all flavors of |
|
|
+encrypted authentication use normal DES. |
|
|
|
|
|
@menu |
|
|
* Legal Problems:: This software can get you locked up, or worse. |
|
|
@@ -99,6 +99,13 @@ |
|
|
@comment unistd.h |
|
|
@comment BSD |
|
|
@deftypefun {char *} getpass (const char *@var{prompt}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasuterm{}}@asunsafe{@ascuheap{} @asulock{} @asucorrupt{}}@acunsafe{@acuterm{} @aculock{} @acucorrupt{}}} |
|
|
+@c This function will attempt to create a stream for terminal I/O, but |
|
|
+@c will fallback to stdio/stderr. It attempts to change the terminal |
|
|
+@c mode in a thread-unsafe way, write out the prompt, read the password, |
|
|
+@c then restore the terminal mode. It has a cleanup to close the stream |
|
|
+@c in case of (synchronous) cancellation, but not to restore the |
|
|
+@c terminal mode. |
|
|
|
|
|
@code{getpass} outputs @var{prompt}, then reads a string in from the |
|
|
terminal without echoing it. It tries to connect to the real terminal, |
|
|
@@ -134,6 +141,13 @@ |
|
|
@comment crypt.h |
|
|
@comment BSD, SVID |
|
|
@deftypefun {char *} crypt (const char *@var{key}, const char *@var{salt}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:crypt}}@asunsafe{@asucorrupt{} @asulock{} @ascuheap{} @ascudlopen{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
+@c Besides the obvious problem of returning a pointer into static |
|
|
+@c storage, the DES initializer takes an internal lock with the usual |
|
|
+@c set of problems for AS- and AC-Safety. The FIPS mode checker and the |
|
|
+@c NSS implementations of may leak file descriptors if canceled. The |
|
|
+@c The MD5, SHA256 and SHA512 implementations will malloc on long keys, |
|
|
+@c and NSS relies on dlopening, which brings about another can of worms. |
|
|
|
|
|
The @code{crypt} function takes a password, @var{key}, as a string, and |
|
|
a @var{salt} character array which is described below, and returns a |
|
|
@@ -195,6 +209,9 @@ |
|
|
@comment crypt.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} crypt_r (const char *@var{key}, const char *@var{salt}, {struct crypt_data *} @var{data}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{} @ascuheap{} @ascudlopen{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
+@c Compared with crypt, this function fixes the @mtasurace:crypt |
|
|
+@c problem, but nothing else. |
|
|
|
|
|
The @code{crypt_r} function does the same thing as @code{crypt}, but |
|
|
takes an extra parameter which includes space for its result (among |
|
|
@@ -241,6 +258,11 @@ |
|
|
@comment crypt.h |
|
|
@comment BSD, SVID |
|
|
@deftypefun void setkey (const char *@var{key}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:crypt}}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c The static buffer stores the key, making it fundamentally |
|
|
+@c thread-unsafe. The locking issues are only in the initialization |
|
|
+@c path; cancelling the initialization will leave the lock held, it |
|
|
+@c would otherwise repeat the initialization on the next call. |
|
|
|
|
|
The @code{setkey} function sets an internal data structure to be an |
|
|
expanded form of @var{key}. @var{key} is specified as an array of 64 |
|
|
@@ -252,6 +274,8 @@ |
|
|
@comment crypt.h |
|
|
@comment BSD, SVID |
|
|
@deftypefun void encrypt (char *@var{block}, int @var{edflag}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:crypt}}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c Same issues as setkey. |
|
|
|
|
|
The @code{encrypt} function encrypts @var{block} if |
|
|
@var{edflag} is 0, otherwise it decrypts @var{block}, using a key |
|
|
@@ -265,9 +289,11 @@ |
|
|
@comment crypt.h |
|
|
@comment GNU |
|
|
@deftypefun void setkey_r (const char *@var{key}, {struct crypt_data *} @var{data}) |
|
|
+@c @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}} |
|
|
@comment crypt.h |
|
|
@comment GNU |
|
|
@deftypefunx void encrypt_r (char *@var{block}, int @var{edflag}, {struct crypt_data *} @var{data}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@aculock{}}} |
|
|
|
|
|
These are reentrant versions of @code{setkey} and @code{encrypt}. The |
|
|
only difference is the extra parameter, which stores the expanded |
|
|
@@ -282,6 +308,7 @@ |
|
|
@comment rpc/des_crypt.h |
|
|
@comment SUNRPC |
|
|
@deftypefun int ecb_crypt (char *@var{key}, char *@var{blocks}, unsigned @var{len}, unsigned @var{mode}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
The function @code{ecb_crypt} encrypts or decrypts one or more blocks |
|
|
using DES. Each block is encrypted independently. |
|
|
@@ -356,6 +383,7 @@ |
|
|
@comment rpc/des_crypt.h |
|
|
@comment SUNRPC |
|
|
@deftypefun int DES_FAILED (int @var{err}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro returns 1 if @var{err} is a `success' result code from |
|
|
@code{ecb_crypt} or @code{cbc_crypt}, and 0 otherwise. |
|
|
@end deftypefun |
|
|
@@ -363,6 +391,7 @@ |
|
|
@comment rpc/des_crypt.h |
|
|
@comment SUNRPC |
|
|
@deftypefun int cbc_crypt (char *@var{key}, char *@var{blocks}, unsigned @var{len}, unsigned @var{mode}, char *@var{ivec}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
The function @code{cbc_crypt} encrypts or decrypts one or more blocks |
|
|
using DES in Cipher Block Chaining mode. |
|
|
@@ -389,6 +418,7 @@ |
|
|
@comment rpc/des_crypt.h |
|
|
@comment SUNRPC |
|
|
@deftypefun void des_setparity (char *@var{key}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
The function @code{des_setparity} changes the 64-bit @var{key}, stored |
|
|
packed in 8-bit bytes, to have odd parity by altering the low bits of |
|
|
diff -urN glibc-2.17-c758a686/manual/ctype.texi glibc-2.17-c758a686/manual/ctype.texi |
|
|
--- glibc-2.17-c758a686/manual/ctype.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/ctype.texi 2014-09-12 16:10:06.042792724 -0400 |
|
|
@@ -66,6 +66,16 @@ |
|
|
@comment ctype.h |
|
|
@comment ISO |
|
|
@deftypefun int islower (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c The is* macros call __ctype_b_loc to get the ctype array from the |
|
|
+@c current locale, and then index it by c. __ctype_b_loc reads from |
|
|
+@c thread-local memory the (indirect) pointer to the ctype array, which |
|
|
+@c may involve one word access to the global locale object, if that's |
|
|
+@c the active locale for the thread, and the array, being part of the |
|
|
+@c locale data, is undeletable, so there's no thread-safety issue. We |
|
|
+@c might want to mark these with @mtslocale to flag to callers that |
|
|
+@c changing locales might affect them, even if not these simpler |
|
|
+@c functions. |
|
|
Returns true if @var{c} is a lower-case letter. The letter need not be |
|
|
from the Latin alphabet, any alphabet representable is valid. |
|
|
@end deftypefun |
|
|
@@ -74,6 +84,7 @@ |
|
|
@comment ctype.h |
|
|
@comment ISO |
|
|
@deftypefun int isupper (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Returns true if @var{c} is an upper-case letter. The letter need not be |
|
|
from the Latin alphabet, any alphabet representable is valid. |
|
|
@end deftypefun |
|
|
@@ -82,6 +93,7 @@ |
|
|
@comment ctype.h |
|
|
@comment ISO |
|
|
@deftypefun int isalpha (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Returns true if @var{c} is an alphabetic character (a letter). If |
|
|
@code{islower} or @code{isupper} is true of a character, then |
|
|
@code{isalpha} is also true. |
|
|
@@ -97,6 +109,7 @@ |
|
|
@comment ctype.h |
|
|
@comment ISO |
|
|
@deftypefun int isdigit (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Returns true if @var{c} is a decimal digit (@samp{0} through @samp{9}). |
|
|
@end deftypefun |
|
|
|
|
|
@@ -104,6 +117,7 @@ |
|
|
@comment ctype.h |
|
|
@comment ISO |
|
|
@deftypefun int isalnum (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Returns true if @var{c} is an alphanumeric character (a letter or |
|
|
number); in other words, if either @code{isalpha} or @code{isdigit} is |
|
|
true of a character, then @code{isalnum} is also true. |
|
|
@@ -113,6 +127,7 @@ |
|
|
@comment ctype.h |
|
|
@comment ISO |
|
|
@deftypefun int isxdigit (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Returns true if @var{c} is a hexadecimal digit. |
|
|
Hexadecimal digits include the normal decimal digits @samp{0} through |
|
|
@samp{9} and the letters @samp{A} through @samp{F} and |
|
|
@@ -123,6 +138,7 @@ |
|
|
@comment ctype.h |
|
|
@comment ISO |
|
|
@deftypefun int ispunct (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Returns true if @var{c} is a punctuation character. |
|
|
This means any printing character that is not alphanumeric or a space |
|
|
character. |
|
|
@@ -132,6 +148,7 @@ |
|
|
@comment ctype.h |
|
|
@comment ISO |
|
|
@deftypefun int isspace (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Returns true if @var{c} is a @dfn{whitespace} character. In the standard |
|
|
@code{"C"} locale, @code{isspace} returns true for only the standard |
|
|
whitespace characters: |
|
|
@@ -161,6 +178,7 @@ |
|
|
@comment ctype.h |
|
|
@comment ISO |
|
|
@deftypefun int isblank (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Returns true if @var{c} is a blank character; that is, a space or a tab. |
|
|
This function was originally a GNU extension, but was added in @w{ISO C99}. |
|
|
@end deftypefun |
|
|
@@ -169,6 +187,7 @@ |
|
|
@comment ctype.h |
|
|
@comment ISO |
|
|
@deftypefun int isgraph (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Returns true if @var{c} is a graphic character; that is, a character |
|
|
that has a glyph associated with it. The whitespace characters are not |
|
|
considered graphic. |
|
|
@@ -178,6 +197,7 @@ |
|
|
@comment ctype.h |
|
|
@comment ISO |
|
|
@deftypefun int isprint (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Returns true if @var{c} is a printing character. Printing characters |
|
|
include all the graphic characters, plus the space (@samp{ }) character. |
|
|
@end deftypefun |
|
|
@@ -186,6 +206,7 @@ |
|
|
@comment ctype.h |
|
|
@comment ISO |
|
|
@deftypefun int iscntrl (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Returns true if @var{c} is a control character (that is, a character that |
|
|
is not a printing character). |
|
|
@end deftypefun |
|
|
@@ -194,6 +215,7 @@ |
|
|
@comment ctype.h |
|
|
@comment SVID, BSD |
|
|
@deftypefun int isascii (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Returns true if @var{c} is a 7-bit @code{unsigned char} value that fits |
|
|
into the US/UK ASCII character set. This function is a BSD extension |
|
|
and is also an SVID extension. |
|
|
@@ -227,6 +249,10 @@ |
|
|
@comment ctype.h |
|
|
@comment ISO |
|
|
@deftypefun int tolower (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c The to* macros/functions call different functions that use different |
|
|
+@c arrays than those of__ctype_b_loc, but the access patterns and |
|
|
+@c thus safety guarantees are the same. |
|
|
If @var{c} is an upper-case letter, @code{tolower} returns the corresponding |
|
|
lower-case letter. If @var{c} is not an upper-case letter, |
|
|
@var{c} is returned unchanged. |
|
|
@@ -235,6 +261,7 @@ |
|
|
@comment ctype.h |
|
|
@comment ISO |
|
|
@deftypefun int toupper (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
If @var{c} is a lower-case letter, @code{toupper} returns the corresponding |
|
|
upper-case letter. Otherwise @var{c} is returned unchanged. |
|
|
@end deftypefun |
|
|
@@ -242,6 +269,7 @@ |
|
|
@comment ctype.h |
|
|
@comment SVID, BSD |
|
|
@deftypefun int toascii (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function converts @var{c} to a 7-bit @code{unsigned char} value |
|
|
that fits into the US/UK ASCII character set, by clearing the high-order |
|
|
bits. This function is a BSD extension and is also an SVID extension. |
|
|
@@ -250,6 +278,7 @@ |
|
|
@comment ctype.h |
|
|
@comment SVID |
|
|
@deftypefun int _tolower (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This is identical to @code{tolower}, and is provided for compatibility |
|
|
with the SVID. @xref{SVID}.@refill |
|
|
@end deftypefun |
|
|
@@ -257,6 +286,7 @@ |
|
|
@comment ctype.h |
|
|
@comment SVID |
|
|
@deftypefun int _toupper (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This is identical to @code{toupper}, and is provided for compatibility |
|
|
with the SVID. |
|
|
@end deftypefun |
|
|
@@ -303,6 +333,18 @@ |
|
|
@comment wctype.h |
|
|
@comment ISO |
|
|
@deftypefun wctype_t wctype (const char *@var{property}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c Although the source code of wctype contains multiple references to |
|
|
+@c the locale, that could each reference different locale_data objects |
|
|
+@c should the global locale object change while active, the compiler can |
|
|
+@c and does combine them all into a single dereference that resolves |
|
|
+@c once to the LCTYPE locale object used throughout the function, so it |
|
|
+@c is safe in (optimized) practice, if not in theory, even when the |
|
|
+@c locale changes. Ideally we'd explicitly save the resolved |
|
|
+@c locale_data object to make it visibly safe instead of safe only under |
|
|
+@c compiler optimizations, but given the decision that setlocale is |
|
|
+@c MT-Unsafe, all this would afford us would be the ability to not mark |
|
|
+@c this function with @mtslocale. |
|
|
The @code{wctype} returns a value representing a class of wide |
|
|
characters which is identified by the string @var{property}. Beside |
|
|
some standard properties each locale can define its own ones. In case |
|
|
@@ -331,6 +373,8 @@ |
|
|
@comment wctype.h |
|
|
@comment ISO |
|
|
@deftypefun int iswctype (wint_t @var{wc}, wctype_t @var{desc}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c The compressed lookup table returned by wctype is read-only. |
|
|
This function returns a nonzero value if @var{wc} is in the character |
|
|
class specified by @var{desc}. @var{desc} must previously be returned |
|
|
by a successful call to @code{wctype}. |
|
|
@@ -350,6 +394,16 @@ |
|
|
@comment wctype.h |
|
|
@comment ISO |
|
|
@deftypefun int iswalnum (wint_t @var{wc}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c The implicit wctype call in the isw* functions is actually an |
|
|
+@c optimized version because the category has a known offset, but the |
|
|
+@c wctype is equally safe when optimized, unsafe with changing locales |
|
|
+@c if not optimized (thus @mtslocale). Since it's not a macro, we |
|
|
+@c always optimize, and the locale can't change in any MT-Safe way, it's |
|
|
+@c fine. The test whether wc is ASCII to use the non-wide is* |
|
|
+@c macro/function doesn't bring any other safety issues: the test does |
|
|
+@c not depend on the locale, and each path after the decision resolves |
|
|
+@c the locale object only once. |
|
|
This function returns a nonzero value if @var{wc} is an alphanumeric |
|
|
character (a letter or number); in other words, if either @code{iswalpha} |
|
|
or @code{iswdigit} is true of a character, then @code{iswalnum} is also |
|
|
@@ -370,6 +424,7 @@ |
|
|
@comment wctype.h |
|
|
@comment ISO |
|
|
@deftypefun int iswalpha (wint_t @var{wc}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
Returns true if @var{wc} is an alphabetic character (a letter). If |
|
|
@code{iswlower} or @code{iswupper} is true of a character, then |
|
|
@code{iswalpha} is also true. |
|
|
@@ -394,6 +449,7 @@ |
|
|
@comment wctype.h |
|
|
@comment ISO |
|
|
@deftypefun int iswcntrl (wint_t @var{wc}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
Returns true if @var{wc} is a control character (that is, a character that |
|
|
is not a printing character). |
|
|
|
|
|
@@ -412,6 +468,7 @@ |
|
|
@comment wctype.h |
|
|
@comment ISO |
|
|
@deftypefun int iswdigit (wint_t @var{wc}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
Returns true if @var{wc} is a digit (e.g., @samp{0} through @samp{9}). |
|
|
Please note that this function does not only return a nonzero value for |
|
|
@emph{decimal} digits, but for all kinds of digits. A consequence is |
|
|
@@ -442,6 +499,7 @@ |
|
|
@comment wctype.h |
|
|
@comment ISO |
|
|
@deftypefun int iswgraph (wint_t @var{wc}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
Returns true if @var{wc} is a graphic character; that is, a character |
|
|
that has a glyph associated with it. The whitespace characters are not |
|
|
considered graphic. |
|
|
@@ -461,6 +519,7 @@ |
|
|
@comment ctype.h |
|
|
@comment ISO |
|
|
@deftypefun int iswlower (wint_t @var{wc}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
Returns true if @var{wc} is a lower-case letter. The letter need not be |
|
|
from the Latin alphabet, any alphabet representable is valid. |
|
|
|
|
|
@@ -479,6 +538,7 @@ |
|
|
@comment wctype.h |
|
|
@comment ISO |
|
|
@deftypefun int iswprint (wint_t @var{wc}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
Returns true if @var{wc} is a printing character. Printing characters |
|
|
include all the graphic characters, plus the space (@samp{ }) character. |
|
|
|
|
|
@@ -497,6 +557,7 @@ |
|
|
@comment wctype.h |
|
|
@comment ISO |
|
|
@deftypefun int iswpunct (wint_t @var{wc}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
Returns true if @var{wc} is a punctuation character. |
|
|
This means any printing character that is not alphanumeric or a space |
|
|
character. |
|
|
@@ -516,6 +577,7 @@ |
|
|
@comment wctype.h |
|
|
@comment ISO |
|
|
@deftypefun int iswspace (wint_t @var{wc}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
Returns true if @var{wc} is a @dfn{whitespace} character. In the standard |
|
|
@code{"C"} locale, @code{iswspace} returns true for only the standard |
|
|
whitespace characters: |
|
|
@@ -555,6 +617,7 @@ |
|
|
@comment wctype.h |
|
|
@comment ISO |
|
|
@deftypefun int iswupper (wint_t @var{wc}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
Returns true if @var{wc} is an upper-case letter. The letter need not be |
|
|
from the Latin alphabet, any alphabet representable is valid. |
|
|
|
|
|
@@ -573,6 +636,7 @@ |
|
|
@comment wctype.h |
|
|
@comment ISO |
|
|
@deftypefun int iswxdigit (wint_t @var{wc}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
Returns true if @var{wc} is a hexadecimal digit. |
|
|
Hexadecimal digits include the normal decimal digits @samp{0} through |
|
|
@samp{9} and the letters @samp{A} through @samp{F} and |
|
|
@@ -597,6 +661,7 @@ |
|
|
@comment wctype.h |
|
|
@comment ISO |
|
|
@deftypefun int iswblank (wint_t @var{wc}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
Returns true if @var{wc} is a blank character; that is, a space or a tab. |
|
|
This function was originally a GNU extension, but was added in @w{ISO C99}. |
|
|
It is declared in @file{wchar.h}. |
|
|
@@ -691,6 +756,8 @@ |
|
|
@comment wctype.h |
|
|
@comment ISO |
|
|
@deftypefun wctrans_t wctrans (const char *@var{property}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c Similar implementation, same caveats as wctype. |
|
|
The @code{wctrans} function has to be used to find out whether a named |
|
|
mapping is defined in the current locale selected for the |
|
|
@code{LC_CTYPE} category. If the returned value is non-zero, you can use |
|
|
@@ -713,6 +780,8 @@ |
|
|
@comment wctype.h |
|
|
@comment ISO |
|
|
@deftypefun wint_t towctrans (wint_t @var{wc}, wctrans_t @var{desc}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Same caveats as iswctype. |
|
|
@code{towctrans} maps the input character @var{wc} |
|
|
according to the rules of the mapping for which @var{desc} is a |
|
|
descriptor, and returns the value it finds. @var{desc} must be |
|
|
@@ -730,6 +799,9 @@ |
|
|
@comment wctype.h |
|
|
@comment ISO |
|
|
@deftypefun wint_t towlower (wint_t @var{wc}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c Same caveats as iswalnum, just using a wctrans rather than a wctype |
|
|
+@c table. |
|
|
If @var{wc} is an upper-case letter, @code{towlower} returns the corresponding |
|
|
lower-case letter. If @var{wc} is not an upper-case letter, |
|
|
@var{wc} is returned unchanged. |
|
|
@@ -749,6 +821,7 @@ |
|
|
@comment wctype.h |
|
|
@comment ISO |
|
|
@deftypefun wint_t towupper (wint_t @var{wc}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
If @var{wc} is a lower-case letter, @code{towupper} returns the corresponding |
|
|
upper-case letter. Otherwise @var{wc} is returned unchanged. |
|
|
|
|
|
diff -urN glibc-2.17-c758a686/manual/debug.texi glibc-2.17-c758a686/manual/debug.texi |
|
|
--- glibc-2.17-c758a686/manual/debug.texi 2014-09-12 16:08:17.824070745 -0400 |
|
|
+++ glibc-2.17-c758a686/manual/debug.texi 2014-09-12 16:10:06.045792717 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
@node Debugging Support |
|
|
-@c @node Debugging Support, Internal Probes, Cryptographic Functions, Top |
|
|
+@c @node Debugging Support, POSIX Threads, Cryptographic Functions, Top |
|
|
@c %MENU% Functions to help debugging applications |
|
|
@chapter Debugging support |
|
|
|
|
|
@@ -36,6 +36,16 @@ |
|
|
@comment execinfo.h |
|
|
@comment GNU |
|
|
@deftypefun int backtrace (void **@var{buffer}, int @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asuinit{} @ascuheap{} @ascudlopen{} @ascuplugin{} @asulock{}}@acunsafe{@acuinit{} @acsmem{} @aculock{} @acsfd{}}} |
|
|
+@c The generic implementation just does pointer chasing within the local |
|
|
+@c stack, without any guarantees that this will handle signal frames |
|
|
+@c correctly, so it's AS-Unsafe to begin with. However, most (all?) |
|
|
+@c arches defer to libgcc_s's _Unwind_* implementation, dlopening |
|
|
+@c libgcc_s.so to that end except in a static version of libc. |
|
|
+@c libgcc_s's implementation may in turn defer to libunwind. We can't |
|
|
+@c assume those implementations are AS- or AC-safe, but even if we |
|
|
+@c could, our own initialization path isn't, and libgcc's implementation |
|
|
+@c calls malloc and performs internal locking, so... |
|
|
The @code{backtrace} function obtains a backtrace for the current |
|
|
thread, as a list of pointers, and places the information into |
|
|
@var{buffer}. The argument @var{size} should be the number of |
|
|
@@ -56,6 +66,17 @@ |
|
|
@comment execinfo.h |
|
|
@comment GNU |
|
|
@deftypefun {char **} backtrace_symbols (void *const *@var{buffer}, int @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @aculock{}}} |
|
|
+@c Collects info returned by _dl_addr in an auto array, allocates memory |
|
|
+@c for the whole return buffer with malloc then sprintfs into it storing |
|
|
+@c pointers to the strings into the array entries in the buffer. |
|
|
+@c _dl_addr takes the recursive dl_load_lock then calls |
|
|
+@c _dl_find_dso_for_object and determine_info. |
|
|
+@c _dl_find_dso_for_object calls _dl-addr_inside_object. |
|
|
+@c All of them are safe as long as the lock is held. |
|
|
+@c @asucorrupt? It doesn't look like the dynamic loader's data |
|
|
+@c structures could be in an inconsistent state that would cause |
|
|
+@c malfunction here. |
|
|
The @code{backtrace_symbols} function translates the information |
|
|
obtained from the @code{backtrace} function into an array of strings. |
|
|
The argument @var{buffer} should be a pointer to an array of addresses |
|
|
@@ -88,6 +109,11 @@ |
|
|
@comment execinfo.h |
|
|
@comment GNU |
|
|
@deftypefun void backtrace_symbols_fd (void *const *@var{buffer}, int @var{size}, int @var{fd}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}} |
|
|
+@c Single loop of _dl_addr over addresses, collecting info into an iovec |
|
|
+@c written out with a writev call per iteration. Addresses and offsets |
|
|
+@c are converted to hex in auto buffers, so the only potential issue |
|
|
+@c here is leaking the dl lock in case of cancellation. |
|
|
The @code{backtrace_symbols_fd} function performs the same translation |
|
|
as the function @code{backtrace_symbols} function. Instead of returning |
|
|
the strings to the caller, it writes the strings to the file descriptor |
|
|
diff -urN glibc-2.17-c758a686/manual/errno.texi glibc-2.17-c758a686/manual/errno.texi |
|
|
--- glibc-2.17-c758a686/manual/errno.texi 2014-09-12 16:08:17.752070930 -0400 |
|
|
+++ glibc-2.17-c758a686/manual/errno.texi 2014-09-12 16:10:06.045792717 -0400 |
|
|
@@ -1293,6 +1293,9 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun {char *} strerror (int @var{errnum}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:strerror}}@asunsafe{@ascuheap{} @ascuintl{}}@acunsafe{@acsmem{}}} |
|
|
+@c Calls strerror_r with a static buffer allocated with malloc on the |
|
|
+@c first use. |
|
|
The @code{strerror} function maps the error code (@pxref{Checking for |
|
|
Errors}) specified by the @var{errnum} argument to a descriptive error |
|
|
message string. The return value is a pointer to this string. |
|
|
@@ -1310,10 +1313,11 @@ |
|
|
@comment string.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} strerror_r (int @var{errnum}, char *@var{buf}, size_t @var{n}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuintl{}}@acunsafe{}} |
|
|
The @code{strerror_r} function works like @code{strerror} but instead of |
|
|
returning the error message in a statically allocated buffer shared by |
|
|
all threads in the process, it returns a private copy for the |
|
|
-thread. This might be either some permanent global data or a message |
|
|
+thread. This might be either some permanent global data or a message |
|
|
string in the user supplied buffer starting at @var{buf} with the |
|
|
length of @var{n} bytes. |
|
|
|
|
|
@@ -1331,6 +1335,10 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun void perror (const char *@var{message}) |
|
|
+@safety{@prelim{}@mtsafe{@mtasurace{:stderr}}@asunsafe{@asucorrupt{} @ascuintl{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c Besides strerror_r's and some of fprintf's issues, if stderr is not |
|
|
+@c oriented yet, create a new stream with a dup of stderr's fd and write |
|
|
+@c to that instead of stderr, to avoid orienting it. |
|
|
This function prints an error message to the stream @code{stderr}; |
|
|
see @ref{Standard Streams}. The orientation of @code{stderr} is not |
|
|
changed. |
|
|
@@ -1442,6 +1450,13 @@ |
|
|
@comment error.h |
|
|
@comment GNU |
|
|
@deftypefun void error (int @var{status}, int @var{errnum}, const char *@var{format}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @asuheap{} @asuintl{}}@acsafe{}} |
|
|
+@c Cancellation is disabled throughout the execution. It flushes stdout |
|
|
+@c and then holds a lock on stderr while printing the program name and |
|
|
+@c then running error_tail. The non-wide case just runs vfprintf; the |
|
|
+@c wide case converts the message to an alloca/malloc-allocated buffer |
|
|
+@c with mbsrtowcs, then prints it with vfwprintf. Afterwards, |
|
|
+@c print_errno_message calls strerror_r and fxprintf. |
|
|
The @code{error} function can be used to report general problems during |
|
|
program execution. The @var{format} argument is a format string just |
|
|
like those given to the @code{printf} family of functions. The |
|
|
@@ -1477,6 +1492,15 @@ |
|
|
@comment error.h |
|
|
@comment GNU |
|
|
@deftypefun void error_at_line (int @var{status}, int @var{errnum}, const char *@var{fname}, unsigned int @var{lineno}, const char *@var{format}, @dots{}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:error_at_line/error_one_per_line} @mtslocale{}}@asunsafe{@asucorrupt{} @asuheap{} @asuintl{}}@acunsafe{@acucorrupt{/error_one_per_line}}} |
|
|
+@c The error_one_per_line variable is accessed (without any form of |
|
|
+@c synchronization, but since it's an int used once, it should be safe |
|
|
+@c enough) and, if this mode is enabled, static variables used to hold |
|
|
+@c the last printed file name and line number are accessed and modified |
|
|
+@c without synchronization; the update is not atomic and it occurs |
|
|
+@c before disabling cancellation, so it can be interrupted after only |
|
|
+@c one of the two variables is modified. After that, it's very much |
|
|
+@c like error. |
|
|
|
|
|
The @code{error_at_line} function is very similar to the @code{error} |
|
|
function. The only difference are the additional parameters @var{fname} |
|
|
@@ -1508,7 +1532,7 @@ |
|
|
|
|
|
@comment error.h |
|
|
@comment GNU |
|
|
-@deftypevar {void (*) error_print_progname } (void) |
|
|
+@deftypevar {void (*error_print_progname)} (void) |
|
|
If the @code{error_print_progname} variable is defined to a non-zero |
|
|
value the function pointed to is called by @code{error} or |
|
|
@code{error_at_line}. It is expected to print the program name or do |
|
|
@@ -1582,6 +1606,8 @@ |
|
|
@comment err.h |
|
|
@comment BSD |
|
|
@deftypefun void warn (const char *@var{format}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} |
|
|
+@c Just calls vwarn with the va_list. |
|
|
The @code{warn} function is roughly equivalent to a call like |
|
|
@smallexample |
|
|
error (0, errno, format, @r{the parameters}) |
|
|
@@ -1594,14 +1620,21 @@ |
|
|
@comment err.h |
|
|
@comment BSD |
|
|
@deftypefun void vwarn (const char *@var{format}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} |
|
|
+@c While holding stderr's recursive lock, it prints the programname, the |
|
|
+@c given message, and the error string with fw?printf's %m. When the |
|
|
+@c stream is wide, convert_and_print converts the format string to an |
|
|
+@c alloca/malloc-created buffer using mbsrtowcs and then calls fwprintf. |
|
|
The @code{vwarn} function is just like @code{warn} except that the |
|
|
parameters for the handling of the format string @var{format} are passed |
|
|
-in as an value of type @code{va_list}. |
|
|
+in as a value of type @code{va_list}. |
|
|
@end deftypefun |
|
|
|
|
|
@comment err.h |
|
|
@comment BSD |
|
|
@deftypefun void warnx (const char *@var{format}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} |
|
|
+@c Same as warn, but without the strerror translation issues. |
|
|
The @code{warnx} function is roughly equivalent to a call like |
|
|
@smallexample |
|
|
error (0, 0, format, @r{the parameters}) |
|
|
@@ -1615,14 +1648,18 @@ |
|
|
@comment err.h |
|
|
@comment BSD |
|
|
@deftypefun void vwarnx (const char *@var{format}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} |
|
|
+@c Same as vwarn, but without the strerror translation issues. |
|
|
The @code{vwarnx} function is just like @code{warnx} except that the |
|
|
parameters for the handling of the format string @var{format} are passed |
|
|
-in as an value of type @code{va_list}. |
|
|
+in as a value of type @code{va_list}. |
|
|
@end deftypefun |
|
|
|
|
|
@comment err.h |
|
|
@comment BSD |
|
|
@deftypefun void err (int @var{status}, const char *@var{format}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} |
|
|
+@c Same as warn followed by exit. |
|
|
The @code{err} function is roughly equivalent to a call like |
|
|
@smallexample |
|
|
error (status, errno, format, @r{the parameters}) |
|
|
@@ -1635,14 +1672,18 @@ |
|
|
@comment err.h |
|
|
@comment BSD |
|
|
@deftypefun void verr (int @var{status}, const char *@var{format}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascuintl{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} |
|
|
+@c Same as vwarn followed by exit. |
|
|
The @code{verr} function is just like @code{err} except that the |
|
|
parameters for the handling of the format string @var{format} are passed |
|
|
-in as an value of type @code{va_list}. |
|
|
+in as a value of type @code{va_list}. |
|
|
@end deftypefun |
|
|
|
|
|
@comment err.h |
|
|
@comment BSD |
|
|
@deftypefun void errx (int @var{status}, const char *@var{format}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} |
|
|
+@c Same as warnx followed by exit. |
|
|
The @code{errx} function is roughly equivalent to a call like |
|
|
@smallexample |
|
|
error (status, 0, format, @r{the parameters}) |
|
|
@@ -1657,7 +1698,9 @@ |
|
|
@comment err.h |
|
|
@comment BSD |
|
|
@deftypefun void verrx (int @var{status}, const char *@var{format}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} |
|
|
+@c Same as vwarnx followed by exit. |
|
|
The @code{verrx} function is just like @code{errx} except that the |
|
|
parameters for the handling of the format string @var{format} are passed |
|
|
-in as an value of type @code{va_list}. |
|
|
+in as a value of type @code{va_list}. |
|
|
@end deftypefun |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/add.c glibc-2.17-c758a686/manual/examples/add.c |
|
|
--- glibc-2.17-c758a686/manual/examples/add.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/add.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Example of a Variadic Function |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/argp-ex1.c glibc-2.17-c758a686/manual/examples/argp-ex1.c |
|
|
--- glibc-2.17-c758a686/manual/examples/argp-ex1.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/argp-ex1.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Argp example #1 -- a minimal program using argp |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/argp-ex2.c glibc-2.17-c758a686/manual/examples/argp-ex2.c |
|
|
--- glibc-2.17-c758a686/manual/examples/argp-ex2.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/argp-ex2.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Argp example #2 -- a pretty minimal program using argp |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/argp-ex3.c glibc-2.17-c758a686/manual/examples/argp-ex3.c |
|
|
--- glibc-2.17-c758a686/manual/examples/argp-ex3.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/argp-ex3.c 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Argp example #3 -- a program with options and arguments using argp |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/argp-ex4.c glibc-2.17-c758a686/manual/examples/argp-ex4.c |
|
|
--- glibc-2.17-c758a686/manual/examples/argp-ex4.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/argp-ex4.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Argp example #4 -- a program with somewhat more complicated options |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/atexit.c glibc-2.17-c758a686/manual/examples/atexit.c |
|
|
--- glibc-2.17-c758a686/manual/examples/atexit.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/atexit.c 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Cleanups on Exit |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/db.c glibc-2.17-c758a686/manual/examples/db.c |
|
|
--- glibc-2.17-c758a686/manual/examples/db.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/db.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* User and Group Database Example |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/dir2.c glibc-2.17-c758a686/manual/examples/dir2.c |
|
|
--- glibc-2.17-c758a686/manual/examples/dir2.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/dir2.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Simple Program to List a Directory, Mark II |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/dir.c glibc-2.17-c758a686/manual/examples/dir.c |
|
|
--- glibc-2.17-c758a686/manual/examples/dir.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/dir.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Simple Program to List a Directory |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/execinfo.c glibc-2.17-c758a686/manual/examples/execinfo.c |
|
|
--- glibc-2.17-c758a686/manual/examples/execinfo.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/execinfo.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Obtain a backtrace and print it. |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/filecli.c glibc-2.17-c758a686/manual/examples/filecli.c |
|
|
--- glibc-2.17-c758a686/manual/examples/filecli.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/filecli.c 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Example of Reading Datagrams |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/filesrv.c glibc-2.17-c758a686/manual/examples/filesrv.c |
|
|
--- glibc-2.17-c758a686/manual/examples/filesrv.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/filesrv.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Datagram Socket Example |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/fmtmsgexpl.c glibc-2.17-c758a686/manual/examples/fmtmsgexpl.c |
|
|
--- glibc-2.17-c758a686/manual/examples/fmtmsgexpl.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/fmtmsgexpl.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* How to use fmtmsg and addseverity. |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/genpass.c glibc-2.17-c758a686/manual/examples/genpass.c |
|
|
--- glibc-2.17-c758a686/manual/examples/genpass.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/genpass.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Encrypting Passwords |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/inetcli.c glibc-2.17-c758a686/manual/examples/inetcli.c |
|
|
--- glibc-2.17-c758a686/manual/examples/inetcli.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/inetcli.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Byte Stream Socket Example |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/inetsrv.c glibc-2.17-c758a686/manual/examples/inetsrv.c |
|
|
--- glibc-2.17-c758a686/manual/examples/inetsrv.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/inetsrv.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Byte Stream Connection Server Example |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/isockad.c glibc-2.17-c758a686/manual/examples/isockad.c |
|
|
--- glibc-2.17-c758a686/manual/examples/isockad.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/isockad.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Internet Socket Example using sockaddr_in. |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/longopt.c glibc-2.17-c758a686/manual/examples/longopt.c |
|
|
--- glibc-2.17-c758a686/manual/examples/longopt.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/longopt.c 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Example of Parsing Long Options with getopt_long. |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/memopen.c glibc-2.17-c758a686/manual/examples/memopen.c |
|
|
--- glibc-2.17-c758a686/manual/examples/memopen.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/memopen.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* String Streams |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/memstrm.c glibc-2.17-c758a686/manual/examples/memstrm.c |
|
|
--- glibc-2.17-c758a686/manual/examples/memstrm.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/memstrm.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* open_memstream example. |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/mkfsock.c glibc-2.17-c758a686/manual/examples/mkfsock.c |
|
|
--- glibc-2.17-c758a686/manual/examples/mkfsock.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/mkfsock.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Example of Local-Namespace Sockets |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
@@ -45,13 +45,12 @@ |
|
|
|
|
|
/* The size of the address is |
|
|
the offset of the start of the filename, |
|
|
- plus its length, |
|
|
- plus one for the terminating null byte. |
|
|
+ plus its length (not including the terminating null byte). |
|
|
Alternatively you can just do: |
|
|
size = SUN_LEN (&name); |
|
|
*/ |
|
|
size = (offsetof (struct sockaddr_un, sun_path) |
|
|
- + strlen (name.sun_path) + 1); |
|
|
+ + strlen (name.sun_path)); |
|
|
|
|
|
if (bind (sock, (struct sockaddr *) &name, size) < 0) |
|
|
{ |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/mkisock.c glibc-2.17-c758a686/manual/examples/mkisock.c |
|
|
--- glibc-2.17-c758a686/manual/examples/mkisock.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/mkisock.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Internet Socket Example |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/mygetpass.c glibc-2.17-c758a686/manual/examples/mygetpass.c |
|
|
--- glibc-2.17-c758a686/manual/examples/mygetpass.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/mygetpass.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Reading Passwords |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/pipe.c glibc-2.17-c758a686/manual/examples/pipe.c |
|
|
--- glibc-2.17-c758a686/manual/examples/pipe.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/pipe.c 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Creating a Pipe |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/popen.c glibc-2.17-c758a686/manual/examples/popen.c |
|
|
--- glibc-2.17-c758a686/manual/examples/popen.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/popen.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Pipe to a Subprocess |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/rprintf.c glibc-2.17-c758a686/manual/examples/rprintf.c |
|
|
--- glibc-2.17-c758a686/manual/examples/rprintf.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/rprintf.c 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Printf Extension Example |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/search.c glibc-2.17-c758a686/manual/examples/search.c |
|
|
--- glibc-2.17-c758a686/manual/examples/search.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/search.c 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Searching and Sorting Example |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/select.c glibc-2.17-c758a686/manual/examples/select.c |
|
|
--- glibc-2.17-c758a686/manual/examples/select.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/select.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Waiting for Input or Output |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/setjmp.c glibc-2.17-c758a686/manual/examples/setjmp.c |
|
|
--- glibc-2.17-c758a686/manual/examples/setjmp.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/setjmp.c 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Introduction to Non-Local Exits |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/sigh1.c glibc-2.17-c758a686/manual/examples/sigh1.c |
|
|
--- glibc-2.17-c758a686/manual/examples/sigh1.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/sigh1.c 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Signal Handlers that Return |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/sigusr.c glibc-2.17-c758a686/manual/examples/sigusr.c |
|
|
--- glibc-2.17-c758a686/manual/examples/sigusr.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/sigusr.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Using kill for Communication |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/stpcpy.c glibc-2.17-c758a686/manual/examples/stpcpy.c |
|
|
--- glibc-2.17-c758a686/manual/examples/stpcpy.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/stpcpy.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* stpcpy example. |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/strdupa.c glibc-2.17-c758a686/manual/examples/strdupa.c |
|
|
--- glibc-2.17-c758a686/manual/examples/strdupa.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/strdupa.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* strdupa example. |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/strftim.c glibc-2.17-c758a686/manual/examples/strftim.c |
|
|
--- glibc-2.17-c758a686/manual/examples/strftim.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/strftim.c 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Time Functions Example |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/strncat.c glibc-2.17-c758a686/manual/examples/strncat.c |
|
|
--- glibc-2.17-c758a686/manual/examples/strncat.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/strncat.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* strncat example. |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/subopt.c glibc-2.17-c758a686/manual/examples/subopt.c |
|
|
--- glibc-2.17-c758a686/manual/examples/subopt.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/subopt.c 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Parsing of Suboptions Example |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/swapcontext.c glibc-2.17-c758a686/manual/examples/swapcontext.c |
|
|
--- glibc-2.17-c758a686/manual/examples/swapcontext.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/swapcontext.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Complete Context Control |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/termios.c glibc-2.17-c758a686/manual/examples/termios.c |
|
|
--- glibc-2.17-c758a686/manual/examples/termios.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/termios.c 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Noncanonical Mode Example |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/testopt.c glibc-2.17-c758a686/manual/examples/testopt.c |
|
|
--- glibc-2.17-c758a686/manual/examples/testopt.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/testopt.c 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Example of Parsing Arguments with getopt. |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/testpass.c glibc-2.17-c758a686/manual/examples/testpass.c |
|
|
--- glibc-2.17-c758a686/manual/examples/testpass.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/testpass.c 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* Verify a password. |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/examples/timeval_subtract.c glibc-2.17-c758a686/manual/examples/timeval_subtract.c |
|
|
--- glibc-2.17-c758a686/manual/examples/timeval_subtract.c 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/examples/timeval_subtract.c 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
/* struct timeval subtraction. |
|
|
- Copyright (C) 1991-2012 Free Software Foundation, Inc. |
|
|
+ Copyright (C) 1991-2014 Free Software Foundation, Inc. |
|
|
|
|
|
This program is free software; you can redistribute it and/or |
|
|
modify it under the terms of the GNU General Public License |
|
|
diff -urN glibc-2.17-c758a686/manual/filesys.texi glibc-2.17-c758a686/manual/filesys.texi |
|
|
--- glibc-2.17-c758a686/manual/filesys.texi 2014-09-12 16:08:17.966070381 -0400 |
|
|
+++ glibc-2.17-c758a686/manual/filesys.texi 2014-09-12 16:10:06.044792719 -0400 |
|
|
@@ -58,6 +58,25 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun {char *} getcwd (char *@var{buffer}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} |
|
|
+@c If buffer is NULL, this function calls malloc and realloc, and, in |
|
|
+@c case of error, free. Linux offers a getcwd syscall that we use on |
|
|
+@c GNU/Linux systems, but it may fail if the pathname is too long. As a |
|
|
+@c fallback, and on other systems, the generic implementation opens each |
|
|
+@c parent directory with opendir, which allocates memory for the |
|
|
+@c directory stream with malloc. If a fstatat64 syscall is not |
|
|
+@c available, very deep directory trees may also have to malloc to build |
|
|
+@c longer sequences of ../../../... than those supported by a global |
|
|
+@c const read-only string. |
|
|
+ |
|
|
+@c linux/__getcwd |
|
|
+@c posix/__getcwd |
|
|
+@c malloc/realloc/free if buffer is NULL, or if dir is too deep |
|
|
+@c lstat64 -> see its own entry |
|
|
+@c fstatat64 |
|
|
+@c direct syscall if possible, alloca+snprintf+*stat64 otherwise |
|
|
+@c openat64_not_cancel_3, close_not_cancel_no_status |
|
|
+@c __fdopendir, __opendir, __readdir, rewinddir |
|
|
The @code{getcwd} function returns an absolute file name representing |
|
|
the current working directory, storing it in the character array |
|
|
@var{buffer} that you provide. The @var{size} argument is how you tell |
|
|
@@ -116,6 +135,9 @@ |
|
|
@comment unistd.h |
|
|
@comment BSD |
|
|
@deftypefn {Deprecated Function} {char *} getwd (char *@var{buffer}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @ascuintl{}}@acunsafe{@acsmem{} @acsfd{}}} |
|
|
+@c Besides the getcwd safety issues, it calls strerror_r on error, which |
|
|
+@c brings in all of the i18n issues. |
|
|
This is similar to @code{getcwd}, but has no way to specify the size of |
|
|
the buffer. @Theglibc{} provides @code{getwd} only |
|
|
for backwards compatibility with BSD. |
|
|
@@ -130,6 +152,9 @@ |
|
|
@comment unistd.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} get_current_dir_name (void) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} |
|
|
+@c Besides getcwd, which this function calls as a fallback, it calls |
|
|
+@c getenv, with the potential thread-safety issues that brings about. |
|
|
@vindex PWD |
|
|
This @code{get_current_dir_name} function is basically equivalent to |
|
|
@w{@code{getcwd (NULL, 0)}}. The only difference is that the value of |
|
|
@@ -145,6 +170,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int chdir (const char *@var{filename}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is used to set the process's working directory to |
|
|
@var{filename}. |
|
|
|
|
|
@@ -158,6 +184,7 @@ |
|
|
@comment unistd.h |
|
|
@comment XPG |
|
|
@deftypefun int fchdir (int @var{filedes}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is used to set the process's working directory to |
|
|
directory associated with the file descriptor @var{filedes}. |
|
|
|
|
|
@@ -294,12 +321,14 @@ |
|
|
@comment dirent.h |
|
|
@comment BSD |
|
|
@deftypefun int IFTODT (mode_t @var{mode}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This returns the @code{d_type} value corresponding to @var{mode}. |
|
|
@end deftypefun |
|
|
|
|
|
@comment dirent.h |
|
|
@comment BSD |
|
|
@deftypefun mode_t DTTOIF (int @var{dtype}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This returns the @code{st_mode} value corresponding to @var{dtype}. |
|
|
@end deftypefun |
|
|
@end table |
|
|
@@ -342,6 +371,9 @@ |
|
|
@comment dirent.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun {DIR *} opendir (const char *@var{dirname}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} |
|
|
+@c Besides the safe syscall, we have to allocate the DIR object with |
|
|
+@c __alloc_dir, that calls malloc. |
|
|
The @code{opendir} function opens and returns a directory stream for |
|
|
reading the directory whose file name is @var{dirname}. The stream has |
|
|
type @code{DIR *}. |
|
|
@@ -381,6 +413,8 @@ |
|
|
@comment dirent.h |
|
|
@comment GNU |
|
|
@deftypefun {DIR *} fdopendir (int @var{fd}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} |
|
|
+@c The DIR object is allocated with __alloc_dir, that calls malloc. |
|
|
The @code{fdopendir} function works just like @code{opendir} but |
|
|
instead of taking a file name and opening a file descriptor for the |
|
|
directory the caller is required to provide a file descriptor. This |
|
|
@@ -425,6 +459,7 @@ |
|
|
@comment dirent.h |
|
|
@comment GNU |
|
|
@deftypefun int dirfd (DIR *@var{dirstream}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The function @code{dirfd} returns the file descriptor associated with |
|
|
the directory stream @var{dirstream}. This descriptor can be used until |
|
|
the directory is closed with @code{closedir}. If the directory stream |
|
|
@@ -443,6 +478,12 @@ |
|
|
@comment dirent.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun {struct dirent *} readdir (DIR *@var{dirstream}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:dirstream}}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c This function holds dirstream's non-recursive lock, which brings |
|
|
+@c about the usual issues with locks and async signals and cancellation, |
|
|
+@c but the lock taking is not enough to make the returned value safe to |
|
|
+@c use, since it points to a stream's internal buffer that can be |
|
|
+@c overwritten by subsequent calls or even released by closedir. |
|
|
This function reads the next entry from the directory. It normally |
|
|
returns a pointer to a structure containing information about the |
|
|
file. This structure is associated with the @var{dirstream} handle |
|
|
@@ -478,6 +519,7 @@ |
|
|
@comment dirent.h |
|
|
@comment GNU |
|
|
@deftypefun int readdir_r (DIR *@var{dirstream}, struct dirent *@var{entry}, struct dirent **@var{result}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
This function is a version of @code{readdir} which performs internal |
|
|
locking. Like @code{readdir} it returns the next entry from the |
|
|
directory. To prevent conflicts between simultaneously running |
|
|
@@ -549,6 +591,7 @@ |
|
|
@comment dirent.h |
|
|
@comment LFS |
|
|
@deftypefun {struct dirent64 *} readdir64 (DIR *@var{dirstream}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:dirstream}}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
The @code{readdir64} function is just like the @code{readdir} function |
|
|
except that it returns a pointer to a record of type @code{struct |
|
|
dirent64}. Some of the members of this data type (notably @code{d_ino}) |
|
|
@@ -560,6 +603,7 @@ |
|
|
@comment dirent.h |
|
|
@comment LFS |
|
|
@deftypefun int readdir64_r (DIR *@var{dirstream}, struct dirent64 *@var{entry}, struct dirent64 **@var{result}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
The @code{readdir64_r} function is equivalent to the @code{readdir_r} |
|
|
function except that it takes parameters of base type @code{struct |
|
|
dirent64} instead of @code{struct dirent} in the second and third |
|
|
@@ -570,6 +614,10 @@ |
|
|
@comment dirent.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int closedir (DIR *@var{dirstream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{/hurd}}@acunsafe{@acsmem{} @acsfd{} @aculock{/hurd}}} |
|
|
+@c No synchronization in the posix implementation, only in the hurd |
|
|
+@c one. This is regarded as safe because it is undefined behavior if |
|
|
+@c other threads could still be using the dir stream while it's closed. |
|
|
This function closes the directory stream @var{dirstream}. It returns |
|
|
@code{0} on success and @code{-1} on failure. |
|
|
|
|
|
@@ -609,6 +657,7 @@ |
|
|
@comment dirent.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun void rewinddir (DIR *@var{dirstream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
The @code{rewinddir} function is used to reinitialize the directory |
|
|
stream @var{dirstream}, so that if you call @code{readdir} it |
|
|
returns information about the first entry in the directory again. This |
|
|
@@ -622,6 +671,10 @@ |
|
|
@comment dirent.h |
|
|
@comment BSD |
|
|
@deftypefun {long int} telldir (DIR *@var{dirstream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd} @asulock{/bsd}}@acunsafe{@acsmem{/bsd} @aculock{/bsd}}} |
|
|
+@c The implementation is safe on most platforms, but on BSD it uses |
|
|
+@c cookies, buckets and records, and the global array of pointers to |
|
|
+@c dynamically allocated records is guarded by a non-recursive lock. |
|
|
The @code{telldir} function returns the file position of the directory |
|
|
stream @var{dirstream}. You can use this value with @code{seekdir} to |
|
|
restore the directory stream to that position. |
|
|
@@ -630,6 +683,10 @@ |
|
|
@comment dirent.h |
|
|
@comment BSD |
|
|
@deftypefun void seekdir (DIR *@var{dirstream}, long int @var{pos}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd} @asulock{/bsd}}@acunsafe{@acsmem{/bsd} @aculock{/bsd}}} |
|
|
+@c The implementation is safe on most platforms, but on BSD it uses |
|
|
+@c cookies, buckets and records, and the global array of pointers to |
|
|
+@c dynamically allocated records is guarded by a non-recursive lock. |
|
|
The @code{seekdir} function sets the file position of the directory |
|
|
stream @var{dirstream} to @var{pos}. The value @var{pos} must be the |
|
|
result of a previous call to @code{telldir} on this particular stream; |
|
|
@@ -648,7 +705,20 @@ |
|
|
|
|
|
@comment dirent.h |
|
|
@comment BSD/SVID |
|
|
-@deftypefun int scandir (const char *@var{dir}, struct dirent ***@var{namelist}, int (*@var{selector}) (const struct dirent *), int (*@var{cmp}) (const void *, const void *)) |
|
|
+@deftypefun int scandir (const char *@var{dir}, struct dirent ***@var{namelist}, int (*@var{selector}) (const struct dirent *), int (*@var{cmp}) (const struct dirent **, const struct dirent **)) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} |
|
|
+@c The scandir function calls __opendirat, __readdir, and __closedir to |
|
|
+@c go over the named dir; malloc and realloc to allocate the namelist |
|
|
+@c and copies of each selected dirent, besides the selector, if given, |
|
|
+@c and qsort and the cmp functions if the latter is given. In spite of |
|
|
+@c the cleanup handler that releases memory and the file descriptor in |
|
|
+@c case of synchronous cancellation, an asynchronous cancellation may |
|
|
+@c still leak memory and a file descriptor. Although readdir is unsafe |
|
|
+@c in general, the use of an internal dir stream for sequential scanning |
|
|
+@c of the directory with copying of dirents before subsequent calls |
|
|
+@c makes the use safe, and the fact that the dir stream is private to |
|
|
+@c each scandir call does away with the lock issues in readdir and |
|
|
+@c closedir. |
|
|
|
|
|
The @code{scandir} function scans the contents of the directory selected |
|
|
by @var{dir}. The result in *@var{namelist} is an array of pointers to |
|
|
@@ -678,7 +748,9 @@ |
|
|
|
|
|
@comment dirent.h |
|
|
@comment BSD/SVID |
|
|
-@deftypefun int alphasort (const void *@var{a}, const void *@var{b}) |
|
|
+@deftypefun int alphasort (const struct dirent **@var{a}, const struct dirent **@var{b}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c Calls strcoll. |
|
|
The @code{alphasort} function behaves like the @code{strcoll} function |
|
|
(@pxref{String/Array Comparison}). The difference is that the arguments |
|
|
are not string pointers but instead they are of type |
|
|
@@ -690,7 +762,10 @@ |
|
|
|
|
|
@comment dirent.h |
|
|
@comment GNU |
|
|
-@deftypefun int versionsort (const void *@var{a}, const void *@var{b}) |
|
|
+@deftypefun int versionsort (const struct dirent **@var{a}, const struct dirent **@var{b}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c Calls strverscmp, which will accesses the locale object multiple |
|
|
+@c times. |
|
|
The @code{versionsort} function is like @code{alphasort} except that it |
|
|
uses the @code{strverscmp} function internally. |
|
|
@end deftypefun |
|
|
@@ -702,7 +777,9 @@ |
|
|
|
|
|
@comment dirent.h |
|
|
@comment GNU |
|
|
-@deftypefun int scandir64 (const char *@var{dir}, struct dirent64 ***@var{namelist}, int (*@var{selector}) (const struct dirent64 *), int (*@var{cmp}) (const void *, const void *)) |
|
|
+@deftypefun int scandir64 (const char *@var{dir}, struct dirent64 ***@var{namelist}, int (*@var{selector}) (const struct dirent64 *), int (*@var{cmp}) (const struct dirent64 **, const struct dirent64 **)) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} |
|
|
+@c See scandir. |
|
|
The @code{scandir64} function works like the @code{scandir} function |
|
|
except that the directory entries it returns are described by elements |
|
|
of type @w{@code{struct dirent64}}. The function pointed to by |
|
|
@@ -720,7 +797,9 @@ |
|
|
|
|
|
@comment dirent.h |
|
|
@comment GNU |
|
|
-@deftypefun int alphasort64 (const void *@var{a}, const void *@var{b}) |
|
|
+@deftypefun int alphasort64 (const struct dirent64 **@var{a}, const struct dirent **@var{b}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c See alphasort. |
|
|
The @code{alphasort64} function behaves like the @code{strcoll} function |
|
|
(@pxref{String/Array Comparison}). The difference is that the arguments |
|
|
are not string pointers but instead they are of type |
|
|
@@ -732,7 +811,9 @@ |
|
|
|
|
|
@comment dirent.h |
|
|
@comment GNU |
|
|
-@deftypefun int versionsort64 (const void *@var{a}, const void *@var{b}) |
|
|
+@deftypefun int versionsort64 (const struct dirent64 **@var{a}, const struct dirent64 **@var{b}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c See versionsort. |
|
|
The @code{versionsort64} function is like @code{alphasort64}, excepted that it |
|
|
uses the @code{strverscmp} function internally. |
|
|
@end deftypefun |
|
|
@@ -812,7 +893,7 @@ |
|
|
file does not exist. The situation for @code{nftw} is different. |
|
|
|
|
|
This value is only available if the program is compiled with |
|
|
-@code{_BSD_SOURCE} or @code{_XOPEN_EXTENDED} defined before including |
|
|
+@code{_XOPEN_EXTENDED} defined before including |
|
|
the first header. The original SVID systems do not have symbolic links. |
|
|
@end vtable |
|
|
|
|
|
@@ -913,6 +994,8 @@ |
|
|
@comment ftw.h |
|
|
@comment SVID |
|
|
@deftypefun int ftw (const char *@var{filename}, __ftw_func_t @var{func}, int @var{descriptors}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} |
|
|
+@c see nftw for safety details |
|
|
The @code{ftw} function calls the callback function given in the |
|
|
parameter @var{func} for every item which is found in the directory |
|
|
specified by @var{filename} and all directories below. The function |
|
|
@@ -963,6 +1046,7 @@ |
|
|
@comment ftw.h |
|
|
@comment Unix98 |
|
|
@deftypefun int ftw64 (const char *@var{filename}, __ftw64_func_t @var{func}, int @var{descriptors}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} |
|
|
This function is similar to @code{ftw} but it can work on filesystems |
|
|
with large files. File information is reported using a variable of type |
|
|
@code{struct stat64} which is passed by reference to the callback |
|
|
@@ -976,6 +1060,17 @@ |
|
|
@comment ftw.h |
|
|
@comment XPG4.2 |
|
|
@deftypefun int nftw (const char *@var{filename}, __nftw_func_t @var{func}, int @var{descriptors}, int @var{flag}) |
|
|
+@safety{@prelim{}@mtsafe{@mtasscwd{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{} @acscwd{}}} |
|
|
+@c ftw_startup calls alloca, malloc, free, xstat/lxstat, tdestroy, and ftw_dir |
|
|
+@c if FTW_CHDIR, call open, and fchdir, or chdir and getcwd |
|
|
+@c ftw_dir calls open_dir_stream, readdir64, process_entry, closedir |
|
|
+@c if FTW_CHDIR, also calls fchdir |
|
|
+@c open_dir_stream calls malloc, realloc, readdir64, free, closedir, |
|
|
+@c then openat64_not_cancel_3 and fdopendir or opendir, then dirfd. |
|
|
+@c process_entry may cal realloc, fxstatat/lxstat/xstat, ftw_dir, and |
|
|
+@c find_object (tsearch) and add_object (tfind). |
|
|
+@c Since each invocation of *ftw uses its own private search tree, none |
|
|
+@c of the search tree concurrency issues apply. |
|
|
The @code{nftw} function works like the @code{ftw} functions. They call |
|
|
the callback function @var{func} for all items found in the directory |
|
|
@var{filename} and below. At most @var{descriptors} file descriptors |
|
|
@@ -1036,6 +1131,7 @@ |
|
|
@comment ftw.h |
|
|
@comment Unix98 |
|
|
@deftypefun int nftw64 (const char *@var{filename}, __nftw64_func_t @var{func}, int @var{descriptors}, int @var{flag}) |
|
|
+@safety{@prelim{}@mtsafe{@mtasscwd{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{} @acscwd{}}} |
|
|
This function is similar to @code{nftw} but it can work on filesystems |
|
|
with large files. File information is reported using a variable of type |
|
|
@code{struct stat64} which is passed by reference to the callback |
|
|
@@ -1079,6 +1175,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int link (const char *@var{oldname}, const char *@var{newname}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{link} function makes a new link to the existing file named by |
|
|
@var{oldname}, under the new name @var{newname}. |
|
|
|
|
|
@@ -1186,6 +1283,7 @@ |
|
|
@comment unistd.h |
|
|
@comment BSD |
|
|
@deftypefun int symlink (const char *@var{oldname}, const char *@var{newname}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{symlink} function makes a symbolic link to @var{oldname} named |
|
|
@var{newname}. |
|
|
|
|
|
@@ -1222,7 +1320,8 @@ |
|
|
|
|
|
@comment unistd.h |
|
|
@comment BSD |
|
|
-@deftypefun int readlink (const char *@var{filename}, char *@var{buffer}, size_t @var{size}) |
|
|
+@deftypefun ssize_t readlink (const char *@var{filename}, char *@var{buffer}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{readlink} function gets the value of the symbolic link |
|
|
@var{filename}. The file name that the link points to is copied into |
|
|
@var{buffer}. This file name string is @emph{not} null-terminated; |
|
|
@@ -1282,6 +1381,8 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} canonicalize_file_name (const char *@var{name}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} |
|
|
+@c Calls realpath. |
|
|
|
|
|
The @code{canonicalize_file_name} function returns the absolute name of |
|
|
the file named by @var{name} which contains no @code{.}, @code{..} |
|
|
@@ -1323,6 +1424,8 @@ |
|
|
@comment stdlib.h |
|
|
@comment XPG |
|
|
@deftypefun {char *} realpath (const char *restrict @var{name}, char *restrict @var{resolved}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} |
|
|
+@c Calls malloc, realloc, getcwd, lxstat64, readlink, alloca. |
|
|
|
|
|
A call to @code{realpath} where the @var{resolved} parameter is |
|
|
@code{NULL} behaves exactly like @code{canonicalize_file_name}. The |
|
|
@@ -1362,6 +1465,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int unlink (const char *@var{filename}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{unlink} function deletes the file name @var{filename}. If |
|
|
this is a file's sole name, the file itself is also deleted. (Actually, |
|
|
if any process has the file open when this happens, deletion is |
|
|
@@ -1404,6 +1508,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int rmdir (const char *@var{filename}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@cindex directories, deleting |
|
|
@cindex deleting a directory |
|
|
The @code{rmdir} function deletes a directory. The directory must be |
|
|
@@ -1431,6 +1536,8 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int remove (const char *@var{filename}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Calls unlink and rmdir. |
|
|
This is the @w{ISO C} function to remove a file. It works like |
|
|
@code{unlink} for files and like @code{rmdir} for directories. |
|
|
@code{remove} is declared in @file{stdio.h}. |
|
|
@@ -1446,6 +1553,10 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int rename (const char *@var{oldname}, const char *@var{newname}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c In the absence of a rename syscall, there's an emulation with link |
|
|
+@c and unlink, but it's racy, even more so if newname exists and is |
|
|
+@c unlinked first. |
|
|
The @code{rename} function renames the file @var{oldname} to |
|
|
@var{newname}. The file formerly accessible under the name |
|
|
@var{oldname} is afterwards accessible as @var{newname} instead. (If |
|
|
@@ -1541,6 +1652,7 @@ |
|
|
@comment sys/stat.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int mkdir (const char *@var{filename}, mode_t @var{mode}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{mkdir} function creates a new, empty directory with name |
|
|
@var{filename}. |
|
|
|
|
|
@@ -1882,6 +1994,7 @@ |
|
|
@comment sys/stat.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int stat (const char *@var{filename}, struct stat *@var{buf}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{stat} function returns information about the attributes of the |
|
|
file named by @w{@var{filename}} in the structure pointed to by @var{buf}. |
|
|
|
|
|
@@ -1908,8 +2021,9 @@ |
|
|
@comment sys/stat.h |
|
|
@comment Unix98 |
|
|
@deftypefun int stat64 (const char *@var{filename}, struct stat64 *@var{buf}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is similar to @code{stat} but it is also able to work on |
|
|
-files larger then @math{2^31} bytes on 32-bit systems. To be able to do |
|
|
+files larger than @math{2^31} bytes on 32-bit systems. To be able to do |
|
|
this the result is stored in a variable of type @code{struct stat64} to |
|
|
which @var{buf} must point. |
|
|
|
|
|
@@ -1921,6 +2035,7 @@ |
|
|
@comment sys/stat.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int fstat (int @var{filedes}, struct stat *@var{buf}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{fstat} function is like @code{stat}, except that it takes an |
|
|
open file descriptor as an argument instead of a file name. |
|
|
@xref{Low-Level I/O}. |
|
|
@@ -1942,6 +2057,7 @@ |
|
|
@comment sys/stat.h |
|
|
@comment Unix98 |
|
|
@deftypefun int fstat64 (int @var{filedes}, struct stat64 *@var{buf}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is similar to @code{fstat} but is able to work on large |
|
|
files on 32-bit platforms. For large files the file descriptor |
|
|
@var{filedes} should be obtained by @code{open64} or @code{creat64}. |
|
|
@@ -1953,9 +2069,16 @@ |
|
|
replaces the interface for small files on 32-bit machines. |
|
|
@end deftypefun |
|
|
|
|
|
+@c fstatat will call alloca and snprintf if the syscall is not |
|
|
+@c available. |
|
|
+@c @safety{@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+ |
|
|
@comment sys/stat.h |
|
|
@comment BSD |
|
|
@deftypefun int lstat (const char *@var{filename}, struct stat *@var{buf}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct system call through lxstat, sometimes with an xstat conv call |
|
|
+@c afterwards. |
|
|
The @code{lstat} function is like @code{stat}, except that it does not |
|
|
follow symbolic links. If @var{filename} is the name of a symbolic |
|
|
link, @code{lstat} returns information about the link itself; otherwise |
|
|
@@ -1969,8 +2092,11 @@ |
|
|
@comment sys/stat.h |
|
|
@comment Unix98 |
|
|
@deftypefun int lstat64 (const char *@var{filename}, struct stat64 *@var{buf}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct system call through lxstat64, sometimes with an xstat conv |
|
|
+@c call afterwards. |
|
|
This function is similar to @code{lstat} but it is also able to work on |
|
|
-files larger then @math{2^31} bytes on 32-bit systems. To be able to do |
|
|
+files larger than @math{2^31} bytes on 32-bit systems. To be able to do |
|
|
this the result is stored in a variable of type @code{struct stat64} to |
|
|
which @var{buf} must point. |
|
|
|
|
|
@@ -2007,12 +2133,14 @@ |
|
|
@comment sys/stat.h |
|
|
@comment POSIX |
|
|
@deftypefn Macro int S_ISDIR (mode_t @var{m}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro returns non-zero if the file is a directory. |
|
|
@end deftypefn |
|
|
|
|
|
@comment sys/stat.h |
|
|
@comment POSIX |
|
|
@deftypefn Macro int S_ISCHR (mode_t @var{m}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro returns non-zero if the file is a character special file (a |
|
|
device like a terminal). |
|
|
@end deftypefn |
|
|
@@ -2020,6 +2148,7 @@ |
|
|
@comment sys/stat.h |
|
|
@comment POSIX |
|
|
@deftypefn Macro int S_ISBLK (mode_t @var{m}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro returns non-zero if the file is a block special file (a device |
|
|
like a disk). |
|
|
@end deftypefn |
|
|
@@ -2027,12 +2156,14 @@ |
|
|
@comment sys/stat.h |
|
|
@comment POSIX |
|
|
@deftypefn Macro int S_ISREG (mode_t @var{m}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro returns non-zero if the file is a regular file. |
|
|
@end deftypefn |
|
|
|
|
|
@comment sys/stat.h |
|
|
@comment POSIX |
|
|
@deftypefn Macro int S_ISFIFO (mode_t @var{m}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro returns non-zero if the file is a FIFO special file, or a |
|
|
pipe. @xref{Pipes and FIFOs}. |
|
|
@end deftypefn |
|
|
@@ -2040,6 +2171,7 @@ |
|
|
@comment sys/stat.h |
|
|
@comment GNU |
|
|
@deftypefn Macro int S_ISLNK (mode_t @var{m}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro returns non-zero if the file is a symbolic link. |
|
|
@xref{Symbolic Links}. |
|
|
@end deftypefn |
|
|
@@ -2047,6 +2179,7 @@ |
|
|
@comment sys/stat.h |
|
|
@comment GNU |
|
|
@deftypefn Macro int S_ISSOCK (mode_t @var{m}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro returns non-zero if the file is a socket. @xref{Sockets}. |
|
|
@end deftypefn |
|
|
|
|
|
@@ -2129,6 +2262,7 @@ |
|
|
@comment sys/stat.h |
|
|
@comment POSIX |
|
|
@deftypefn Macro int S_TYPEISMQ (struct stat *@var{s}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
If the system implement POSIX message queues as distinct objects and the |
|
|
file is a message queue object, this macro returns a non-zero value. |
|
|
In all other cases the result is zero. |
|
|
@@ -2137,6 +2271,7 @@ |
|
|
@comment sys/stat.h |
|
|
@comment POSIX |
|
|
@deftypefn Macro int S_TYPEISSEM (struct stat *@var{s}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
If the system implement POSIX semaphores as distinct objects and the |
|
|
file is a semaphore object, this macro returns a non-zero value. |
|
|
In all other cases the result is zero. |
|
|
@@ -2145,8 +2280,9 @@ |
|
|
@comment sys/stat.h |
|
|
@comment POSIX |
|
|
@deftypefn Macro int S_TYPEISSHM (struct stat *@var{s}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
If the system implement POSIX shared memory objects as distinct objects |
|
|
-and the file is an shared memory object, this macro returns a non-zero |
|
|
+and the file is a shared memory object, this macro returns a non-zero |
|
|
value. In all other cases the result is zero. |
|
|
@end deftypefn |
|
|
|
|
|
@@ -2189,6 +2325,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int chown (const char *@var{filename}, uid_t @var{owner}, gid_t @var{group}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{chown} function changes the owner of the file @var{filename} to |
|
|
@var{owner}, and its group owner to @var{group}. |
|
|
|
|
|
@@ -2222,7 +2359,8 @@ |
|
|
|
|
|
@comment unistd.h |
|
|
@comment BSD |
|
|
-@deftypefun int fchown (int @var{filedes}, int @var{owner}, int @var{group}) |
|
|
+@deftypefun int fchown (int @var{filedes}, uid_t @var{owner}, gid_t @var{group}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This is like @code{chown}, except that it changes the owner of the open |
|
|
file with descriptor @var{filedes}. |
|
|
|
|
|
@@ -2502,6 +2641,7 @@ |
|
|
@comment sys/stat.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun mode_t umask (mode_t @var{mask}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{umask} function sets the file creation mask of the current |
|
|
process to @var{mask}, and returns the previous value of the file |
|
|
creation mask. |
|
|
@@ -2527,6 +2667,7 @@ |
|
|
@comment sys/stat.h |
|
|
@comment GNU |
|
|
@deftypefun mode_t getumask (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Return the current value of the file creation mask for the current |
|
|
process. This function is a GNU extension and is only available on |
|
|
@gnuhurdsystems{}. |
|
|
@@ -2535,6 +2676,7 @@ |
|
|
@comment sys/stat.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int chmod (const char *@var{filename}, mode_t @var{mode}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{chmod} function sets the access permission bits for the file |
|
|
named by @var{filename} to @var{mode}. |
|
|
|
|
|
@@ -2574,7 +2716,8 @@ |
|
|
|
|
|
@comment sys/stat.h |
|
|
@comment BSD |
|
|
-@deftypefun int fchmod (int @var{filedes}, int @var{mode}) |
|
|
+@deftypefun int fchmod (int @var{filedes}, mode_t @var{mode}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This is like @code{chmod}, except that it changes the permissions of the |
|
|
currently open file given by @var{filedes}. |
|
|
|
|
|
@@ -2645,6 +2788,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int access (const char *@var{filename}, int @var{how}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{access} function checks to see whether the file named by |
|
|
@var{filename} can be accessed in the way specified by the @var{how} |
|
|
argument. The @var{how} argument either can be the bitwise OR of the |
|
|
@@ -2746,7 +2890,7 @@ |
|
|
need to include the header file @file{utime.h} to use this facility. |
|
|
@pindex utime.h |
|
|
|
|
|
-@comment time.h |
|
|
+@comment utime.h |
|
|
@comment POSIX.1 |
|
|
@deftp {Data Type} {struct utimbuf} |
|
|
The @code{utimbuf} structure is used with the @code{utime} function to |
|
|
@@ -2762,9 +2906,12 @@ |
|
|
@end table |
|
|
@end deftp |
|
|
|
|
|
-@comment time.h |
|
|
+@comment utime.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int utime (const char *@var{filename}, const struct utimbuf *@var{times}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c In the absence of a utime syscall, it non-atomically converts times |
|
|
+@c to a struct timeval and calls utimes. |
|
|
This function is used to modify the file times associated with the file |
|
|
named @var{filename}. |
|
|
|
|
|
@@ -2815,7 +2962,11 @@ |
|
|
|
|
|
@comment sys/time.h |
|
|
@comment BSD |
|
|
-@deftypefun int utimes (const char *@var{filename}, struct timeval @var{tvp}@t{[2]}) |
|
|
+@deftypefun int utimes (const char *@var{filename}, const struct timeval @var{tvp}@t{[2]}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c In the absence of a utimes syscall, it non-atomically converts tvp |
|
|
+@c to struct timespec array and issues a utimensat syscall, or to |
|
|
+@c struct utimbuf and calls utime. |
|
|
This function sets the file access and modification times of the file |
|
|
@var{filename}. The new file access time is specified by |
|
|
@code{@var{tvp}[0]}, and the new modification time by |
|
|
@@ -2829,7 +2980,10 @@ |
|
|
|
|
|
@comment sys/time.h |
|
|
@comment BSD |
|
|
-@deftypefun int lutimes (const char *@var{filename}, struct timeval @var{tvp}@t{[2]}) |
|
|
+@deftypefun int lutimes (const char *@var{filename}, const struct timeval @var{tvp}@t{[2]}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Since there's no lutimes syscall, it non-atomically converts tvp |
|
|
+@c to struct timespec array and issues a utimensat syscall. |
|
|
This function is like @code{utimes}, except that it does not follow |
|
|
symbolic links. If @var{filename} is the name of a symbolic link, |
|
|
@code{lutimes} sets the file access and modification times of the |
|
|
@@ -2845,7 +2999,11 @@ |
|
|
|
|
|
@comment sys/time.h |
|
|
@comment BSD |
|
|
-@deftypefun int futimes (int @var{fd}, struct timeval @var{tvp}@t{[2]}) |
|
|
+@deftypefun int futimes (int @var{fd}, const struct timeval @var{tvp}@t{[2]}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Since there's no futimes syscall, it non-atomically converts tvp |
|
|
+@c to struct timespec array and issues a utimensat syscall, falling back |
|
|
+@c to utimes on a /proc/self/fd symlink. |
|
|
This function is like @code{utimes}, except that it takes an open file |
|
|
descriptor as an argument instead of a file name. @xref{Low-Level |
|
|
I/O}. This function comes from FreeBSD, and is not available on all |
|
|
@@ -2900,6 +3058,8 @@ |
|
|
@comment unistd.h |
|
|
@comment X/Open |
|
|
@deftypefun int truncate (const char *@var{filename}, off_t @var{length}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c In the absence of a truncate syscall, we use open and ftruncate. |
|
|
|
|
|
The @code{truncate} function changes the size of @var{filename} to |
|
|
@var{length}. If @var{length} is shorter than the previous length, data |
|
|
@@ -2944,6 +3104,8 @@ |
|
|
@comment unistd.h |
|
|
@comment Unix98 |
|
|
@deftypefun int truncate64 (const char *@var{name}, off64_t @var{length}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c In the absence of a syscall, try truncate if length fits. |
|
|
This function is similar to the @code{truncate} function. The |
|
|
difference is that the @var{length} argument is 64 bits wide even on 32 |
|
|
bits machines, which allows the handling of files with sizes up to |
|
|
@@ -2957,6 +3119,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX |
|
|
@deftypefun int ftruncate (int @var{fd}, off_t @var{length}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
This is like @code{truncate}, but it works on a file descriptor @var{fd} |
|
|
for an opened file instead of a file name to identify the object. The |
|
|
@@ -3021,6 +3184,8 @@ |
|
|
@comment unistd.h |
|
|
@comment Unix98 |
|
|
@deftypefun int ftruncate64 (int @var{id}, off64_t @var{length}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c In the absence of a syscall, try ftruncate if length fits. |
|
|
This function is similar to the @code{ftruncate} function. The |
|
|
difference is that the @var{length} argument is 64 bits wide even on 32 |
|
|
bits machines which allows the handling of files with sizes up to |
|
|
@@ -3082,7 +3247,11 @@ |
|
|
|
|
|
@comment sys/stat.h |
|
|
@comment BSD |
|
|
-@deftypefun int mknod (const char *@var{filename}, int @var{mode}, int @var{dev}) |
|
|
+@deftypefun int mknod (const char *@var{filename}, mode_t @var{mode}, dev_t @var{dev}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Instead of issuing the syscall directly, we go through xmknod. |
|
|
+@c Although the internal xmknod takes a dev_t*, that could lead to |
|
|
+@c @mtsrace races, it's passed a pointer to mknod's dev. |
|
|
The @code{mknod} function makes a special file with name @var{filename}. |
|
|
The @var{mode} specifies the mode of the file, and may include the various |
|
|
special file bits, such as @code{S_IFCHR} (for a character special file) |
|
|
@@ -3134,6 +3303,20 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun {FILE *} tmpfile (void) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}} |
|
|
+@c The unsafety issues are those of fdopen, plus @acsfd because of the |
|
|
+@c open. |
|
|
+@c __path_search (internal buf, !dir, const pfx, !try_tmpdir) ok |
|
|
+@c libc_secure_genenv only if try_tmpdir |
|
|
+@c xstat64, strlen, strcmp, sprintf |
|
|
+@c __gen_tempname (internal tmpl, __GT_FILE) ok |
|
|
+@c strlen, memcmp, getpid, open/mkdir/lxstat64 ok |
|
|
+@c HP_TIMING_NOW if available ok |
|
|
+@c gettimeofday (!tz) first time, or every time if no HP_TIMING_NOW ok |
|
|
+@c static value is used and modified without synchronization ok |
|
|
+@c but the use is as a source of non-cryptographic randomness |
|
|
+@c with retries in case of collision, so it should be safe |
|
|
+@c unlink, fdopen |
|
|
This function creates a temporary binary file for update mode, as if by |
|
|
calling @code{fopen} with mode @code{"wb+"}. The file is deleted |
|
|
automatically when it is closed or when the program terminates. (On |
|
|
@@ -3150,9 +3333,10 @@ |
|
|
@comment stdio.h |
|
|
@comment Unix98 |
|
|
@deftypefun {FILE *} tmpfile64 (void) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}} |
|
|
This function is similar to @code{tmpfile}, but the stream it returns a |
|
|
pointer to was opened using @code{tmpfile64}. Therefore this stream can |
|
|
-be used for files larger then @math{2^31} bytes on 32-bit machines. |
|
|
+be used for files larger than @math{2^31} bytes on 32-bit machines. |
|
|
|
|
|
Please note that the return type is still @code{FILE *}. There is no |
|
|
special @code{FILE} type for the LFS interface. |
|
|
@@ -3165,6 +3349,11 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun {char *} tmpnam (char *@var{result}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:tmpnam/!result}}@asunsafe{}@acsafe{}} |
|
|
+@c The passed-in buffer should not be modified concurrently with the |
|
|
+@c call. |
|
|
+@c __path_search (static or passed-in buf, !dir, !pfx, !try_tmpdir) ok |
|
|
+@c __gen_tempname (internal tmpl, __GT_NOCREATE) ok |
|
|
This function constructs and returns a valid file name that does not |
|
|
refer to any existing file. If the @var{result} argument is a null |
|
|
pointer, the return value is a pointer to an internal static string, |
|
|
@@ -3189,6 +3378,7 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} tmpnam_r (char *@var{result}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is nearly identical to the @code{tmpnam} function, except |
|
|
that if @var{result} is a null pointer it returns a null pointer. |
|
|
|
|
|
@@ -3225,6 +3415,13 @@ |
|
|
@comment stdio.h |
|
|
@comment SVID |
|
|
@deftypefun {char *} tempnam (const char *@var{dir}, const char *@var{prefix}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c There's no way (short of being setuid) to avoid getenv("TMPDIR"), |
|
|
+@c even with a non-NULL dir. |
|
|
+@c |
|
|
+@c __path_search (internal buf, dir, pfx, try_tmpdir) unsafe getenv |
|
|
+@c __gen_tempname (internal tmpl, __GT_NOCREATE) ok |
|
|
+@c strdup |
|
|
This function generates a unique temporary file name. If @var{prefix} |
|
|
is not a null pointer, up to five characters of this string are used as |
|
|
a prefix for the file name. The return value is a string newly |
|
|
@@ -3288,6 +3485,8 @@ |
|
|
@comment stdlib.h |
|
|
@comment Unix |
|
|
@deftypefun {char *} mktemp (char *@var{template}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c __gen_tempname (caller tmpl, __GT_NOCREATE) ok |
|
|
The @code{mktemp} function generates a unique file name by modifying |
|
|
@var{template} as described above. If successful, it returns |
|
|
@var{template} as modified. If @code{mktemp} cannot find a unique file |
|
|
@@ -3306,6 +3505,8 @@ |
|
|
@comment stdlib.h |
|
|
@comment BSD |
|
|
@deftypefun int mkstemp (char *@var{template}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}} |
|
|
+@c __gen_tempname (caller tmpl, __GT_FILE) ok |
|
|
The @code{mkstemp} function generates a unique file name just as |
|
|
@code{mktemp} does, but it also opens the file for you with @code{open} |
|
|
(@pxref{Opening and Closing Files}). If successful, it modifies |
|
|
@@ -3328,6 +3529,8 @@ |
|
|
@comment stdlib.h |
|
|
@comment BSD |
|
|
@deftypefun {char *} mkdtemp (char *@var{template}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c __gen_tempname (caller tmpl, __GT_DIR) ok |
|
|
The @code{mkdtemp} function creates a directory with a unique name. If |
|
|
it succeeds, it overwrites @var{template} with the name of the |
|
|
directory, and returns @var{template}. As with @code{mktemp} and |
|
|
@@ -3349,3 +3552,23 @@ |
|
|
@xref{Creating Directories}. |
|
|
|
|
|
The @code{mkdtemp} function comes from OpenBSD. |
|
|
+ |
|
|
+@c FIXME these are undocumented: |
|
|
+@c faccessat |
|
|
+@c fchmodat |
|
|
+@c fchownat |
|
|
+@c futimesat |
|
|
+@c fstatat (there's a commented-out safety assessment for this one) |
|
|
+@c linkat |
|
|
+@c mkdirat |
|
|
+@c mkfifoat |
|
|
+@c name_to_handle_at |
|
|
+@c openat |
|
|
+@c open_by_handle_at |
|
|
+@c readlinkat |
|
|
+@c renameat |
|
|
+@c scandirat |
|
|
+@c symlinkat |
|
|
+@c unlinkat |
|
|
+@c utimensat |
|
|
+@c mknodat |
|
|
diff -urN glibc-2.17-c758a686/manual/freemanuals.texi glibc-2.17-c758a686/manual/freemanuals.texi |
|
|
--- glibc-2.17-c758a686/manual/freemanuals.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/freemanuals.texi 2014-09-12 16:10:06.044792719 -0400 |
|
|
@@ -1,4 +1,7 @@ |
|
|
-@appendix Free Software Needs Free Documentation |
|
|
+@c freemanuals.texi - blurb for free documentation. |
|
|
+@c This file is intended to be included within another document, |
|
|
+@c hence no sectioning command or @node. |
|
|
+ |
|
|
@cindex free documentation |
|
|
|
|
|
The biggest deficiency in the free software community today is not in |
|
|
diff -urN glibc-2.17-c758a686/manual/getopt.texi glibc-2.17-c758a686/manual/getopt.texi |
|
|
--- glibc-2.17-c758a686/manual/getopt.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/getopt.texi 2014-09-12 16:10:06.044792719 -0400 |
|
|
@@ -59,7 +59,29 @@ |
|
|
|
|
|
@comment unistd.h |
|
|
@comment POSIX.2 |
|
|
-@deftypefun int getopt (int @var{argc}, char **@var{argv}, const char *@var{options}) |
|
|
+@deftypefun int getopt (int @var{argc}, char *const *@var{argv}, const char *@var{options}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:getopt} @mtsenv{}}@asunsafe{@ascuheap{} @ascuintl{} @asulock{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
+@c Swapping elements of passed-in argv may be partial in case of |
|
|
+@c cancellation. Gettext brings about a whole lot of AS and AC safety |
|
|
+@c issues. The getopt API involves returning values in the |
|
|
+@c non-thread-specific optarg variable, which adds another thread-safety |
|
|
+@c issue. Given print_errors, it may output errors to stderr, which may |
|
|
+@c self-deadlock, leak locks, or encounter (in a signal handler) or |
|
|
+@c leave (in case of cancellation) stderr in an inconsistent state. |
|
|
+@c Various implicit, indirect uses of malloc, in uses of memstream and |
|
|
+@c asprintf for error-printing, bring about the usual malloc issues. |
|
|
+@c (The explicit use of malloc in a conditional situation in |
|
|
+@c _getopt_initialize is never exercised in glibc.) |
|
|
+@c |
|
|
+@c _getopt_internal |
|
|
+@c _getopt_internal_r |
|
|
+@c gettext |
|
|
+@c _getopt_initialize |
|
|
+@c getenv |
|
|
+@c malloc if USE_NONOPTION_FLAGS, never defined in libc |
|
|
+@c open_memstream |
|
|
+@c lockfile, unlockfile, __fxprintf -> stderr |
|
|
+@c asprintf |
|
|
The @code{getopt} function gets the next option argument from the |
|
|
argument list specified by the @var{argv} and @var{argc} arguments. |
|
|
Normally these values come directly from the arguments received by |
|
|
@@ -225,6 +247,8 @@ |
|
|
@comment getopt.h |
|
|
@comment GNU |
|
|
@deftypefun int getopt_long (int @var{argc}, char *const *@var{argv}, const char *@var{shortopts}, const struct option *@var{longopts}, int *@var{indexptr}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:getopt} @mtsenv{}}@asunsafe{@ascuheap{} @ascuintl{} @asulock{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
+@c Same issues as getopt. |
|
|
Decode options from the vector @var{argv} (whose length is @var{argc}). |
|
|
The argument @var{shortopts} describes the short options to accept, just as |
|
|
it does in @code{getopt}. The argument @var{longopts} describes the long |
|
|
@@ -278,6 +302,8 @@ |
|
|
@comment getopt.h |
|
|
@comment GNU |
|
|
@deftypefun int getopt_long_only (int @var{argc}, char *const *@var{argv}, const char *@var{shortopts}, const struct option *@var{longopts}, int *@var{indexptr}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:getopt} @mtsenv{}}@asunsafe{@ascuheap{} @ascuintl{} @asulock{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
+@c Same issues as getopt. |
|
|
|
|
|
The @code{getopt_long_only} function is equivalent to the |
|
|
@code{getopt_long} function but it allows to specify the user of the |
|
|
diff -urN glibc-2.17-c758a686/manual/install-plain.texi glibc-2.17-c758a686/manual/install-plain.texi |
|
|
--- glibc-2.17-c758a686/manual/install-plain.texi 1969-12-31 19:00:00.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/install-plain.texi 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -0,0 +1,5 @@ |
|
|
+@c This is for making the `INSTALL' file for the distribution. |
|
|
+@c Makeinfo ignores it when processing the file from the include. |
|
|
+@setfilename INSTALL |
|
|
+@set plain |
|
|
+@include install.texi |
|
|
diff -urN glibc-2.17-c758a686/manual/install.texi glibc-2.17-c758a686/manual/install.texi |
|
|
--- glibc-2.17-c758a686/manual/install.texi 2014-09-12 16:08:17.783070851 -0400 |
|
|
+++ glibc-2.17-c758a686/manual/install.texi 2014-09-12 16:10:06.043792722 -0400 |
|
|
@@ -1,10 +1,10 @@ |
|
|
-@c This is for making the `INSTALL' file for the distribution. |
|
|
-@c Makeinfo ignores it when processing the file from the include. |
|
|
-@setfilename INSTALL |
|
|
@include macros.texi |
|
|
@include pkgvers.texi |
|
|
|
|
|
+@ifclear plain |
|
|
@node Installation, Maintenance, Library Summary, Top |
|
|
+@end ifclear |
|
|
+ |
|
|
@c %MENU% How to install the GNU C Library |
|
|
@appendix Installing @theglibc{} |
|
|
|
|
|
@@ -21,6 +21,7 @@ |
|
|
You will need recent versions of several GNU tools: definitely GCC and |
|
|
GNU Make, and possibly others. @xref{Tools for Compilation}, below. |
|
|
|
|
|
+@ifclear plain |
|
|
@menu |
|
|
* Configuring and compiling:: How to compile and test GNU libc. |
|
|
* Running make install:: How to install it once you've got it |
|
|
@@ -29,6 +30,7 @@ |
|
|
* Linux:: Specific advice for GNU/Linux systems. |
|
|
* Reporting Bugs:: So they'll get fixed. |
|
|
@end menu |
|
|
+@end ifclear |
|
|
|
|
|
@node Configuring and compiling |
|
|
@appendixsec Configuring and compiling @theglibc{} |
|
|
@@ -138,11 +140,6 @@ |
|
|
Don't build libraries with profiling information. You may want to use |
|
|
this option if you don't plan to do profiling. |
|
|
|
|
|
-@item --disable-versioning |
|
|
-Don't compile the shared libraries with symbol version information. |
|
|
-Doing this will make the resulting library incompatible with old |
|
|
-binaries, so it's not recommended. |
|
|
- |
|
|
@item --enable-static-nss |
|
|
Compile static versions of the NSS (Name Service Switch) libraries. |
|
|
This is not recommended because it defeats the purpose of NSS; a program |
|
|
@@ -155,6 +152,14 @@ |
|
|
prevented though there generally is no reason since it creates |
|
|
compatibility problems. |
|
|
|
|
|
+@item --enable-hardcoded-path-in-tests |
|
|
+By default, dynamic tests are linked to run with the installed C library. |
|
|
+This option hardcodes the newly built C library path in dynamic tests |
|
|
+so that they can be invoked directly. |
|
|
+ |
|
|
+@item --enable-lock-elision=yes |
|
|
+Enable lock elision for pthread mutexes by default. |
|
|
+ |
|
|
@pindex pt_chown |
|
|
@findex grantpt |
|
|
@item --enable-pt_chown |
|
|
@@ -180,11 +185,11 @@ |
|
|
|
|
|
If you only specify @samp{--host}, @code{configure} will prepare for a |
|
|
native compile but use what you specify instead of guessing what your |
|
|
-system is. This is most useful to change the CPU submodel. For example, |
|
|
-if @code{configure} guesses your machine as @code{i586-pc-linux-gnu} but |
|
|
-you want to compile a library for 386es, give |
|
|
-@samp{--host=i386-pc-linux-gnu} or just @samp{--host=i386-linux} and add |
|
|
-the appropriate compiler flags (@samp{-mcpu=i386} will do the trick) to |
|
|
+system is. This is most useful to change the CPU submodel. For example, |
|
|
+if @code{configure} guesses your machine as @code{i686-pc-linux-gnu} but |
|
|
+you want to compile a library for 586es, give |
|
|
+@samp{--host=i586-pc-linux-gnu} or just @samp{--host=i586-linux} and add |
|
|
+the appropriate compiler flags (@samp{-mcpu=i586} will do the trick) to |
|
|
@var{CFLAGS}. |
|
|
|
|
|
If you specify just @samp{--build}, @code{configure} will get confused. |
|
|
@@ -230,6 +235,12 @@ |
|
|
system such as @file{/etc/passwd}, @file{/etc/nsswitch.conf} and others. |
|
|
These files must all contain correct and sensible content. |
|
|
|
|
|
+Normally, @code{make check} will run all the tests before reporting |
|
|
+all problems found and exiting with error status if any problems |
|
|
+occurred. You can specify @samp{stop-on-test-failure=y} when running |
|
|
+@code{make check} to make the test run stop and exit with an error |
|
|
+status immediately when a failure occurs. |
|
|
+ |
|
|
To format the @cite{GNU C Library Reference Manual} for printing, type |
|
|
@w{@code{make dvi}}. You need a working @TeX{} installation to do |
|
|
this. The distribution builds the on-line formatted version of the |
|
|
@@ -264,13 +275,15 @@ |
|
|
In general, when testing @theglibc{}, @samp{test-wrapper} may be set |
|
|
to the name and arguments of any program to run newly built binaries. |
|
|
This program must preserve the arguments to the binary being run, its |
|
|
-working directory, all environment variables set as part of testing |
|
|
-and the standard input, output and error file descriptors. If |
|
|
+working directory and the standard input, output and error file |
|
|
+descriptors. If |
|
|
@samp{@var{test-wrapper} env} will not work to run a program with |
|
|
environment variables set, then @samp{test-wrapper-env} must be set to |
|
|
a program that runs a newly built program with environment variable |
|
|
assignments in effect, those assignments being specified as |
|
|
-@samp{@var{var}=@var{value}} before the name of the program to be run. |
|
|
+@samp{@var{var}=@var{value}} before the name of the program to be |
|
|
+run. If multiple assignments to the same variable are specified, |
|
|
+the last assignment specified must take precedence. |
|
|
|
|
|
|
|
|
@node Running make install |
|
|
@@ -278,7 +291,7 @@ |
|
|
@cindex installing |
|
|
|
|
|
To install the library and its header files, and the Info files of the |
|
|
-manual, type @code{env LANGUAGE=C LC_ALL=C make install}. This will |
|
|
+manual, type @code{make install}. This will |
|
|
build things, if necessary, before installing them; however, you should |
|
|
still compile everything first. If you are installing @theglibc{} as your |
|
|
primary C library, we recommend that you shut the system down to |
|
|
@@ -317,14 +330,11 @@ |
|
|
well. |
|
|
|
|
|
One auxiliary program, @file{/usr/libexec/pt_chown}, is installed setuid |
|
|
-@code{root}. This program is invoked by the @code{grantpt} function; it |
|
|
-sets the permissions on a pseudoterminal so it can be used by the |
|
|
-calling process. This means programs like @code{xterm} and |
|
|
-@code{screen} do not have to be setuid to get a pty. (There may be |
|
|
-other reasons why they need privileges.) If you are using a |
|
|
-Linux kernel with the @code{devptsfs} or @code{devfs} filesystems |
|
|
-providing pty slaves, you don't need this program; otherwise you do. |
|
|
-The source for @file{pt_chown} is in @file{login/programs/pt_chown.c}. |
|
|
+@code{root} if the @samp{--enable-pt_chown} configuration option is used. |
|
|
+This program is invoked by the @code{grantpt} function; it sets the |
|
|
+permissions on a pseudoterminal so it can be used by the calling process. |
|
|
+If you are using a Linux kernel with the @code{devpts} filesystem enabled |
|
|
+and mounted at @file{/dev/pts}, you don't need this program. |
|
|
|
|
|
After installation you might want to configure the timezone and locale |
|
|
installation of your system. @Theglibc{} comes with a locale |
|
|
@@ -362,9 +372,9 @@ |
|
|
bugs or lack features. |
|
|
|
|
|
@item |
|
|
-GCC 4.3 or newer, GCC 4.6 recommended |
|
|
+GCC 4.4 or newer, GCC 4.6 recommended |
|
|
|
|
|
-GCC 4.3 or higher is required; as of this writing, GCC 4.6 is the |
|
|
+GCC 4.4 or higher is required; as of this writing, GCC 4.6 is the |
|
|
compiler we advise to use to build @theglibc{}. |
|
|
|
|
|
You can use whatever compiler you like to compile programs that use |
|
|
@@ -388,10 +398,11 @@ |
|
|
mechanism for the info files is not present or works differently. |
|
|
|
|
|
@item |
|
|
-GNU @code{awk} 3.0, or higher |
|
|
+GNU @code{awk} 3.1.2, or higher |
|
|
|
|
|
-@code{Awk} is used in several places to generate files. |
|
|
-@code{gawk} 3.0 is known to work. |
|
|
+@code{awk} is used in several places to generate files. |
|
|
+Some @code{gawk} extensions are used, including the @code{asorti} |
|
|
+function, which was introduced in version 3.1.2 of @code{gawk}. |
|
|
|
|
|
@item |
|
|
Perl 5 |
|
|
@@ -412,7 +423,7 @@ |
|
|
@end itemize |
|
|
|
|
|
@noindent |
|
|
-If you change any of the @file{configure.in} files you will also need |
|
|
+If you change any of the @file{configure.ac} files you will also need |
|
|
|
|
|
@itemize @bullet |
|
|
@item |
|
|
@@ -436,7 +447,7 @@ |
|
|
@cindex kernel header files |
|
|
|
|
|
If you are installing @theglibc{} on @gnulinuxsystems{}, you need to have |
|
|
-the header files from a 2.6.19.1 or newer kernel around for reference. |
|
|
+the header files from a 2.6.32 or newer kernel around for reference. |
|
|
These headers must be installed using @samp{make headers_install}; the |
|
|
headers present in the kernel source directory are not suitable for |
|
|
direct use by @theglibc{}. You do not need to use that kernel, just have |
|
|
diff -urN glibc-2.17-c758a686/manual/intro.texi glibc-2.17-c758a686/manual/intro.texi |
|
|
--- glibc-2.17-c758a686/manual/intro.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/intro.texi 2014-09-12 16:10:06.044792719 -0400 |
|
|
@@ -159,6 +159,14 @@ |
|
|
These include utilities for dealing with regular expressions and other |
|
|
pattern matching facilities (@pxref{Pattern Matching}). |
|
|
|
|
|
+@menu |
|
|
+* POSIX Safety Concepts:: Safety concepts from POSIX. |
|
|
+* Unsafe Features:: Features that make functions unsafe. |
|
|
+* Conditionally Safe Features:: Features that make functions unsafe |
|
|
+ in the absence of workarounds. |
|
|
+* Other Safety Remarks:: Additional safety features and remarks. |
|
|
+@end menu |
|
|
+ |
|
|
@comment Roland sez: |
|
|
@comment The GNU C library as it stands conforms to 1003.2 draft 11, which |
|
|
@comment specifies: |
|
|
@@ -172,6 +180,725 @@ |
|
|
@comment <wordexp.h> (not yet implemented) |
|
|
@comment confstr |
|
|
|
|
|
+@node POSIX Safety Concepts, Unsafe Features, , POSIX |
|
|
+@subsubsection POSIX Safety Concepts |
|
|
+@cindex POSIX Safety Concepts |
|
|
+ |
|
|
+This manual documents various safety properties of @glibcadj{} |
|
|
+functions, in lines that follow their prototypes and look like: |
|
|
+ |
|
|
+@sampsafety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+ |
|
|
+The properties are assessed according to the criteria set forth in the |
|
|
+POSIX standard for such safety contexts as Thread-, Async-Signal- and |
|
|
+Async-Cancel- -Safety. Intuitive definitions of these properties, |
|
|
+attempting to capture the meaning of the standard definitions, follow. |
|
|
+ |
|
|
+@itemize @bullet |
|
|
+ |
|
|
+@item |
|
|
+@cindex MT-Safe |
|
|
+@cindex Thread-Safe |
|
|
+@code{MT-Safe} or Thread-Safe functions are safe to call in the presence |
|
|
+of other threads. MT, in MT-Safe, stands for Multi Thread. |
|
|
+ |
|
|
+Being MT-Safe does not imply a function is atomic, nor that it uses any |
|
|
+of the memory synchronization mechanisms POSIX exposes to users. It is |
|
|
+even possible that calling MT-Safe functions in sequence does not yield |
|
|
+an MT-Safe combination. For example, having a thread call two MT-Safe |
|
|
+functions one right after the other does not guarantee behavior |
|
|
+equivalent to atomic execution of a combination of both functions, since |
|
|
+concurrent calls in other threads may interfere in a destructive way. |
|
|
+ |
|
|
+Whole-program optimizations that could inline functions across library |
|
|
+interfaces may expose unsafe reordering, and so performing inlining |
|
|
+across the @glibcadj{} interface is not recommended. The documented |
|
|
+MT-Safety status is not guaranteed under whole-program optimization. |
|
|
+However, functions defined in user-visible headers are designed to be |
|
|
+safe for inlining. |
|
|
+ |
|
|
+ |
|
|
+@item |
|
|
+@cindex AS-Safe |
|
|
+@cindex Async-Signal-Safe |
|
|
+@code{AS-Safe} or Async-Signal-Safe functions are safe to call from |
|
|
+asynchronous signal handlers. AS, in AS-Safe, stands for Asynchronous |
|
|
+Signal. |
|
|
+ |
|
|
+Many functions that are AS-Safe may set @code{errno}, or modify the |
|
|
+floating-point environment, because their doing so does not make them |
|
|
+unsuitable for use in signal handlers. However, programs could |
|
|
+misbehave should asynchronous signal handlers modify this thread-local |
|
|
+state, and the signal handling machinery cannot be counted on to |
|
|
+preserve it. Therefore, signal handlers that call functions that may |
|
|
+set @code{errno} or modify the floating-point environment @emph{must} |
|
|
+save their original values, and restore them before returning. |
|
|
+ |
|
|
+ |
|
|
+@item |
|
|
+@cindex AC-Safe |
|
|
+@cindex Async-Cancel-Safe |
|
|
+@code{AC-Safe} or Async-Cancel-Safe functions are safe to call when |
|
|
+asynchronous cancellation is enabled. AC in AC-Safe stands for |
|
|
+Asynchronous Cancellation. |
|
|
+ |
|
|
+The POSIX standard defines only three functions to be AC-Safe, namely |
|
|
+@code{pthread_cancel}, @code{pthread_setcancelstate}, and |
|
|
+@code{pthread_setcanceltype}. At present @theglibc{} provides no |
|
|
+guarantees beyond these three functions, but does document which |
|
|
+functions are presently AC-Safe. This documentation is provided for use |
|
|
+by @theglibc{} developers. |
|
|
+ |
|
|
+Just like signal handlers, cancellation cleanup routines must configure |
|
|
+the floating point environment they require. The routines cannot assume |
|
|
+a floating point environment, particularly when asynchronous |
|
|
+cancellation is enabled. If the configuration of the floating point |
|
|
+environment cannot be performed atomically then it is also possible that |
|
|
+the environment encountered is internally inconsistent. |
|
|
+ |
|
|
+ |
|
|
+@item |
|
|
+@cindex MT-Unsafe |
|
|
+@cindex Thread-Unsafe |
|
|
+@cindex AS-Unsafe |
|
|
+@cindex Async-Signal-Unsafe |
|
|
+@cindex AC-Unsafe |
|
|
+@cindex Async-Cancel-Unsafe |
|
|
+@code{MT-Unsafe}, @code{AS-Unsafe}, @code{AC-Unsafe} functions are not |
|
|
+safe to call within the safety contexts described above. Calling them |
|
|
+within such contexts invokes undefined behavior. |
|
|
+ |
|
|
+Functions not explicitly documented as safe in a safety context should |
|
|
+be regarded as Unsafe. |
|
|
+ |
|
|
+ |
|
|
+@item |
|
|
+@cindex Preliminary |
|
|
+@code{Preliminary} safety properties are documented, indicating these |
|
|
+properties may @emph{not} be counted on in future releases of |
|
|
+@theglibc{}. |
|
|
+ |
|
|
+Such preliminary properties are the result of an assessment of the |
|
|
+properties of our current implementation, rather than of what is |
|
|
+mandated and permitted by current and future standards. |
|
|
+ |
|
|
+Although we strive to abide by the standards, in some cases our |
|
|
+implementation is safe even when the standard does not demand safety, |
|
|
+and in other cases our implementation does not meet the standard safety |
|
|
+requirements. The latter are most likely bugs; the former, when marked |
|
|
+as @code{Preliminary}, should not be counted on: future standards may |
|
|
+require changes that are not compatible with the additional safety |
|
|
+properties afforded by the current implementation. |
|
|
+ |
|
|
+Furthermore, the POSIX standard does not offer a detailed definition of |
|
|
+safety. We assume that, by ``safe to call'', POSIX means that, as long |
|
|
+as the program does not invoke undefined behavior, the ``safe to call'' |
|
|
+function behaves as specified, and does not cause other functions to |
|
|
+deviate from their specified behavior. We have chosen to use its loose |
|
|
+definitions of safety, not because they are the best definitions to use, |
|
|
+but because choosing them harmonizes this manual with POSIX. |
|
|
+ |
|
|
+Please keep in mind that these are preliminary definitions and |
|
|
+annotations, and certain aspects of the definitions are still under |
|
|
+discussion and might be subject to clarification or change. |
|
|
+ |
|
|
+Over time, we envision evolving the preliminary safety notes into stable |
|
|
+commitments, as stable as those of our interfaces. As we do, we will |
|
|
+remove the @code{Preliminary} keyword from safety notes. As long as the |
|
|
+keyword remains, however, they are not to be regarded as a promise of |
|
|
+future behavior. |
|
|
+ |
|
|
+ |
|
|
+@end itemize |
|
|
+ |
|
|
+Other keywords that appear in safety notes are defined in subsequent |
|
|
+sections. |
|
|
+ |
|
|
+ |
|
|
+@node Unsafe Features, Conditionally Safe Features, POSIX Safety Concepts, POSIX |
|
|
+@subsubsection Unsafe Features |
|
|
+@cindex Unsafe Features |
|
|
+ |
|
|
+Functions that are unsafe to call in certain contexts are annotated with |
|
|
+keywords that document their features that make them unsafe to call. |
|
|
+AS-Unsafe features in this section indicate the functions are never safe |
|
|
+to call when asynchronous signals are enabled. AC-Unsafe features |
|
|
+indicate they are never safe to call when asynchronous cancellation is |
|
|
+enabled. There are no MT-Unsafe marks in this section. |
|
|
+ |
|
|
+@itemize @bullet |
|
|
+ |
|
|
+@item @code{lock} |
|
|
+@cindex lock |
|
|
+ |
|
|
+Functions marked with @code{lock} as an AS-Unsafe feature may be |
|
|
+interrupted by a signal while holding a non-recursive lock. If the |
|
|
+signal handler calls another such function that takes the same lock, the |
|
|
+result is a deadlock. |
|
|
+ |
|
|
+Functions annotated with @code{lock} as an AC-Unsafe feature may, if |
|
|
+cancelled asynchronously, fail to release a lock that would have been |
|
|
+released if their execution had not been interrupted by asynchronous |
|
|
+thread cancellation. Once a lock is left taken, attempts to take that |
|
|
+lock will block indefinitely. |
|
|
+ |
|
|
+ |
|
|
+@item @code{corrupt} |
|
|
+@cindex corrupt |
|
|
+ |
|
|
+Functions marked with @code{corrupt} as an AS-Unsafe feature may corrupt |
|
|
+data structures and misbehave when they interrupt, or are interrupted |
|
|
+by, another such function. Unlike functions marked with @code{lock}, |
|
|
+these take recursive locks to avoid MT-Safety problems, but this is not |
|
|
+enough to stop a signal handler from observing a partially-updated data |
|
|
+structure. Further corruption may arise from the interrupted function's |
|
|
+failure to notice updates made by signal handlers. |
|
|
+ |
|
|
+Functions marked with @code{corrupt} as an AC-Unsafe feature may leave |
|
|
+data structures in a corrupt, partially updated state. Subsequent uses |
|
|
+of the data structure may misbehave. |
|
|
+ |
|
|
+@c A special case, probably not worth documenting separately, involves |
|
|
+@c reallocing, or even freeing pointers. Any case involving free could |
|
|
+@c be easily turned into an ac-safe leak by resetting the pointer before |
|
|
+@c releasing it; I don't think we have any case that calls for this sort |
|
|
+@c of fixing. Fixing the realloc cases would require a new interface: |
|
|
+@c instead of @code{ptr=realloc(ptr,size)} we'd have to introduce |
|
|
+@c @code{acsafe_realloc(&ptr,size)} that would modify ptr before |
|
|
+@c releasing the old memory. The ac-unsafe realloc could be implemented |
|
|
+@c in terms of an internal interface with this semantics (say |
|
|
+@c __acsafe_realloc), but since realloc can be overridden, the function |
|
|
+@c we call to implement realloc should not be this internal interface, |
|
|
+@c but another internal interface that calls __acsafe_realloc if realloc |
|
|
+@c was not overridden, and calls the overridden realloc with async |
|
|
+@c cancel disabled. --lxoliva |
|
|
+ |
|
|
+ |
|
|
+@item @code{heap} |
|
|
+@cindex heap |
|
|
+ |
|
|
+Functions marked with @code{heap} may call heap memory management |
|
|
+functions from the @code{malloc}/@code{free} family of functions and are |
|
|
+only as safe as those functions. This note is thus equivalent to: |
|
|
+ |
|
|
+@sampsafety{@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+ |
|
|
+ |
|
|
+@c Check for cases that should have used plugin instead of or in |
|
|
+@c addition to this. Then, after rechecking gettext, adjust i18n if |
|
|
+@c needed. |
|
|
+@item @code{dlopen} |
|
|
+@cindex dlopen |
|
|
+ |
|
|
+Functions marked with @code{dlopen} use the dynamic loader to load |
|
|
+shared libraries into the current execution image. This involves |
|
|
+opening files, mapping them into memory, allocating additional memory, |
|
|
+resolving symbols, applying relocations and more, all of this while |
|
|
+holding internal dynamic loader locks. |
|
|
+ |
|
|
+The locks are enough for these functions to be AS- and AC-Unsafe, but |
|
|
+other issues may arise. At present this is a placeholder for all |
|
|
+potential safety issues raised by @code{dlopen}. |
|
|
+ |
|
|
+@c dlopen runs init and fini sections of the module; does this mean |
|
|
+@c dlopen always implies plugin? |
|
|
+ |
|
|
+ |
|
|
+@item @code{plugin} |
|
|
+@cindex plugin |
|
|
+ |
|
|
+Functions annotated with @code{plugin} may run code from plugins that |
|
|
+may be external to @theglibc{}. Such plugin functions are assumed to be |
|
|
+MT-Safe, AS-Unsafe and AC-Unsafe. Examples of such plugins are stack |
|
|
+@cindex NSS |
|
|
+unwinding libraries, name service switch (NSS) and character set |
|
|
+@cindex iconv |
|
|
+conversion (iconv) back-ends. |
|
|
+ |
|
|
+Although the plugins mentioned as examples are all brought in by means |
|
|
+of dlopen, the @code{plugin} keyword does not imply any direct |
|
|
+involvement of the dynamic loader or the @code{libdl} interfaces, those |
|
|
+are covered by @code{dlopen}. For example, if one function loads a |
|
|
+module and finds the addresses of some of its functions, while another |
|
|
+just calls those already-resolved functions, the former will be marked |
|
|
+with @code{dlopen}, whereas the latter will get the @code{plugin}. When |
|
|
+a single function takes all of these actions, then it gets both marks. |
|
|
+ |
|
|
+ |
|
|
+@item @code{i18n} |
|
|
+@cindex i18n |
|
|
+ |
|
|
+Functions marked with @code{i18n} may call internationalization |
|
|
+functions of the @code{gettext} family and will be only as safe as those |
|
|
+functions. This note is thus equivalent to: |
|
|
+ |
|
|
+@sampsafety{@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @ascudlopen{}}@acunsafe{@acucorrupt{}}} |
|
|
+ |
|
|
+ |
|
|
+@item @code{timer} |
|
|
+@cindex timer |
|
|
+ |
|
|
+Functions marked with @code{timer} use the @code{alarm} function or |
|
|
+similar to set a time-out for a system call or a long-running operation. |
|
|
+In a multi-threaded program, there is a risk that the time-out signal |
|
|
+will be delivered to a different thread, thus failing to interrupt the |
|
|
+intended thread. Besides being MT-Unsafe, such functions are always |
|
|
+AS-Unsafe, because calling them in signal handlers may interfere with |
|
|
+timers set in the interrupted code, and AC-Unsafe, because there is no |
|
|
+safe way to guarantee an earlier timer will be reset in case of |
|
|
+asynchronous cancellation. |
|
|
+ |
|
|
+@end itemize |
|
|
+ |
|
|
+ |
|
|
+@node Conditionally Safe Features, Other Safety Remarks, Unsafe Features, POSIX |
|
|
+@subsubsection Conditionally Safe Features |
|
|
+@cindex Conditionally Safe Features |
|
|
+ |
|
|
+For some features that make functions unsafe to call in certain |
|
|
+contexts, there are known ways to avoid the safety problem other than |
|
|
+refraining from calling the function altogether. The keywords that |
|
|
+follow refer to such features, and each of their definitions indicate |
|
|
+how the whole program needs to be constrained in order to remove the |
|
|
+safety problem indicated by the keyword. Only when all the reasons that |
|
|
+make a function unsafe are observed and addressed, by applying the |
|
|
+documented constraints, does the function become safe to call in a |
|
|
+context. |
|
|
+ |
|
|
+@itemize @bullet |
|
|
+ |
|
|
+@item @code{init} |
|
|
+@cindex init |
|
|
+ |
|
|
+Functions marked with @code{init} as an MT-Unsafe feature perform |
|
|
+MT-Unsafe initialization when they are first called. |
|
|
+ |
|
|
+Calling such a function at least once in single-threaded mode removes |
|
|
+this specific cause for the function to be regarded as MT-Unsafe. If no |
|
|
+other cause for that remains, the function can then be safely called |
|
|
+after other threads are started. |
|
|
+ |
|
|
+Functions marked with @code{init} as an AS- or AC-Unsafe feature use the |
|
|
+internal @code{libc_once} machinery or similar to initialize internal |
|
|
+data structures. |
|
|
+ |
|
|
+If a signal handler interrupts such an initializer, and calls any |
|
|
+function that also performs @code{libc_once} initialization, it will |
|
|
+deadlock if the thread library has been loaded. |
|
|
+ |
|
|
+Furthermore, if an initializer is partially complete before it is |
|
|
+canceled or interrupted by a signal whose handler requires the same |
|
|
+initialization, some or all of the initialization may be performed more |
|
|
+than once, leaking resources or even resulting in corrupt internal data. |
|
|
+ |
|
|
+Applications that need to call functions marked with @code{init} as an |
|
|
+AS- or AC-Unsafe feature should ensure the initialization is performed |
|
|
+before configuring signal handlers or enabling cancellation, so that the |
|
|
+AS- and AC-Safety issues related with @code{libc_once} do not arise. |
|
|
+ |
|
|
+@c We may have to extend the annotations to cover conditions in which |
|
|
+@c initialization may or may not occur, since an initial call in a safe |
|
|
+@c context is no use if the initialization doesn't take place at that |
|
|
+@c time: it doesn't remove the risk for later calls. |
|
|
+ |
|
|
+ |
|
|
+@item @code{race} |
|
|
+@cindex race |
|
|
+ |
|
|
+Functions annotated with @code{race} as an MT-Safety issue operate on |
|
|
+objects in ways that may cause data races or similar forms of |
|
|
+destructive interference out of concurrent execution. In some cases, |
|
|
+the objects are passed to the functions by users; in others, they are |
|
|
+used by the functions to return values to users; in others, they are not |
|
|
+even exposed to users. |
|
|
+ |
|
|
+We consider access to objects passed as (indirect) arguments to |
|
|
+functions to be data race free. The assurance of data race free objects |
|
|
+is the caller's responsibility. We will not mark a function as |
|
|
+MT-Unsafe or AS-Unsafe if it misbehaves when users fail to take the |
|
|
+measures required by POSIX to avoid data races when dealing with such |
|
|
+objects. As a general rule, if a function is documented as reading from |
|
|
+an object passed (by reference) to it, or modifying it, users ought to |
|
|
+use memory synchronization primitives to avoid data races just as they |
|
|
+would should they perform the accesses themselves rather than by calling |
|
|
+the library function. @code{FILE} streams are the exception to the |
|
|
+general rule, in that POSIX mandates the library to guard against data |
|
|
+races in many functions that manipulate objects of this specific opaque |
|
|
+type. We regard this as a convenience provided to users, rather than as |
|
|
+a general requirement whose expectations should extend to other types. |
|
|
+ |
|
|
+In order to remind users that guarding certain arguments is their |
|
|
+responsibility, we will annotate functions that take objects of certain |
|
|
+types as arguments. We draw the line for objects passed by users as |
|
|
+follows: objects whose types are exposed to users, and that users are |
|
|
+expected to access directly, such as memory buffers, strings, and |
|
|
+various user-visible @code{struct} types, do @emph{not} give reason for |
|
|
+functions to be annotated with @code{race}. It would be noisy and |
|
|
+redundant with the general requirement, and not many would be surprised |
|
|
+by the library's lack of internal guards when accessing objects that can |
|
|
+be accessed directly by users. |
|
|
+ |
|
|
+As for objects that are opaque or opaque-like, in that they are to be |
|
|
+manipulated only by passing them to library functions (e.g., |
|
|
+@code{FILE}, @code{DIR}, @code{obstack}, @code{iconv_t}), there might be |
|
|
+additional expectations as to internal coordination of access by the |
|
|
+library. We will annotate, with @code{race} followed by a colon and the |
|
|
+argument name, functions that take such objects but that do not take |
|
|
+care of synchronizing access to them by default. For example, |
|
|
+@code{FILE} stream @code{unlocked} functions will be annotated, but |
|
|
+those that perform implicit locking on @code{FILE} streams by default |
|
|
+will not, even though the implicit locking may be disabled on a |
|
|
+per-stream basis. |
|
|
+ |
|
|
+In either case, we will not regard as MT-Unsafe functions that may |
|
|
+access user-supplied objects in unsafe ways should users fail to ensure |
|
|
+the accesses are well defined. The notion prevails that users are |
|
|
+expected to safeguard against data races any user-supplied objects that |
|
|
+the library accesses on their behalf. |
|
|
+ |
|
|
+@c The above describes @mtsrace; @mtasurace is described below. |
|
|
+ |
|
|
+This user responsibility does not apply, however, to objects controlled |
|
|
+by the library itself, such as internal objects and static buffers used |
|
|
+to return values from certain calls. When the library doesn't guard |
|
|
+them against concurrent uses, these cases are regarded as MT-Unsafe and |
|
|
+AS-Unsafe (although the @code{race} mark under AS-Unsafe will be omitted |
|
|
+as redundant with the one under MT-Unsafe). As in the case of |
|
|
+user-exposed objects, the mark may be followed by a colon and an |
|
|
+identifier. The identifier groups all functions that operate on a |
|
|
+certain unguarded object; users may avoid the MT-Safety issues related |
|
|
+with unguarded concurrent access to such internal objects by creating a |
|
|
+non-recursive mutex related with the identifier, and always holding the |
|
|
+mutex when calling any function marked as racy on that identifier, as |
|
|
+they would have to should the identifier be an object under user |
|
|
+control. The non-recursive mutex avoids the MT-Safety issue, but it |
|
|
+trades one AS-Safety issue for another, so use in asynchronous signals |
|
|
+remains undefined. |
|
|
+ |
|
|
+When the identifier relates to a static buffer used to hold return |
|
|
+values, the mutex must be held for as long as the buffer remains in use |
|
|
+by the caller. Many functions that return pointers to static buffers |
|
|
+offer reentrant variants that store return values in caller-supplied |
|
|
+buffers instead. In some cases, such as @code{tmpname}, the variant is |
|
|
+chosen not by calling an alternate entry point, but by passing a |
|
|
+non-@code{NULL} pointer to the buffer in which the returned values are |
|
|
+to be stored. These variants are generally preferable in multi-threaded |
|
|
+programs, although some of them are not MT-Safe because of other |
|
|
+internal buffers, also documented with @code{race} notes. |
|
|
+ |
|
|
+ |
|
|
+@item @code{const} |
|
|
+@cindex const |
|
|
+ |
|
|
+Functions marked with @code{const} as an MT-Safety issue non-atomically |
|
|
+modify internal objects that are better regarded as constant, because a |
|
|
+substantial portion of @theglibc{} accesses them without |
|
|
+synchronization. Unlike @code{race}, that causes both readers and |
|
|
+writers of internal objects to be regarded as MT-Unsafe and AS-Unsafe, |
|
|
+this mark is applied to writers only. Writers remain equally MT- and |
|
|
+AS-Unsafe to call, but the then-mandatory constness of objects they |
|
|
+modify enables readers to be regarded as MT-Safe and AS-Safe (as long as |
|
|
+no other reasons for them to be unsafe remain), since the lack of |
|
|
+synchronization is not a problem when the objects are effectively |
|
|
+constant. |
|
|
+ |
|
|
+The identifier that follows the @code{const} mark will appear by itself |
|
|
+as a safety note in readers. Programs that wish to work around this |
|
|
+safety issue, so as to call writers, may use a non-recursve |
|
|
+@code{rwlock} associated with the identifier, and guard @emph{all} calls |
|
|
+to functions marked with @code{const} followed by the identifier with a |
|
|
+write lock, and @emph{all} calls to functions marked with the identifier |
|
|
+by itself with a read lock. The non-recursive locking removes the |
|
|
+MT-Safety problem, but it trades one AS-Safety problem for another, so |
|
|
+use in asynchronous signals remains undefined. |
|
|
+ |
|
|
+@c But what if, instead of marking modifiers with const:id and readers |
|
|
+@c with just id, we marked writers with race:id and readers with ro:id? |
|
|
+@c Instead of having to define each instance of “id”, we'd have a |
|
|
+@c general pattern governing all such “id”s, wherein race:id would |
|
|
+@c suggest the need for an exclusive/write lock to make the function |
|
|
+@c safe, whereas ro:id would indicate “id” is expected to be read-only, |
|
|
+@c but if any modifiers are called (while holding an exclusive lock), |
|
|
+@c then ro:id-marked functions ought to be guarded with a read lock for |
|
|
+@c safe operation. ro:env or ro:locale, for example, seems to convey |
|
|
+@c more clearly the expectations and the meaning, than just env or |
|
|
+@c locale. |
|
|
+ |
|
|
+ |
|
|
+@item @code{sig} |
|
|
+@cindex sig |
|
|
+ |
|
|
+Functions marked with @code{sig} as a MT-Safety issue (that implies an |
|
|
+identical AS-Safety issue, omitted for brevity) may temporarily install |
|
|
+a signal handler for internal purposes, which may interfere with other |
|
|
+uses of the signal, identified after a colon. |
|
|
+ |
|
|
+This safety problem can be worked around by ensuring that no other uses |
|
|
+of the signal will take place for the duration of the call. Holding a |
|
|
+non-recursive mutex while calling all functions that use the same |
|
|
+temporary signal; blocking that signal before the call and resetting its |
|
|
+handler afterwards is recommended. |
|
|
+ |
|
|
+There is no safe way to guarantee the original signal handler is |
|
|
+restored in case of asynchronous cancellation, therefore so-marked |
|
|
+functions are also AC-Unsafe. |
|
|
+ |
|
|
+@c fixme: at least deferred cancellation should get it right, and would |
|
|
+@c obviate the restoring bit below, and the qualifier above. |
|
|
+ |
|
|
+Besides the measures recommended to work around the MT- and AS-Safety |
|
|
+problem, in order to avert the cancellation problem, disabling |
|
|
+asynchronous cancellation @emph{and} installing a cleanup handler to |
|
|
+restore the signal to the desired state and to release the mutex are |
|
|
+recommended. |
|
|
+ |
|
|
+ |
|
|
+@item @code{term} |
|
|
+@cindex term |
|
|
+ |
|
|
+Functions marked with @code{term} as an MT-Safety issue may change the |
|
|
+terminal settings in the recommended way, namely: call @code{tcgetattr}, |
|
|
+modify some flags, and then call @code{tcsetattr}; this creates a window |
|
|
+in which changes made by other threads are lost. Thus, functions marked |
|
|
+with @code{term} are MT-Unsafe. The same window enables changes made by |
|
|
+asynchronous signals to be lost. These functions are also AS-Unsafe, |
|
|
+but the corresponding mark is omitted as redundant. |
|
|
+ |
|
|
+It is thus advisable for applications using the terminal to avoid |
|
|
+concurrent and reentrant interactions with it, by not using it in signal |
|
|
+handlers or blocking signals that might use it, and holding a lock while |
|
|
+calling these functions and interacting with the terminal. This lock |
|
|
+should also be used for mutual exclusion with functions marked with |
|
|
+@code{@mtasurace{:tcattr(fd)}}, where @var{fd} is a file descriptor for |
|
|
+the controlling terminal. The caller may use a single mutex for |
|
|
+simplicity, or use one mutex per terminal, even if referenced by |
|
|
+different file descriptors. |
|
|
+ |
|
|
+Functions marked with @code{term} as an AC-Safety issue are supposed to |
|
|
+restore terminal settings to their original state, after temporarily |
|
|
+changing them, but they may fail to do so if cancelled. |
|
|
+ |
|
|
+@c fixme: at least deferred cancellation should get it right, and would |
|
|
+@c obviate the restoring bit below, and the qualifier above. |
|
|
+ |
|
|
+Besides the measures recommended to work around the MT- and AS-Safety |
|
|
+problem, in order to avert the cancellation problem, disabling |
|
|
+asynchronous cancellation @emph{and} installing a cleanup handler to |
|
|
+restore the terminal settings to the original state and to release the |
|
|
+mutex are recommended. |
|
|
+ |
|
|
+ |
|
|
+@end itemize |
|
|
+ |
|
|
+ |
|
|
+@node Other Safety Remarks, , Conditionally Safe Features, POSIX |
|
|
+@subsubsection Other Safety Remarks |
|
|
+@cindex Other Safety Remarks |
|
|
+ |
|
|
+Additional keywords may be attached to functions, indicating features |
|
|
+that do not make a function unsafe to call, but that may need to be |
|
|
+taken into account in certain classes of programs: |
|
|
+ |
|
|
+@itemize @bullet |
|
|
+ |
|
|
+@item @code{locale} |
|
|
+@cindex locale |
|
|
+ |
|
|
+Functions annotated with @code{locale} as an MT-Safety issue read from |
|
|
+the locale object without any form of synchronization. Functions |
|
|
+annotated with @code{locale} called concurrently with locale changes may |
|
|
+behave in ways that do not correspond to any of the locales active |
|
|
+during their execution, but an unpredictable mix thereof. |
|
|
+ |
|
|
+We do not mark these functions as MT- or AS-Unsafe, however, because |
|
|
+functions that modify the locale object are marked with |
|
|
+@code{const:locale} and regarded as unsafe. Being unsafe, the latter |
|
|
+are not to be called when multiple threads are running or asynchronous |
|
|
+signals are enabled, and so the locale can be considered effectively |
|
|
+constant in these contexts, which makes the former safe. |
|
|
+ |
|
|
+@c Should the locking strategy suggested under @code{const} be used, |
|
|
+@c failure to guard locale uses is not as fatal as data races in |
|
|
+@c general: unguarded uses will @emph{not} follow dangling pointers or |
|
|
+@c access uninitialized, unmapped or recycled memory. Each access will |
|
|
+@c read from a consistent locale object that is or was active at some |
|
|
+@c point during its execution. Without synchronization, however, it |
|
|
+@c cannot even be assumed that, after a change in locale, earlier |
|
|
+@c locales will no longer be used, even after the newly-chosen one is |
|
|
+@c used in the thread. Nevertheless, even though unguarded reads from |
|
|
+@c the locale will not violate type safety, functions that access the |
|
|
+@c locale multiple times may invoke all sorts of undefined behavior |
|
|
+@c because of the unexpected locale changes. |
|
|
+ |
|
|
+ |
|
|
+@item @code{env} |
|
|
+@cindex env |
|
|
+ |
|
|
+Functions marked with @code{env} as an MT-Safety issue access the |
|
|
+environment with @code{getenv} or similar, without any guards to ensure |
|
|
+safety in the presence of concurrent modifications. |
|
|
+ |
|
|
+We do not mark these functions as MT- or AS-Unsafe, however, because |
|
|
+functions that modify the environment are all marked with |
|
|
+@code{const:env} and regarded as unsafe. Being unsafe, the latter are |
|
|
+not to be called when multiple threads are running or asynchronous |
|
|
+signals are enabled, and so the environment can be considered |
|
|
+effectively constant in these contexts, which makes the former safe. |
|
|
+ |
|
|
+ |
|
|
+@item @code{hostid} |
|
|
+@cindex hostid |
|
|
+ |
|
|
+The function marked with @code{hostid} as an MT-Safety issue reads from |
|
|
+the system-wide data structures that hold the ``host ID'' of the |
|
|
+machine. These data structures cannot generally be modified atomically. |
|
|
+Since it is expected that the ``host ID'' will not normally change, the |
|
|
+function that reads from it (@code{gethostid}) is regarded as safe, |
|
|
+whereas the function that modifies it (@code{sethostid}) is marked with |
|
|
+@code{@mtasuconst{:@mtshostid{}}}, indicating it may require special |
|
|
+care if it is to be called. In this specific case, the special care |
|
|
+amounts to system-wide (not merely intra-process) coordination. |
|
|
+ |
|
|
+ |
|
|
+@item @code{sigintr} |
|
|
+@cindex sigintr |
|
|
+ |
|
|
+Functions marked with @code{sigintr} as an MT-Safety issue access the |
|
|
+@code{_sigintr} internal data structure without any guards to ensure |
|
|
+safety in the presence of concurrent modifications. |
|
|
+ |
|
|
+We do not mark these functions as MT- or AS-Unsafe, however, because |
|
|
+functions that modify the this data structure are all marked with |
|
|
+@code{const:sigintr} and regarded as unsafe. Being unsafe, the latter |
|
|
+are not to be called when multiple threads are running or asynchronous |
|
|
+signals are enabled, and so the data structure can be considered |
|
|
+effectively constant in these contexts, which makes the former safe. |
|
|
+ |
|
|
+ |
|
|
+@item @code{fd} |
|
|
+@cindex fd |
|
|
+ |
|
|
+Functions annotated with @code{fd} as an AC-Safety issue may leak file |
|
|
+descriptors if asynchronous thread cancellation interrupts their |
|
|
+execution. |
|
|
+ |
|
|
+Functions that allocate or deallocate file descriptors will generally be |
|
|
+marked as such. Even if they attempted to protect the file descriptor |
|
|
+allocation and deallocation with cleanup regions, allocating a new |
|
|
+descriptor and storing its number where the cleanup region could release |
|
|
+it cannot be performed as a single atomic operation. Similarly, |
|
|
+releasing the descriptor and taking it out of the data structure |
|
|
+normally responsible for releasing it cannot be performed atomically. |
|
|
+There will always be a window in which the descriptor cannot be released |
|
|
+because it was not stored in the cleanup handler argument yet, or it was |
|
|
+already taken out before releasing it. It cannot be taken out after |
|
|
+release: an open descriptor could mean either that the descriptor still |
|
|
+has to be closed, or that it already did so but the descriptor was |
|
|
+reallocated by another thread or signal handler. |
|
|
+ |
|
|
+Such leaks could be internally avoided, with some performance penalty, |
|
|
+by temporarily disabling asynchronous thread cancellation. However, |
|
|
+since callers of allocation or deallocation functions would have to do |
|
|
+this themselves, to avoid the same sort of leak in their own layer, it |
|
|
+makes more sense for the library to assume they are taking care of it |
|
|
+than to impose a performance penalty that is redundant when the problem |
|
|
+is solved in upper layers, and insufficient when it is not. |
|
|
+ |
|
|
+This remark by itself does not cause a function to be regarded as |
|
|
+AC-Unsafe. However, cumulative effects of such leaks may pose a |
|
|
+problem for some programs. If this is the case, suspending asynchronous |
|
|
+cancellation for the duration of calls to such functions is recommended. |
|
|
+ |
|
|
+ |
|
|
+@item @code{mem} |
|
|
+@cindex mem |
|
|
+ |
|
|
+Functions annotated with @code{mem} as an AC-Safety issue may leak |
|
|
+memory if asynchronous thread cancellation interrupts their execution. |
|
|
+ |
|
|
+The problem is similar to that of file descriptors: there is no atomic |
|
|
+interface to allocate memory and store its address in the argument to a |
|
|
+cleanup handler, or to release it and remove its address from that |
|
|
+argument, without at least temporarily disabling asynchronous |
|
|
+cancellation, which these functions do not do. |
|
|
+ |
|
|
+This remark does not by itself cause a function to be regarded as |
|
|
+generally AC-Unsafe. However, cumulative effects of such leaks may be |
|
|
+severe enough for some programs that disabling asynchronous cancellation |
|
|
+for the duration of calls to such functions may be required. |
|
|
+ |
|
|
+ |
|
|
+@item @code{cwd} |
|
|
+@cindex cwd |
|
|
+ |
|
|
+Functions marked with @code{cwd} as an MT-Safety issue may temporarily |
|
|
+change the current working directory during their execution, which may |
|
|
+cause relative pathnames to be resolved in unexpected ways in other |
|
|
+threads or within asynchronous signal or cancellation handlers. |
|
|
+ |
|
|
+This is not enough of a reason to mark so-marked functions as MT- or |
|
|
+AS-Unsafe, but when this behavior is optional (e.g., @code{nftw} with |
|
|
+@code{FTW_CHDIR}), avoiding the option may be a good alternative to |
|
|
+using full pathnames or file descriptor-relative (e.g. @code{openat}) |
|
|
+system calls. |
|
|
+ |
|
|
+ |
|
|
+@item @code{!posix} |
|
|
+@cindex !posix |
|
|
+ |
|
|
+This remark, as an MT-, AS- or AC-Safety note to a function, indicates |
|
|
+the safety status of the function is known to differ from the specified |
|
|
+status in the POSIX standard. For example, POSIX does not require a |
|
|
+function to be Safe, but our implementation is, or vice-versa. |
|
|
+ |
|
|
+For the time being, the absence of this remark does not imply the safety |
|
|
+properties we documented are identical to those mandated by POSIX for |
|
|
+the corresponding functions. |
|
|
+ |
|
|
+ |
|
|
+@item @code{:identifier} |
|
|
+@cindex :identifier |
|
|
+ |
|
|
+Annotations may sometimes be followed by identifiers, intended to group |
|
|
+several functions that e.g. access the data structures in an unsafe way, |
|
|
+as in @code{race} and @code{const}, or to provide more specific |
|
|
+information, such as naming a signal in a function marked with |
|
|
+@code{sig}. It is envisioned that it may be applied to @code{lock} and |
|
|
+@code{corrupt} as well in the future. |
|
|
+ |
|
|
+In most cases, the identifier will name a set of functions, but it may |
|
|
+name global objects or function arguments, or identifiable properties or |
|
|
+logical components associated with them, with a notation such as |
|
|
+e.g. @code{:buf(arg)} to denote a buffer associated with the argument |
|
|
+@var{arg}, or @code{:tcattr(fd)} to denote the terminal attributes of a |
|
|
+file descriptor @var{fd}. |
|
|
+ |
|
|
+The most common use for identifiers is to provide logical groups of |
|
|
+functions and arguments that need to be protected by the same |
|
|
+synchronization primitive in order to ensure safe operation in a given |
|
|
+context. |
|
|
+ |
|
|
+ |
|
|
+@item @code{/condition} |
|
|
+@cindex /condition |
|
|
+ |
|
|
+Some safety annotations may be conditional, in that they only apply if a |
|
|
+boolean expression involving arguments, global variables or even the |
|
|
+underlying kernel evaluates evaluates to true. Such conditions as |
|
|
+@code{/hurd} or @code{/!linux!bsd} indicate the preceding marker only |
|
|
+applies when the underlying kernel is the HURD, or when it is neither |
|
|
+Linux nor a BSD kernel, respectively. @code{/!ps} and |
|
|
+@code{/one_per_line} indicate the preceding marker only applies when |
|
|
+argument @var{ps} is NULL, or global variable @var{one_per_line} is |
|
|
+nonzero. |
|
|
+ |
|
|
+When all marks that render a function unsafe are adorned with such |
|
|
+conditions, and none of the named conditions hold, then the function can |
|
|
+be regarded as safe. |
|
|
+ |
|
|
+ |
|
|
+@end itemize |
|
|
+ |
|
|
|
|
|
@node Berkeley Unix, SVID, POSIX, Standards and Portability |
|
|
@subsection Berkeley Unix |
|
|
@@ -556,19 +1283,59 @@ |
|
|
Here is an overview of the contents of the remaining chapters of |
|
|
this manual. |
|
|
|
|
|
+@c The chapter overview ordering is: |
|
|
+@c Error Reporting (2) |
|
|
+@c Virtual Memory Allocation and Paging (3) |
|
|
+@c Character Handling (4) |
|
|
+@c Strings and Array Utilities (5) |
|
|
+@c Character Set Handling (6) |
|
|
+@c Locales and Internationalization (7) |
|
|
+@c Searching and Sorting (9) |
|
|
+@c Pattern Matching (10) |
|
|
+@c Input/Output Overview (11) |
|
|
+@c Input/Output on Streams (12) |
|
|
+@c Low-level Input/Ooutput (13) |
|
|
+@c File System Interface (14) |
|
|
+@c Pipes and FIFOs (15) |
|
|
+@c Sockets (16) |
|
|
+@c Low-Level Terminal Interface (17) |
|
|
+@c Syslog (18) |
|
|
+@c Mathematics (19) |
|
|
+@c Aritmetic Functions (20) |
|
|
+@c Date and Time (21) |
|
|
+@c Non-Local Exist (23) |
|
|
+@c Signal Handling (24) |
|
|
+@c The Basic Program/System Interface (25) |
|
|
+@c Processes (26) |
|
|
+@c Job Control (28) |
|
|
+@c System Databases and Name Service Switch (29) |
|
|
+@c Users and Groups (30) -- References `User Database' and `Group Database' |
|
|
+@c System Management (31) |
|
|
+@c System Configuration Parameters (32) |
|
|
+@c C Language Facilities in the Library (AA) |
|
|
+@c Summary of Library Facilities (AB) |
|
|
+@c Installing (AC) |
|
|
+@c Library Maintenance (AD) |
|
|
+ |
|
|
+@c The following chapters need overview text to be added: |
|
|
+@c Message Translation (8) |
|
|
+@c Resource Usage And Limitations (22) |
|
|
+@c Inter-Process Communication (27) |
|
|
+@c DES Encryption and Password Handling (33) |
|
|
+@c Debugging support (34) |
|
|
+@c POSIX Threads (35) |
|
|
+@c Internal Probes (36) |
|
|
+@c Platform-specific facilities (AE) |
|
|
+@c Contributors to (AF) |
|
|
+@c Free Software Needs Free Documentation (AG) |
|
|
+@c GNU Lesser General Public License (AH) |
|
|
+@c GNU Free Documentation License (AI) |
|
|
+ |
|
|
@itemize @bullet |
|
|
@item |
|
|
@ref{Error Reporting}, describes how errors detected by the library |
|
|
are reported. |
|
|
|
|
|
-@item |
|
|
-@ref{Language Features}, contains information about library support for |
|
|
-standard parts of the C language, including things like the @code{sizeof} |
|
|
-operator and the symbolic constant @code{NULL}, how to write functions |
|
|
-accepting variable numbers of arguments, and constants describing the |
|
|
-ranges and other properties of the numerical types. There is also a simple |
|
|
-debugging mechanism which allows you to put assertions in your code, and |
|
|
-have diagnostic messages printed if the tests fail. |
|
|
|
|
|
@item |
|
|
@ref{Memory}, describes @theglibc{}'s facilities for managing and |
|
|
@@ -588,6 +1355,26 @@ |
|
|
byte arrays, including operations such as copying and comparison. |
|
|
|
|
|
@item |
|
|
+@ref{Character Set Handling}, contains information about manipulating |
|
|
+characters and strings using character sets larger than will fit in |
|
|
+the usual @code{char} data type. |
|
|
+ |
|
|
+@item |
|
|
+@ref{Locales}, describes how selecting a particular country |
|
|
+or language affects the behavior of the library. For example, the locale |
|
|
+affects collation sequences for strings and how monetary values are |
|
|
+formatted. |
|
|
+ |
|
|
+@item |
|
|
+@ref{Searching and Sorting}, contains information about functions |
|
|
+for searching and sorting arrays. You can use these functions on any |
|
|
+kind of array by providing an appropriate comparison function. |
|
|
+ |
|
|
+@item |
|
|
+@ref{Pattern Matching}, presents functions for matching regular expressions |
|
|
+and shell file name patterns, and for expanding words as the shell does. |
|
|
+ |
|
|
+@item |
|
|
@ref{I/O Overview}, gives an overall look at the input and output |
|
|
facilities in the library, and contains information about basic concepts |
|
|
such as file names. |
|
|
@@ -639,30 +1426,10 @@ |
|
|
numbers from strings. |
|
|
|
|
|
@item |
|
|
-@ref{Searching and Sorting}, contains information about functions |
|
|
-for searching and sorting arrays. You can use these functions on any |
|
|
-kind of array by providing an appropriate comparison function. |
|
|
- |
|
|
-@item |
|
|
-@ref{Pattern Matching}, presents functions for matching regular expressions |
|
|
-and shell file name patterns, and for expanding words as the shell does. |
|
|
- |
|
|
-@item |
|
|
@ref{Date and Time}, describes functions for measuring both calendar time |
|
|
and CPU time, as well as functions for setting alarms and timers. |
|
|
|
|
|
@item |
|
|
-@ref{Character Set Handling}, contains information about manipulating |
|
|
-characters and strings using character sets larger than will fit in |
|
|
-the usual @code{char} data type. |
|
|
- |
|
|
-@item |
|
|
-@ref{Locales}, describes how selecting a particular country |
|
|
-or language affects the behavior of the library. For example, the locale |
|
|
-affects collation sequences for strings and how monetary values are |
|
|
-formatted. |
|
|
- |
|
|
-@item |
|
|
@ref{Non-Local Exits}, contains descriptions of the @code{setjmp} and |
|
|
@code{longjmp} functions. These functions provide a facility for |
|
|
@code{goto}-like jumps which can jump from one function to another. |
|
|
@@ -708,6 +1475,15 @@ |
|
|
compatibility with POSIX. |
|
|
|
|
|
@item |
|
|
+@ref{Language Features}, contains information about library support for |
|
|
+standard parts of the C language, including things like the @code{sizeof} |
|
|
+operator and the symbolic constant @code{NULL}, how to write functions |
|
|
+accepting variable numbers of arguments, and constants describing the |
|
|
+ranges and other properties of the numerical types. There is also a simple |
|
|
+debugging mechanism which allows you to put assertions in your code, and |
|
|
+have diagnostic messages printed if the tests fail. |
|
|
+ |
|
|
+@item |
|
|
@ref{Library Summary}, gives a summary of all the functions, variables, and |
|
|
macros in the library, with complete data types and function prototypes, |
|
|
and says what standard or system each is derived from. |
|
|
diff -urN glibc-2.17-c758a686/manual/ipc.texi glibc-2.17-c758a686/manual/ipc.texi |
|
|
--- glibc-2.17-c758a686/manual/ipc.texi 1969-12-31 19:00:00.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/ipc.texi 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -0,0 +1,116 @@ |
|
|
+@node Inter-Process Communication, Job Control, Processes, Top |
|
|
+@c %MENU% All about inter-process communication |
|
|
+@chapter Inter-Process Communication |
|
|
+@cindex ipc |
|
|
+ |
|
|
+This chapter describes the @glibcadj{} inter-process communication primitives. |
|
|
+ |
|
|
+@menu |
|
|
+* Semaphores:: Support for creating and managing semaphores |
|
|
+@end menu |
|
|
+ |
|
|
+@node Semaphores |
|
|
+@section Semaphores |
|
|
+ |
|
|
+@Theglibc{} implements the semaphore APIs as defined in POSIX and |
|
|
+System V. Semaphores can be used by multiple processes to coordinate shared |
|
|
+resources. The following is a complete list of the semaphore functions provided |
|
|
+by @theglibc{}. |
|
|
+ |
|
|
+@c Need descriptions for all of these functions. |
|
|
+ |
|
|
+@subsection System V Semaphores |
|
|
+@deftypefun int semctl (int @var{semid}, int @var{semnum}, int @var{cmd}); |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@acucorrupt{/linux}}} |
|
|
+@c syscall(ipc) ok |
|
|
+@c |
|
|
+@c AC-unsafe because we need to translate the new kernel |
|
|
+@c semid_ds buf into the userspace layout. Cancellation |
|
|
+@c at that point results in an inconsistent userspace |
|
|
+@c semid_ds. |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@deftypefun int semget (key_t @var{key}, int @var{nsems}, int @var{semflg}); |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c syscall(ipc) ok |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@deftypefun int semop (int @var{semid}, struct sembuf *@var{sops}, size_t @var{nsops}); |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c syscall(ipc) ok |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@deftypefun int semtimedop (int @var{semid}, struct sembuf *@var{sops}, size_t @var{nsops}, const struct timespec *@var{timeout}); |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c syscall(ipc) ok |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@subsection POSIX Semaphores |
|
|
+ |
|
|
+@deftypefun int sem_init (sem_t *@var{sem}, int @var{pshared}, unsigned int @var{value}); |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
+@c Does not atomically update sem_t therefore AC-unsafe |
|
|
+@c because it can leave sem_t partially initialized. |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@deftypefun int sem_destroy (sem_t *@var{sem}); |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Function does nothing and is therefore always safe. |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@deftypefun sem_t *sem_open (const char *@var{name}, int @var{oflag}, ...); |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asuinit{}}@acunsafe{@acuinit{}}} |
|
|
+@c pthread_once asuinit |
|
|
+@c |
|
|
+@c We are AC-Unsafe becuase we use pthread_once to initialize |
|
|
+@c a global variable that holds the location of the mounted |
|
|
+@c shmfs on Linux. |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@deftypefun int sem_close (sem_t *@var{sem}); |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c lll_lock asulock aculock |
|
|
+@c twalk mtsrace{:root} |
|
|
+@c |
|
|
+@c We are AS-unsafe because we take a non-recursive lock. |
|
|
+@c We are AC-unsafe because several internal data structures |
|
|
+@c are not updated atomically. |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@deftypefun int sem_unlink (const char *@var{name}); |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asuinit{}}@acunsafe{@acucorrupt{}}} |
|
|
+@c pthread_once asuinit acucorrupt aculock |
|
|
+@c mempcpy acucorrupt |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@deftypefun int sem_wait (sem_t *@var{sem}); |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
+@c atomic_increment (nwaiters) acucorrupt |
|
|
+@c |
|
|
+@c Given the use atomic operations this function seems |
|
|
+@c to be AS-safe. It is AC-unsafe because there is still |
|
|
+@c a window between atomic_decrement and the pthread_push |
|
|
+@c of the handler that undoes that operation. A cancellation |
|
|
+@c at that point would fail to remove the process from the |
|
|
+@c waiters count. |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@deftypefun int sem_timedwait (sem_t *@var{sem}, const struct timespec *@var{abstime}); |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
+@c Same safety issues as sem_wait. |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@deftypefun int sem_trywait (sem_t *@var{sem}); |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c All atomic operations are safe in all contexts. |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@deftypefun int sem_post (sem_t *@var{sem}); |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Same safety as sem_trywait. |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@deftypefun int sem_getvalue (sem_t *@var{sem}, int *@var{sval}); |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Atomic write of a value is safe in all contexts. |
|
|
+@end deftypefun |
|
|
diff -urN glibc-2.17-c758a686/manual/job.texi glibc-2.17-c758a686/manual/job.texi |
|
|
--- glibc-2.17-c758a686/manual/job.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/job.texi 2014-09-12 16:10:06.048792709 -0400 |
|
|
@@ -1,4 +1,4 @@ |
|
|
-@node Job Control, Name Service Switch, Processes, Top |
|
|
+@node Job Control, Name Service Switch, Inter-Process Communication, Top |
|
|
@c %MENU% All about process groups and sessions |
|
|
@chapter Job Control |
|
|
|
|
|
@@ -1039,6 +1039,10 @@ |
|
|
@comment stdio.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun {char *} ctermid (char *@var{string}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c This function is a stub by default; the actual implementation, for |
|
|
+@c posix systems, returns an internal buffer if passed a NULL string, |
|
|
+@c but the internal buffer is always set to /dev/tty. |
|
|
The @code{ctermid} function returns a string containing the file name of |
|
|
the controlling terminal for the current process. If @var{string} is |
|
|
not a null pointer, it should be an array that can hold at least |
|
|
@@ -1075,6 +1079,12 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun pid_t setsid (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c This is usually a direct syscall, but if a syscall is not available, |
|
|
+@c we use a stub, or Hurd- and BSD-specific implementations. The former |
|
|
+@c uses a mutex and a hurd critical section, and the latter issues a few |
|
|
+@c syscalls, so both seem safe, the locking on Hurd is safe because of |
|
|
+@c the critical section. |
|
|
The @code{setsid} function creates a new session. The calling process |
|
|
becomes the session leader, and is put in a new process group whose |
|
|
process group ID is the same as the process ID of that process. There |
|
|
@@ -1098,6 +1108,8 @@ |
|
|
@comment unistd.h |
|
|
@comment SVID |
|
|
@deftypefun pid_t getsid (pid_t @var{pid}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Stub or direct syscall, except on hurd, where it is equally safe. |
|
|
|
|
|
The @code{getsid} function returns the process group ID of the session |
|
|
leader of the specified process. If a @var{pid} is @code{0}, the |
|
|
@@ -1118,39 +1130,21 @@ |
|
|
@end table |
|
|
@end deftypefun |
|
|
|
|
|
-The @code{getpgrp} function has two definitions: one derived from BSD |
|
|
-Unix, and one from the POSIX.1 standard. The feature test macros you |
|
|
-have selected (@pxref{Feature Test Macros}) determine which definition |
|
|
-you get. Specifically, you get the BSD version if you define |
|
|
-@code{_BSD_SOURCE}; otherwise, you get the POSIX version if you define |
|
|
-@code{_POSIX_SOURCE} or @code{_GNU_SOURCE}. Programs written for old |
|
|
-BSD systems will not include @file{unistd.h}, which defines |
|
|
-@code{getpgrp} specially under @code{_BSD_SOURCE}. You must link such |
|
|
-programs with the @code{-lbsd-compat} option to get the BSD definition.@refill |
|
|
-@pindex -lbsd-compat |
|
|
-@pindex bsd-compat |
|
|
-@cindex BSD compatibility library |
|
|
- |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
-@deftypefn {POSIX.1 Function} pid_t getpgrp (void) |
|
|
-The POSIX.1 definition of @code{getpgrp} returns the process group ID of |
|
|
+@deftypefun pid_t getpgrp (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+The @code{getpgrp} function returns the process group ID of |
|
|
the calling process. |
|
|
-@end deftypefn |
|
|
- |
|
|
-@comment unistd.h |
|
|
-@comment BSD |
|
|
-@deftypefn {BSD Function} pid_t getpgrp (pid_t @var{pid}) |
|
|
-The BSD definition of @code{getpgrp} returns the process group ID of the |
|
|
-process @var{pid}. You can supply a value of @code{0} for the @var{pid} |
|
|
-argument to get information about the calling process. |
|
|
-@end deftypefn |
|
|
+@end deftypefun |
|
|
|
|
|
@comment unistd.h |
|
|
-@comment SVID |
|
|
-@deftypefn {System V Function} int getpgid (pid_t @var{pid}) |
|
|
+@comment POSIX.1 |
|
|
+@deftypefun int getpgid (pid_t @var{pid}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Stub or direct syscall, except on hurd, where it is equally safe. |
|
|
|
|
|
-@code{getpgid} is the same as the BSD function @code{getpgrp}. It |
|
|
+The @code{getpgid} function |
|
|
returns the process group ID of the process @var{pid}. You can supply a |
|
|
value of @code{0} for the @var{pid} argument to get information about |
|
|
the calling process. |
|
|
@@ -1166,11 +1160,13 @@ |
|
|
process group ID of the process with ID @var{pid} from the calling |
|
|
process. |
|
|
@end table |
|
|
-@end deftypefn |
|
|
+@end deftypefun |
|
|
|
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int setpgid (pid_t @var{pid}, pid_t @var{pgid}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Stub or direct syscall, except on hurd, where it is equally safe. |
|
|
The @code{setpgid} function puts the process @var{pid} into the process |
|
|
group @var{pgid}. As a special case, either @var{pid} or @var{pgid} can |
|
|
be zero to indicate the process ID of the calling process. |
|
|
@@ -1208,6 +1204,8 @@ |
|
|
@comment unistd.h |
|
|
@comment BSD |
|
|
@deftypefun int setpgrp (pid_t @var{pid}, pid_t @var{pgid}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall or setpgid wrapper. |
|
|
This is the BSD Unix name for @code{setpgid}. Both functions do exactly |
|
|
the same thing. |
|
|
@end deftypefun |
|
|
@@ -1230,6 +1228,8 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun pid_t tcgetpgrp (int @var{filedes}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Stub, or ioctl on BSD and GNU/Linux. |
|
|
This function returns the process group ID of the foreground process |
|
|
group associated with the terminal open on descriptor @var{filedes}. |
|
|
|
|
|
@@ -1258,6 +1258,8 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int tcsetpgrp (int @var{filedes}, pid_t @var{pgid}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Stub, or ioctl on BSD and GNU/Linux. |
|
|
This function is used to set a terminal's foreground process group ID. |
|
|
The argument @var{filedes} is a descriptor which specifies the terminal; |
|
|
@var{pgid} specifies the process group. The calling process must be a |
|
|
@@ -1297,6 +1299,8 @@ |
|
|
@comment termios.h |
|
|
@comment Unix98 |
|
|
@deftypefun pid_t tcgetsid (int @var{fildes}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Ioctl call, if available, or tcgetpgrp followed by getsid. |
|
|
This function is used to obtain the process group ID of the session |
|
|
for which the terminal specified by @var{fildes} is the controlling terminal. |
|
|
If the call is successful the group ID is returned. Otherwise the |
|
|
diff -urN glibc-2.17-c758a686/manual/lang.texi glibc-2.17-c758a686/manual/lang.texi |
|
|
--- glibc-2.17-c758a686/manual/lang.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/lang.texi 2014-09-12 16:10:06.045792717 -0400 |
|
|
@@ -51,6 +51,8 @@ |
|
|
@comment assert.h |
|
|
@comment ISO |
|
|
@deftypefn Macro void assert (int @var{expression}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
+@c assert_fail_base calls asprintf, and fflushes stderr. |
|
|
Verify the programmer's belief that @var{expression} is nonzero at |
|
|
this point in the program. |
|
|
|
|
|
@@ -91,6 +93,8 @@ |
|
|
@comment assert.h |
|
|
@comment GNU |
|
|
@deftypefn Macro void assert_perror (int @var{errnum}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asucorrupt{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
+@c assert_fail_base calls asprintf, and fflushes stderr. |
|
|
Similar to @code{assert}, but verifies that @var{errnum} is zero. |
|
|
|
|
|
If @code{NDEBUG} is not defined, @code{assert_perror} tests the value of |
|
|
@@ -423,6 +427,8 @@ |
|
|
@comment stdarg.h |
|
|
@comment ISO |
|
|
@deftypefn {Macro} void va_start (va_list @var{ap}, @var{last-required}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c This is no longer provided by glibc, but rather by the compiler. |
|
|
This macro initializes the argument pointer variable @var{ap} to point |
|
|
to the first of the optional arguments of the current function; |
|
|
@var{last-required} must be the last required argument to the function. |
|
|
@@ -431,6 +437,11 @@ |
|
|
@comment stdarg.h |
|
|
@comment ISO |
|
|
@deftypefn {Macro} @var{type} va_arg (va_list @var{ap}, @var{type}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:ap}}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
+@c This is no longer provided by glibc, but rather by the compiler. |
|
|
+@c Unlike the other va_ macros, that either start/end the lifetime of |
|
|
+@c the va_list object or don't modify it, this one modifies ap, and it |
|
|
+@c may leave it in a partially updated state. |
|
|
The @code{va_arg} macro returns the value of the next optional argument, |
|
|
and modifies the value of @var{ap} to point to the subsequent argument. |
|
|
Thus, successive uses of @code{va_arg} return successive optional |
|
|
@@ -445,6 +456,8 @@ |
|
|
@comment stdarg.h |
|
|
@comment ISO |
|
|
@deftypefn {Macro} void va_end (va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c This is no longer provided by glibc, but rather by the compiler. |
|
|
This ends the use of @var{ap}. After a @code{va_end} call, further |
|
|
@code{va_arg} calls with the same @var{ap} may not work. You should invoke |
|
|
@code{va_end} before returning from the function in which @code{va_start} |
|
|
@@ -466,6 +479,8 @@ |
|
|
@comment ISO |
|
|
@deftypefn {Macro} void va_copy (va_list @var{dest}, va_list @var{src}) |
|
|
@deftypefnx {Macro} void __va_copy (va_list @var{dest}, va_list @var{src}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c This is no longer provided by glibc, but rather by the compiler. |
|
|
The @code{va_copy} macro allows copying of objects of type |
|
|
@code{va_list} even if this is not an integral type. The argument pointer |
|
|
in @var{dest} is initialized to point to the same argument as the |
|
|
@@ -1212,7 +1227,9 @@ |
|
|
@comment stddef.h |
|
|
@comment ISO |
|
|
@deftypefn {Macro} size_t offsetof (@var{type}, @var{member}) |
|
|
-This expands to a integer constant expression that is the offset of the |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c This is no longer provided by glibc, but rather by the compiler. |
|
|
+This expands to an integer constant expression that is the offset of the |
|
|
structure member named @var{member} in the structure type @var{type}. |
|
|
For example, @code{offsetof (struct s, elem)} is the offset, in bytes, |
|
|
of the member @code{elem} in a @code{struct s}. |
|
|
diff -urN glibc-2.17-c758a686/manual/libc.texinfo glibc-2.17-c758a686/manual/libc.texinfo |
|
|
--- glibc-2.17-c758a686/manual/libc.texinfo 2014-09-12 16:08:17.677071123 -0400 |
|
|
+++ glibc-2.17-c758a686/manual/libc.texinfo 2014-09-12 16:10:25.996741462 -0400 |
|
|
@@ -7,7 +7,7 @@ |
|
|
@include macros.texi |
|
|
|
|
|
@comment Tell install-info what to do. |
|
|
-@dircategory Libraries |
|
|
+@dircategory Software libraries |
|
|
@direntry |
|
|
* Libc: (libc). C library. |
|
|
@end direntry |
|
|
@@ -46,7 +46,7 @@ |
|
|
@value{VERSION} @value{PKGVERSION}. |
|
|
@end ifclear |
|
|
|
|
|
-Copyright @copyright{} 1993--2012 Free Software Foundation, Inc. |
|
|
+Copyright @copyright{} 1993--2014 Free Software Foundation, Inc. |
|
|
|
|
|
Permission is granted to copy, distribute and/or modify this document |
|
|
under the terms of the GNU Free Documentation License, Version |
|
|
@@ -118,6 +118,7 @@ |
|
|
@include chapters.texi |
|
|
|
|
|
@node Free Manuals, Copying, Contributors, Top |
|
|
+@appendix Free Software Needs Free Documentation |
|
|
@include freemanuals.texi |
|
|
|
|
|
@node Copying, Documentation License, Free Manuals, Top |
|
|
diff -urN glibc-2.17-c758a686/manual/libc-texinfo.sh glibc-2.17-c758a686/manual/libc-texinfo.sh |
|
|
--- glibc-2.17-c758a686/manual/libc-texinfo.sh 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/libc-texinfo.sh 2014-09-12 16:10:06.042792724 -0400 |
|
|
@@ -91,9 +91,11 @@ |
|
|
* Variable Index:: Index of variables and variable-like macros. |
|
|
* File Index:: Index of programs and files. |
|
|
|
|
|
+ @detailmenu |
|
|
--- The Detailed Node Listing --- |
|
|
EOF |
|
|
cat ${OUTDIR}lmenu.$$ |
|
|
+ echo '@end detailmenu' |
|
|
echo '@end menu'; } >${OUTDIR}top-menu.texi.$$ |
|
|
mv -f ${OUTDIR}top-menu.texi.$$ ${OUTDIR}top-menu.texi |
|
|
|
|
|
diff -urN glibc-2.17-c758a686/manual/libdl.texi glibc-2.17-c758a686/manual/libdl.texi |
|
|
--- glibc-2.17-c758a686/manual/libdl.texi 1969-12-31 19:00:00.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/libdl.texi 2014-09-12 16:10:06.045792717 -0400 |
|
|
@@ -0,0 +1,10 @@ |
|
|
+@c FIXME these are undocumented: |
|
|
+@c dladdr |
|
|
+@c dladdr1 |
|
|
+@c dlclose |
|
|
+@c dlerror |
|
|
+@c dlinfo |
|
|
+@c dlmopen |
|
|
+@c dlopen |
|
|
+@c dlsym |
|
|
+@c dlvsym |
|
|
diff -urN glibc-2.17-c758a686/manual/llio.texi glibc-2.17-c758a686/manual/llio.texi |
|
|
--- glibc-2.17-c758a686/manual/llio.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/llio.texi 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -78,6 +82,7 @@ |
|
|
@comment fcntl.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int open (const char *@var{filename}, int @var{flags}[, mode_t @var{mode}]) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}} |
|
|
The @code{open} function creates and returns a new file descriptor for |
|
|
the file named by @var{filename}. Initially, the file position |
|
|
indicator for the file is at the beginning of the file. The argument |
|
|
@@ -164,6 +169,7 @@ |
|
|
@comment fcntl.h |
|
|
@comment Unix98 |
|
|
@deftypefun int open64 (const char *@var{filename}, int @var{flags}[, mode_t @var{mode}]) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}} |
|
|
This function is similar to @code{open}. It returns a file descriptor |
|
|
which can be used to access the file named by @var{filename}. The only |
|
|
difference is that on 32 bit systems the file is opened in the |
|
|
@@ -178,6 +184,7 @@ |
|
|
@comment fcntl.h |
|
|
@comment POSIX.1 |
|
|
@deftypefn {Obsolete function} int creat (const char *@var{filename}, mode_t @var{mode}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}} |
|
|
This function is obsolete. The call: |
|
|
|
|
|
@smallexample |
|
|
@@ -202,6 +209,7 @@ |
|
|
@comment fcntl.h |
|
|
@comment Unix98 |
|
|
@deftypefn {Obsolete function} int creat64 (const char *@var{filename}, mode_t @var{mode}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}} |
|
|
This function is similar to @code{creat}. It returns a file descriptor |
|
|
which can be used to access the file named by @var{filename}. The only |
|
|
the difference is that on 32 bit systems the file is opened in the |
|
|
@@ -219,6 +227,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int close (int @var{filedes}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}} |
|
|
The function @code{close} closes the file descriptor @var{filedes}. |
|
|
Closing a file has the following consequences: |
|
|
|
|
|
@@ -300,6 +309,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun ssize_t read (int @var{filedes}, void *@var{buffer}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{read} function reads up to @var{size} bytes from the file |
|
|
with descriptor @var{filedes}, storing the results in the @var{buffer}. |
|
|
(This is not necessarily a character string, and no terminating null |
|
|
@@ -395,6 +405,10 @@ |
|
|
@comment unistd.h |
|
|
@comment Unix98 |
|
|
@deftypefun ssize_t pread (int @var{filedes}, void *@var{buffer}, size_t @var{size}, off_t @var{offset}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c This is usually a safe syscall. The sysdeps/posix fallback emulation |
|
|
+@c is not MT-Safe because it uses lseek, read and lseek back, but is it |
|
|
+@c used anywhere? |
|
|
The @code{pread} function is similar to the @code{read} function. The |
|
|
first three arguments are identical, and the return values and error |
|
|
codes also correspond. |
|
|
@@ -430,6 +444,10 @@ |
|
|
@comment unistd.h |
|
|
@comment Unix98 |
|
|
@deftypefun ssize_t pread64 (int @var{filedes}, void *@var{buffer}, size_t @var{size}, off64_t @var{offset}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c This is usually a safe syscall. The sysdeps/posix fallback emulation |
|
|
+@c is not MT-Safe because it uses lseek64, read and lseek64 back, but is |
|
|
+@c it used anywhere? |
|
|
This function is similar to the @code{pread} function. The difference |
|
|
is that the @var{offset} parameter is of type @code{off64_t} instead of |
|
|
@code{off_t} which makes it possible on 32 bit machines to address |
|
|
@@ -447,6 +465,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun ssize_t write (int @var{filedes}, const void *@var{buffer}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{write} function writes up to @var{size} bytes from |
|
|
@var{buffer} to the file with descriptor @var{filedes}. The data in |
|
|
@var{buffer} is not necessarily a character string and a null character is |
|
|
@@ -557,6 +576,10 @@ |
|
|
@comment unistd.h |
|
|
@comment Unix98 |
|
|
@deftypefun ssize_t pwrite (int @var{filedes}, const void *@var{buffer}, size_t @var{size}, off_t @var{offset}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c This is usually a safe syscall. The sysdeps/posix fallback emulation |
|
|
+@c is not MT-Safe because it uses lseek, write and lseek back, but is it |
|
|
+@c used anywhere? |
|
|
The @code{pwrite} function is similar to the @code{write} function. The |
|
|
first three arguments are identical, and the return values and error codes |
|
|
also correspond. |
|
|
@@ -592,6 +615,10 @@ |
|
|
@comment unistd.h |
|
|
@comment Unix98 |
|
|
@deftypefun ssize_t pwrite64 (int @var{filedes}, const void *@var{buffer}, size_t @var{size}, off64_t @var{offset}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c This is usually a safe syscall. The sysdeps/posix fallback emulation |
|
|
+@c is not MT-Safe because it uses lseek64, write and lseek64 back, but |
|
|
+@c is it used anywhere? |
|
|
This function is similar to the @code{pwrite} function. The difference |
|
|
is that the @var{offset} parameter is of type @code{off64_t} instead of |
|
|
@code{off_t} which makes it possible on 32 bit machines to address |
|
|
@@ -624,6 +651,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun off_t lseek (int @var{filedes}, off_t @var{offset}, int @var{whence}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{lseek} function is used to change the file position of the |
|
|
file with descriptor @var{filedes}. |
|
|
|
|
|
@@ -713,6 +741,7 @@ |
|
|
@comment unistd.h |
|
|
@comment Unix98 |
|
|
@deftypefun off64_t lseek64 (int @var{filedes}, off64_t @var{offset}, int @var{whence}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is similar to the @code{lseek} function. The difference |
|
|
is that the @var{offset} parameter is of type @code{off64_t} instead of |
|
|
@code{off_t} which makes it possible on 32 bit machines to address |
|
|
@@ -825,6 +854,7 @@ |
|
|
@comment stdio.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun {FILE *} fdopen (int @var{filedes}, const char *@var{opentype}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}} |
|
|
The @code{fdopen} function returns a new stream for the file descriptor |
|
|
@var{filedes}. |
|
|
|
|
|
@@ -853,6 +883,7 @@ |
|
|
@comment stdio.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int fileno (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function returns the file descriptor associated with the stream |
|
|
@var{stream}. If an error is detected (for example, if the @var{stream} |
|
|
is not valid) or if @var{stream} does not do I/O to a file, |
|
|
@@ -862,6 +893,7 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun int fileno_unlocked (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{fileno_unlocked} function is equivalent to the @code{fileno} |
|
|
function except that it does not implicitly lock the stream if the state |
|
|
is @code{FSETLOCKING_INTERNAL}. |
|
|
@@ -1055,7 +1087,7 @@ |
|
|
@comment BSD |
|
|
@deftp {Data Type} {struct iovec} |
|
|
|
|
|
-The @code{iovec} structure describes a buffer. It contains two fields: |
|
|
+The @code{iovec} structure describes a buffer. It contains two fields: |
|
|
|
|
|
@table @code |
|
|
|
|
|
@@ -1071,6 +1103,11 @@ |
|
|
@comment sys/uio.h |
|
|
@comment BSD |
|
|
@deftypefun ssize_t readv (int @var{filedes}, const struct iovec *@var{vector}, int @var{count}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c The fallback sysdeps/posix implementation, used even on GNU/Linux |
|
|
+@c with old kernels that lack a full readv/writev implementation, may |
|
|
+@c malloc the buffer into which data is read, if the total read size is |
|
|
+@c too large for alloca. |
|
|
|
|
|
The @code{readv} function reads data from @var{filedes} and scatters it |
|
|
into the buffers described in @var{vector}, which is taken to be |
|
|
@@ -1089,6 +1126,11 @@ |
|
|
@comment sys/uio.h |
|
|
@comment BSD |
|
|
@deftypefun ssize_t writev (int @var{filedes}, const struct iovec *@var{vector}, int @var{count}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c The fallback sysdeps/posix implementation, used even on GNU/Linux |
|
|
+@c with old kernels that lack a full readv/writev implementation, may |
|
|
+@c malloc the buffer from which data is written, if the total write size |
|
|
+@c is too large for alloca. |
|
|
|
|
|
The @code{writev} function gathers data from the buffers described in |
|
|
@var{vector}, which is taken to be @var{count} structures long, and writes |
|
|
@@ -1103,8 +1145,8 @@ |
|
|
|
|
|
@end deftypefun |
|
|
|
|
|
-@c Note - I haven't read this anywhere. I surmised it from my knowledge |
|
|
-@c of computer science. Thus, there could be subtleties I'm missing. |
|
|
+@c Note - I haven't read this anywhere. I surmised it from my knowledge |
|
|
+@c of computer science. Thus, there could be subtleties I'm missing. |
|
|
|
|
|
Note that if the buffers are small (under about 1kB), high-level streams |
|
|
may be easier to use than these functions. However, @code{readv} and |
|
|
@@ -1149,6 +1191,7 @@ |
|
|
@comment sys/mman.h |
|
|
@comment POSIX |
|
|
@deftypefun {void *} mmap (void *@var{address}, size_t @var{length}, int @var{protect}, int @var{flags}, int @var{filedes}, off_t @var{offset}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
The @code{mmap} function creates a new mapping, connected to bytes |
|
|
(@var{offset}) to (@var{offset} + @var{length} - 1) in the file open on |
|
|
@@ -1156,8 +1199,8 @@ |
|
|
is created, which is not removed by closing the file. |
|
|
|
|
|
@var{address} gives a preferred starting address for the mapping. |
|
|
-@code{NULL} expresses no preference. Any previous mapping at that |
|
|
-address is automatically removed. The address you give may still be |
|
|
+@code{NULL} expresses no preference. Any previous mapping at that |
|
|
+address is automatically removed. The address you give may still be |
|
|
changed, unless you use the @code{MAP_FIXED} flag. |
|
|
|
|
|
@vindex PROT_READ |
|
|
@@ -1221,13 +1264,13 @@ |
|
|
|
|
|
@c Linux has some other MAP_ options, which I have not discussed here. |
|
|
@c MAP_DENYWRITE, MAP_EXECUTABLE and MAP_GROWSDOWN don't seem applicable to |
|
|
-@c user programs (and I don't understand the last two). MAP_LOCKED does |
|
|
+@c user programs (and I don't understand the last two). MAP_LOCKED does |
|
|
@c not appear to be implemented. |
|
|
|
|
|
@end vtable |
|
|
|
|
|
-@code{mmap} returns the address of the new mapping, or @math{-1} for an |
|
|
-error. |
|
|
+@code{mmap} returns the address of the new mapping, or |
|
|
+@code{MAP_FAILED} for an error. |
|
|
|
|
|
Possible errors include: |
|
|
|
|
|
@@ -1268,6 +1311,9 @@ |
|
|
@comment sys/mman.h |
|
|
@comment LFS |
|
|
@deftypefun {void *} mmap64 (void *@var{address}, size_t @var{length}, int @var{protect}, int @var{flags}, int @var{filedes}, off64_t @var{offset}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c The page_shift auto detection when MMAP2_PAGE_SHIFT is -1 (it never |
|
|
+@c is) would be thread-unsafe. |
|
|
The @code{mmap64} function is equivalent to the @code{mmap} function but |
|
|
the @var{offset} parameter is of type @code{off64_t}. On 32-bit systems |
|
|
this allows the file associated with the @var{filedes} descriptor to be |
|
|
@@ -1284,6 +1330,7 @@ |
|
|
@comment sys/mman.h |
|
|
@comment POSIX |
|
|
@deftypefun int munmap (void *@var{addr}, size_t @var{length}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
@code{munmap} removes any memory maps from (@var{addr}) to (@var{addr} + |
|
|
@var{length}). @var{length} should be the length of the mapping. |
|
|
@@ -1310,6 +1357,7 @@ |
|
|
@comment sys/mman.h |
|
|
@comment POSIX |
|
|
@deftypefun int msync (void *@var{address}, size_t @var{length}, int @var{flags}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
When using shared mappings, the kernel can write the file at any time |
|
|
before the mapping is removed. To be certain data has actually been |
|
|
@@ -1357,17 +1405,18 @@ |
|
|
@comment sys/mman.h |
|
|
@comment GNU |
|
|
@deftypefun {void *} mremap (void *@var{address}, size_t @var{length}, size_t @var{new_length}, int @var{flag}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
This function can be used to change the size of an existing memory |
|
|
area. @var{address} and @var{length} must cover a region entirely mapped |
|
|
-in the same @code{mmap} statement. A new mapping with the same |
|
|
+in the same @code{mmap} statement. A new mapping with the same |
|
|
characteristics will be returned with the length @var{new_length}. |
|
|
|
|
|
-One option is possible, @code{MREMAP_MAYMOVE}. If it is given in |
|
|
+One option is possible, @code{MREMAP_MAYMOVE}. If it is given in |
|
|
@var{flags}, the system may remove the existing mapping and create a new |
|
|
one of the desired length in another location. |
|
|
|
|
|
-The address of the resulting mapping is returned, or @math{-1}. Possible |
|
|
+The address of the resulting mapping is returned, or @math{-1}. Possible |
|
|
error codes include: |
|
|
|
|
|
@table @code |
|
|
@@ -1405,6 +1454,7 @@ |
|
|
@comment sys/mman.h |
|
|
@comment POSIX |
|
|
@deftypefun int madvise (void *@var{addr}, size_t @var{length}, int @var{advice}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
This function can be used to provide the system with @var{advice} about |
|
|
the intended usage patterns of the memory region starting at @var{addr} |
|
|
@@ -1418,11 +1468,11 @@ |
|
|
The region should receive no further special treatment. |
|
|
|
|
|
@item MADV_RANDOM |
|
|
-The region will be accessed via random page references. The kernel |
|
|
+The region will be accessed via random page references. The kernel |
|
|
should page-in the minimal number of pages for each page fault. |
|
|
|
|
|
@item MADV_SEQUENTIAL |
|
|
-The region will be accessed via sequential page references. This |
|
|
+The region will be accessed via sequential page references. This |
|
|
may cause the kernel to aggressively read-ahead, expecting further |
|
|
sequential references after any page fault within this region. |
|
|
|
|
|
@@ -1471,6 +1521,58 @@ |
|
|
@end table |
|
|
@end deftypefun |
|
|
|
|
|
+@comment sys/mman.h |
|
|
+@comment POSIX |
|
|
+@deftypefn Function int shm_open (const char *@var{name}, int @var{oflag}, mode_t @var{mode}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asuinit{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c shm_open @mtslocale @asuinit @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c libc_once(where_is_shmfs) @mtslocale @asuinit @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c where_is_shmfs @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c statfs dup ok |
|
|
+@c setmntent dup @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c getmntent_r dup @mtslocale @ascuheap @aculock @acsmem [no @asucorrupt @acucorrupt; exclusive stream] |
|
|
+@c strcmp dup ok |
|
|
+@c strlen dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c mempcpy dup ok |
|
|
+@c endmntent dup @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c strlen dup ok |
|
|
+@c strchr dup ok |
|
|
+@c mempcpy dup ok |
|
|
+@c open dup @acsfd |
|
|
+@c fcntl dup ok |
|
|
+@c close dup @acsfd |
|
|
+ |
|
|
+This function returns a file descriptor that can be used to allocate shared |
|
|
+memory via mmap. Unrelated processes can use same @var{name} to create or |
|
|
+open existing shared memory objects. |
|
|
+ |
|
|
+A @var{name} argument specifies the shared memory object to be opened. |
|
|
+In @theglibc{} it must be a string smaller than @code{NAME_MAX} bytes starting |
|
|
+with an optional slash but containing no other slashes. |
|
|
+ |
|
|
+The semantics of @var{oflag} and @var{mode} arguments is same as in @code{open}. |
|
|
+ |
|
|
+@code{shm_open} returns the file descriptor on success or @math{-1} on error. |
|
|
+On failure @code{errno} is set. |
|
|
+@end deftypefn |
|
|
+ |
|
|
+@deftypefn Function int shm_unlink (const char *@var{name}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asuinit{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c shm_unlink @mtslocale @asuinit @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c libc_once(where_is_shmfs) dup @mtslocale @asuinit @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c strlen dup ok |
|
|
+@c strchr dup ok |
|
|
+@c mempcpy dup ok |
|
|
+@c unlink dup ok |
|
|
+ |
|
|
+This function is inverse of @code{shm_open} and removes the object with |
|
|
+the given @var{name} previously created by @code{shm_open}. |
|
|
+ |
|
|
+@code{shm_unlink} returns @math{0} on success or @math{-1} on error. |
|
|
+On failure @code{errno} is set. |
|
|
+@end deftypefn |
|
|
+ |
|
|
@node Waiting for I/O |
|
|
@section Waiting for Input or Output |
|
|
@cindex waiting for input or output |
|
|
@@ -1531,6 +1633,7 @@ |
|
|
@comment sys/types.h |
|
|
@comment BSD |
|
|
@deftypefn Macro void FD_ZERO (fd_set *@var{set}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:set}}@assafe{}@acsafe{}} |
|
|
This macro initializes the file descriptor set @var{set} to be the |
|
|
empty set. |
|
|
@end deftypefn |
|
|
@@ -1538,6 +1641,9 @@ |
|
|
@comment sys/types.h |
|
|
@comment BSD |
|
|
@deftypefn Macro void FD_SET (int @var{filedes}, fd_set *@var{set}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:set}}@assafe{}@acsafe{}} |
|
|
+@c Setting a bit isn't necessarily atomic, so there's a potential race |
|
|
+@c here if set is not used exclusively. |
|
|
This macro adds @var{filedes} to the file descriptor set @var{set}. |
|
|
|
|
|
The @var{filedes} parameter must not have side effects since it is |
|
|
@@ -1547,6 +1653,9 @@ |
|
|
@comment sys/types.h |
|
|
@comment BSD |
|
|
@deftypefn Macro void FD_CLR (int @var{filedes}, fd_set *@var{set}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:set}}@assafe{}@acsafe{}} |
|
|
+@c Setting a bit isn't necessarily atomic, so there's a potential race |
|
|
+@c here if set is not used exclusively. |
|
|
This macro removes @var{filedes} from the file descriptor set @var{set}. |
|
|
|
|
|
The @var{filedes} parameter must not have side effects since it is |
|
|
@@ -1556,6 +1665,7 @@ |
|
|
@comment sys/types.h |
|
|
@comment BSD |
|
|
@deftypefn Macro int FD_ISSET (int @var{filedes}, const fd_set *@var{set}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:set}}@assafe{}@acsafe{}} |
|
|
This macro returns a nonzero value (true) if @var{filedes} is a member |
|
|
of the file descriptor set @var{set}, and zero (false) otherwise. |
|
|
|
|
|
@@ -1568,6 +1678,10 @@ |
|
|
@comment sys/types.h |
|
|
@comment BSD |
|
|
@deftypefun int select (int @var{nfds}, fd_set *@var{read-fds}, fd_set *@var{write-fds}, fd_set *@var{except-fds}, struct timeval *@var{timeout}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:read-fds} @mtsrace{:write-fds} @mtsrace{:except-fds}}@assafe{}@acsafe{}} |
|
|
+@c The select syscall is preferred, but pselect6 may be used instead, |
|
|
+@c which requires converting timeout to a timespec and back. The |
|
|
+@c conversions are not atomic. |
|
|
The @code{select} function blocks the calling process until there is |
|
|
activity on any of the specified sets of file descriptors, or until the |
|
|
timeout period has expired. |
|
|
@@ -1669,15 +1783,14 @@ |
|
|
|
|
|
@comment unistd.h |
|
|
@comment X/Open |
|
|
-@deftypefun int sync (void) |
|
|
+@deftypefun void sync (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
A call to this function will not return as long as there is data which |
|
|
has not been written to the device. All dirty buffers in the kernel will |
|
|
be written and so an overall consistent system can be achieved (if no |
|
|
other process in parallel writes data). |
|
|
|
|
|
A prototype for @code{sync} can be found in @file{unistd.h}. |
|
|
- |
|
|
-The return value is zero to indicate no error. |
|
|
@end deftypefun |
|
|
|
|
|
Programs more often want to ensure that data written to a given file is |
|
|
@@ -1687,6 +1800,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX |
|
|
@deftypefun int fsync (int @var{fildes}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{fsync} function can be used to make sure all data associated with |
|
|
the open file @var{fildes} is written to the device associated with the |
|
|
descriptor. The function call does not return unless all actions have |
|
|
@@ -1724,6 +1838,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX |
|
|
@deftypefun int fdatasync (int @var{fildes}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
When a call to the @code{fdatasync} function returns, it is ensured |
|
|
that all of the file data is written to the device. For all pending I/O |
|
|
operations, the parts guaranteeing data integrity finished. |
|
|
@@ -1925,6 +2040,158 @@ |
|
|
@comment aio.h |
|
|
@comment POSIX.1b |
|
|
@deftypefun int aio_read (struct aiocb *@var{aiocbp}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
+@c Calls aio_enqueue_request. |
|
|
+@c aio_enqueue_request @asulock @ascuheap @aculock @acsmem |
|
|
+@c pthread_self ok |
|
|
+@c pthread_getschedparam @asulock @aculock |
|
|
+@c lll_lock (pthread descriptor's lock) @asulock @aculock |
|
|
+@c sched_getparam ok |
|
|
+@c sched_getscheduler ok |
|
|
+@c lll_unlock @aculock |
|
|
+@c pthread_mutex_lock (aio_requests_mutex) @asulock @aculock |
|
|
+@c get_elem @ascuheap @acsmem [@asucorrupt @acucorrupt] |
|
|
+@c realloc @ascuheap @acsmem |
|
|
+@c calloc @ascuheap @acsmem |
|
|
+@c aio_create_helper_thread @asulock @ascuheap @aculock @acsmem |
|
|
+@c pthread_attr_init ok |
|
|
+@c pthread_attr_setdetachstate ok |
|
|
+@c pthread_get_minstack ok |
|
|
+@c pthread_attr_setstacksize ok |
|
|
+@c sigfillset ok |
|
|
+@c memset ok |
|
|
+@c sigdelset ok |
|
|
+@c SYSCALL rt_sigprocmask ok |
|
|
+@c pthread_create @asulock @ascuheap @aculock @acsmem |
|
|
+@c lll_lock (default_pthread_attr_lock) @asulock @aculock |
|
|
+@c alloca/malloc @ascuheap @acsmem |
|
|
+@c lll_unlock @aculock |
|
|
+@c allocate_stack @asulock @ascuheap @aculock @acsmem |
|
|
+@c getpagesize dup |
|
|
+@c lll_lock (default_pthread_attr_lock) @asulock @aculock |
|
|
+@c lll_unlock @aculock |
|
|
+@c _dl_allocate_tls @ascuheap @acsmem |
|
|
+@c _dl_allocate_tls_storage @ascuheap @acsmem |
|
|
+@c memalign @ascuheap @acsmem |
|
|
+@c memset ok |
|
|
+@c allocate_dtv dup |
|
|
+@c free @ascuheap @acsmem |
|
|
+@c allocate_dtv @ascuheap @acsmem |
|
|
+@c calloc @ascuheap @acsmem |
|
|
+@c INSTALL_DTV ok |
|
|
+@c list_add dup |
|
|
+@c get_cached_stack |
|
|
+@c lll_lock (stack_cache_lock) @asulock @aculock |
|
|
+@c list_for_each ok |
|
|
+@c list_entry dup |
|
|
+@c FREE_P dup |
|
|
+@c stack_list_del dup |
|
|
+@c stack_list_add dup |
|
|
+@c lll_unlock @aculock |
|
|
+@c _dl_allocate_tls_init ok |
|
|
+@c GET_DTV ok |
|
|
+@c mmap ok |
|
|
+@c atomic_increment_val ok |
|
|
+@c munmap ok |
|
|
+@c change_stack_perm ok |
|
|
+@c mprotect ok |
|
|
+@c mprotect ok |
|
|
+@c stack_list_del dup |
|
|
+@c _dl_deallocate_tls dup |
|
|
+@c munmap ok |
|
|
+@c THREAD_COPY_STACK_GUARD ok |
|
|
+@c THREAD_COPY_POINTER_GUARD ok |
|
|
+@c atomic_exchange_acq ok |
|
|
+@c lll_futex_wake ok |
|
|
+@c deallocate_stack @asulock @ascuheap @aculock @acsmem |
|
|
+@c lll_lock (state_cache_lock) @asulock @aculock |
|
|
+@c stack_list_del ok |
|
|
+@c atomic_write_barrier ok |
|
|
+@c list_del ok |
|
|
+@c atomic_write_barrier ok |
|
|
+@c queue_stack @ascuheap @acsmem |
|
|
+@c stack_list_add ok |
|
|
+@c atomic_write_barrier ok |
|
|
+@c list_add ok |
|
|
+@c atomic_write_barrier ok |
|
|
+@c free_stacks @ascuheap @acsmem |
|
|
+@c list_for_each_prev_safe ok |
|
|
+@c list_entry ok |
|
|
+@c FREE_P ok |
|
|
+@c stack_list_del dup |
|
|
+@c _dl_deallocate_tls dup |
|
|
+@c munmap ok |
|
|
+@c _dl_deallocate_tls @ascuheap @acsmem |
|
|
+@c free @ascuheap @acsmem |
|
|
+@c lll_unlock @aculock |
|
|
+@c create_thread @asulock @ascuheap @aculock @acsmem |
|
|
+@c td_eventword |
|
|
+@c td_eventmask |
|
|
+@c do_clone @asulock @ascuheap @aculock @acsmem |
|
|
+@c PREPARE_CREATE ok |
|
|
+@c lll_lock (pd->lock) @asulock @aculock |
|
|
+@c atomic_increment ok |
|
|
+@c clone ok |
|
|
+@c atomic_decrement ok |
|
|
+@c atomic_exchange_acq ok |
|
|
+@c lll_futex_wake ok |
|
|
+@c deallocate_stack dup |
|
|
+@c sched_setaffinity ok |
|
|
+@c tgkill ok |
|
|
+@c sched_setscheduler ok |
|
|
+@c atomic_compare_and_exchange_bool_acq ok |
|
|
+@c nptl_create_event ok |
|
|
+@c lll_unlock (pd->lock) @aculock |
|
|
+@c free @ascuheap @acsmem |
|
|
+@c pthread_attr_destroy ok (cpuset won't be set, so free isn't called) |
|
|
+@c add_request_to_runlist ok |
|
|
+@c pthread_cond_signal ok |
|
|
+@c aio_free_request ok |
|
|
+@c pthread_mutex_unlock @aculock |
|
|
+ |
|
|
+@c (in the new thread, initiated with clone) |
|
|
+@c start_thread ok |
|
|
+@c HP_TIMING_NOW ok |
|
|
+@c ctype_init @mtslocale |
|
|
+@c atomic_exchange_acq ok |
|
|
+@c lll_futex_wake ok |
|
|
+@c sigemptyset ok |
|
|
+@c sigaddset ok |
|
|
+@c setjmp ok |
|
|
+@c CANCEL_ASYNC -> pthread_enable_asynccancel ok |
|
|
+@c do_cancel ok |
|
|
+@c pthread_unwind ok |
|
|
+@c Unwind_ForcedUnwind or longjmp ok [@ascuheap @acsmem?] |
|
|
+@c lll_lock @asulock @aculock |
|
|
+@c lll_unlock @asulock @aculock |
|
|
+@c CANCEL_RESET -> pthread_disable_asynccancel ok |
|
|
+@c lll_futex_wait ok |
|
|
+@c ->start_routine ok ----- |
|
|
+@c call_tls_dtors @asulock @ascuheap @aculock @acsmem |
|
|
+@c user-supplied dtor |
|
|
+@c rtld_lock_lock_recursive (dl_load_lock) @asulock @aculock |
|
|
+@c rtld_lock_unlock_recursive @aculock |
|
|
+@c free @ascuheap @acsmem |
|
|
+@c nptl_deallocate_tsd @ascuheap @acsmem |
|
|
+@c tsd user-supplied dtors ok |
|
|
+@c free @ascuheap @acsmem |
|
|
+@c libc_thread_freeres |
|
|
+@c libc_thread_subfreeres ok |
|
|
+@c atomic_decrement_and_test ok |
|
|
+@c td_eventword ok |
|
|
+@c td_eventmask ok |
|
|
+@c atomic_compare_exchange_bool_acq ok |
|
|
+@c nptl_death_event ok |
|
|
+@c lll_robust_dead ok |
|
|
+@c getpagesize ok |
|
|
+@c madvise ok |
|
|
+@c free_tcb @asulock @ascuheap @aculock @acsmem |
|
|
+@c free @ascuheap @acsmem |
|
|
+@c deallocate_stack @asulock @ascuheap @aculock @acsmem |
|
|
+@c lll_futex_wait ok |
|
|
+@c exit_thread_inline ok |
|
|
+@c syscall(exit) ok |
|
|
+ |
|
|
This function initiates an asynchronous read operation. It |
|
|
immediately returns after the operation was enqueued or when an |
|
|
error was encountered. |
|
|
@@ -1989,7 +2256,8 @@ |
|
|
|
|
|
@comment aio.h |
|
|
@comment Unix98 |
|
|
-@deftypefun int aio_read64 (struct aiocb *@var{aiocbp}) |
|
|
+@deftypefun int aio_read64 (struct aiocb64 *@var{aiocbp}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
This function is similar to the @code{aio_read} function. The only |
|
|
difference is that on @w{32 bit} machines, the file descriptor should |
|
|
be opened in the large file mode. Internally, @code{aio_read64} uses |
|
|
@@ -2008,13 +2276,14 @@ |
|
|
@comment aio.h |
|
|
@comment POSIX.1b |
|
|
@deftypefun int aio_write (struct aiocb *@var{aiocbp}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
This function initiates an asynchronous write operation. The function |
|
|
call immediately returns after the operation was enqueued or if before |
|
|
this happens an error was encountered. |
|
|
|
|
|
The first @code{aiocbp->aio_nbytes} bytes from the buffer starting at |
|
|
@code{aiocbp->aio_buf} are written to the file for which |
|
|
-@code{aiocbp->aio_fildes} is an descriptor, starting at the absolute |
|
|
+@code{aiocbp->aio_fildes} is a descriptor, starting at the absolute |
|
|
position @code{aiocbp->aio_offset} in the file. |
|
|
|
|
|
If prioritized I/O is supported by the platform, the |
|
|
@@ -2073,7 +2342,8 @@ |
|
|
|
|
|
@comment aio.h |
|
|
@comment Unix98 |
|
|
-@deftypefun int aio_write64 (struct aiocb *@var{aiocbp}) |
|
|
+@deftypefun int aio_write64 (struct aiocb64 *@var{aiocbp}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
This function is similar to the @code{aio_write} function. The only |
|
|
difference is that on @w{32 bit} machines the file descriptor should |
|
|
be opened in the large file mode. Internally @code{aio_write64} uses |
|
|
@@ -2095,6 +2365,12 @@ |
|
|
@comment aio.h |
|
|
@comment POSIX.1b |
|
|
@deftypefun int lio_listio (int @var{mode}, struct aiocb *const @var{list}[], int @var{nent}, struct sigevent *@var{sig}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
+@c Call lio_listio_internal, that takes the aio_requests_mutex lock and |
|
|
+@c enqueues each request. Then, it waits for notification or prepares |
|
|
+@c for it before releasing the lock. Even though it performs memory |
|
|
+@c allocation and locking of its own, it doesn't add any classes of |
|
|
+@c safety issues that aren't already covered by aio_enqueue_request. |
|
|
The @code{lio_listio} function can be used to enqueue an arbitrary |
|
|
number of read and write requests at one time. The requests can all be |
|
|
meant for the same file, all for different files or every solution in |
|
|
@@ -2177,7 +2453,8 @@ |
|
|
|
|
|
@comment aio.h |
|
|
@comment Unix98 |
|
|
-@deftypefun int lio_listio64 (int @var{mode}, struct aiocb *const @var{list}, int @var{nent}, struct sigevent *@var{sig}) |
|
|
+@deftypefun int lio_listio64 (int @var{mode}, struct aiocb64 *const @var{list}[], int @var{nent}, struct sigevent *@var{sig}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
This function is similar to the @code{lio_listio} function. The only |
|
|
difference is that on @w{32 bit} machines, the file descriptor should |
|
|
be opened in the large file mode. Internally, @code{lio_listio64} uses |
|
|
@@ -2206,6 +2483,7 @@ |
|
|
@comment aio.h |
|
|
@comment POSIX.1b |
|
|
@deftypefun int aio_error (const struct aiocb *@var{aiocbp}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function determines the error state of the request described by the |
|
|
@code{struct aiocb} variable pointed to by @var{aiocbp}. If the |
|
|
request has not yet terminated the value returned is always |
|
|
@@ -2227,6 +2505,7 @@ |
|
|
@comment aio.h |
|
|
@comment Unix98 |
|
|
@deftypefun int aio_error64 (const struct aiocb64 *@var{aiocbp}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is similar to @code{aio_error} with the only difference |
|
|
that the argument is a reference to a variable of type @code{struct |
|
|
aiocb64}. |
|
|
@@ -2239,7 +2518,8 @@ |
|
|
|
|
|
@comment aio.h |
|
|
@comment POSIX.1b |
|
|
-@deftypefun ssize_t aio_return (const struct aiocb *@var{aiocbp}) |
|
|
+@deftypefun ssize_t aio_return (struct aiocb *@var{aiocbp}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function can be used to retrieve the return status of the operation |
|
|
carried out by the request described in the variable pointed to by |
|
|
@var{aiocbp}. As long as the error status of this request as returned |
|
|
@@ -2262,7 +2542,8 @@ |
|
|
|
|
|
@comment aio.h |
|
|
@comment Unix98 |
|
|
-@deftypefun int aio_return64 (const struct aiocb64 *@var{aiocbp}) |
|
|
+@deftypefun ssize_t aio_return64 (struct aiocb64 *@var{aiocbp}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is similar to @code{aio_return} with the only difference |
|
|
that the argument is a reference to a variable of type @code{struct |
|
|
aiocb64}. |
|
|
@@ -2291,6 +2572,9 @@ |
|
|
@comment aio.h |
|
|
@comment POSIX.1b |
|
|
@deftypefun int aio_fsync (int @var{op}, struct aiocb *@var{aiocbp}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
+@c After fcntl to check that the FD is open, it calls |
|
|
+@c aio_enqueue_request. |
|
|
Calling this function forces all I/O operations operating queued at the |
|
|
time of the function call operating on the file descriptor |
|
|
@code{aiocbp->aio_fildes} into the synchronized I/O completion state |
|
|
@@ -2322,8 +2606,7 @@ |
|
|
@item EAGAIN |
|
|
The request could not be enqueued due to temporary lack of resources. |
|
|
@item EBADF |
|
|
-The file descriptor @code{aiocbp->aio_fildes} is not valid or not open |
|
|
-for writing. |
|
|
+The file descriptor @code{@var{aiocbp}->aio_fildes} is not valid. |
|
|
@item EINVAL |
|
|
The implementation does not support I/O synchronization or the @var{op} |
|
|
parameter is other than @code{O_DSYNC} and @code{O_SYNC}. |
|
|
@@ -2339,6 +2622,7 @@ |
|
|
@comment aio.h |
|
|
@comment Unix98 |
|
|
@deftypefun int aio_fsync64 (int @var{op}, struct aiocb64 *@var{aiocbp}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
This function is similar to @code{aio_fsync} with the only difference |
|
|
that the argument is a reference to a variable of type @code{struct |
|
|
aiocb64}. |
|
|
@@ -2365,6 +2649,9 @@ |
|
|
@comment aio.h |
|
|
@comment POSIX.1b |
|
|
@deftypefun int aio_suspend (const struct aiocb *const @var{list}[], int @var{nent}, const struct timespec *@var{timeout}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c Take aio_requests_mutex, set up waitlist and requestlist, wait |
|
|
+@c for completion or timeout, and release the mutex. |
|
|
When calling this function, the calling thread is suspended until at |
|
|
least one of the requests pointed to by the @var{nent} elements of the |
|
|
array @var{list} has completed. If any of the requests has already |
|
|
@@ -2403,6 +2690,7 @@ |
|
|
@comment aio.h |
|
|
@comment Unix98 |
|
|
@deftypefun int aio_suspend64 (const struct aiocb64 *const @var{list}[], int @var{nent}, const struct timespec *@var{timeout}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
This function is similar to @code{aio_suspend} with the only difference |
|
|
that the argument is a reference to a variable of type @code{struct |
|
|
aiocb64}. |
|
|
@@ -2430,6 +2718,16 @@ |
|
|
@comment aio.h |
|
|
@comment POSIX.1b |
|
|
@deftypefun int aio_cancel (int @var{fildes}, struct aiocb *@var{aiocbp}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
+@c After fcntl to check the fd is open, hold aio_requests_mutex, call |
|
|
+@c aio_find_req_fd, aio_remove_request, then aio_notify and |
|
|
+@c aio_free_request each request before releasing the lock. |
|
|
+@c aio_notify calls aio_notify_only and free, besides cond signal or |
|
|
+@c similar. aio_notify_only calls pthread_attr_init, |
|
|
+@c pthread_attr_setdetachstate, malloc, pthread_create, |
|
|
+@c notify_func_wrapper, aio_sigqueue, getpid, raise. |
|
|
+@c notify_func_wraper calls aio_start_notify_thread, free and then the |
|
|
+@c notifier function. |
|
|
The @code{aio_cancel} function can be used to cancel one or more |
|
|
outstanding requests. If the @var{aiocbp} parameter is @code{NULL}, the |
|
|
function tries to cancel all of the outstanding requests which would process |
|
|
@@ -2477,6 +2775,7 @@ |
|
|
@comment aio.h |
|
|
@comment Unix98 |
|
|
@deftypefun int aio_cancel64 (int @var{fildes}, struct aiocb64 *@var{aiocbp}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
This function is similar to @code{aio_cancel} with the only difference |
|
|
that the argument is a reference to a variable of type @code{struct |
|
|
aiocb64}. |
|
|
@@ -2532,6 +2831,8 @@ |
|
|
@comment aio.h |
|
|
@comment GNU |
|
|
@deftypefun void aio_init (const struct aioinit *@var{init}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c All changes to global objects are guarded by aio_requests_mutex. |
|
|
This function must be called before any other AIO function. Calling it |
|
|
is completely voluntary, as it is only meant to help the AIO |
|
|
implementation perform better. |
|
|
@@ -2566,6 +2867,7 @@ |
|
|
@comment fcntl.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int fcntl (int @var{filedes}, int @var{command}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{fcntl} function performs the operation specified by |
|
|
@var{command} on the file descriptor @var{filedes}. Some commands |
|
|
require additional arguments to be supplied. These additional arguments |
|
|
@@ -2592,7 +2894,7 @@ |
|
|
Set flags associated with the open file. @xref{File Status Flags}. |
|
|
|
|
|
@item F_GETLK |
|
|
-Get a file lock. @xref{File Locks}. |
|
|
+Test a file lock. @xref{File Locks}. |
|
|
|
|
|
@item F_SETLK |
|
|
Set or clear a file lock. @xref{File Locks}. |
|
|
@@ -2648,6 +2962,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int dup (int @var{old}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function copies descriptor @var{old} to the first available |
|
|
descriptor number (the first number not currently open). It is |
|
|
equivalent to @code{fcntl (@var{old}, F_DUPFD, 0)}. |
|
|
@@ -2656,6 +2971,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int dup2 (int @var{old}, int @var{new}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function copies the descriptor @var{old} to descriptor number |
|
|
@var{new}. |
|
|
|
|
|
@@ -2929,19 +3245,19 @@ |
|
|
But most programs will want to be portable to other POSIX.1 systems and |
|
|
should use the POSIX.1 names above instead. |
|
|
|
|
|
-@comment fcntl.h |
|
|
+@comment fcntl.h (optional) |
|
|
@comment GNU |
|
|
@deftypevr Macro int O_READ |
|
|
Open the file for reading. Same as @code{O_RDONLY}; only defined on GNU. |
|
|
@end deftypevr |
|
|
|
|
|
-@comment fcntl.h |
|
|
+@comment fcntl.h (optional) |
|
|
@comment GNU |
|
|
@deftypevr Macro int O_WRITE |
|
|
Open the file for writing. Same as @code{O_WRONLY}; only defined on GNU. |
|
|
@end deftypevr |
|
|
|
|
|
-@comment fcntl.h |
|
|
+@comment fcntl.h (optional) |
|
|
@comment GNU |
|
|
@deftypevr Macro int O_EXEC |
|
|
Open the file for executing. Only defined on GNU. |
|
|
@@ -3045,7 +3361,7 @@ |
|
|
The following three file name translation flags exist only on |
|
|
@gnuhurdsystems{}. |
|
|
|
|
|
-@comment fcntl.h |
|
|
+@comment fcntl.h (optional) |
|
|
@comment GNU |
|
|
@deftypevr Macro int O_IGNORE_CTTY |
|
|
Do not recognize the named file as the controlling terminal, even if it |
|
|
@@ -3054,7 +3370,7 @@ |
|
|
@xref{Job Control}. |
|
|
@end deftypevr |
|
|
|
|
|
-@comment fcntl.h |
|
|
+@comment fcntl.h (optional) |
|
|
@comment GNU |
|
|
@deftypevr Macro int O_NOLINK |
|
|
If the named file is a symbolic link, open the link itself instead of |
|
|
@@ -3063,7 +3379,7 @@ |
|
|
@cindex symbolic link, opening |
|
|
@end deftypevr |
|
|
|
|
|
-@comment fcntl.h |
|
|
+@comment fcntl.h (optional) |
|
|
@comment GNU |
|
|
@deftypevr Macro int O_NOTRANS |
|
|
If the named file is specially translated, do not invoke the translator. |
|
|
@@ -3095,7 +3411,7 @@ |
|
|
The remaining operating modes are BSD extensions. They exist only |
|
|
on some systems. On other systems, these macros are not defined. |
|
|
|
|
|
-@comment fcntl.h |
|
|
+@comment fcntl.h (optional) |
|
|
@comment BSD |
|
|
@deftypevr Macro int O_SHLOCK |
|
|
Acquire a shared lock on the file, as with @code{flock}. |
|
|
@@ -3106,7 +3422,7 @@ |
|
|
the lock on the new file first. |
|
|
@end deftypevr |
|
|
|
|
|
-@comment fcntl.h |
|
|
+@comment fcntl.h (optional) |
|
|
@comment BSD |
|
|
@deftypevr Macro int O_EXLOCK |
|
|
Acquire an exclusive lock on the file, as with @code{flock}. |
|
|
@@ -3599,7 +4134,7 @@ |
|
|
@gnusystems{} can handle most input/output operations on many different |
|
|
devices and objects in terms of a few file primitives - @code{read}, |
|
|
@code{write} and @code{lseek}. However, most devices also have a few |
|
|
-peculiar operations which do not fit into this model. Such as: |
|
|
+peculiar operations which do not fit into this model. Such as: |
|
|
|
|
|
@itemize @bullet |
|
|
|
|
|
@@ -3634,6 +4169,7 @@ |
|
|
@comment sys/ioctl.h |
|
|
@comment BSD |
|
|
@deftypefun int ioctl (int @var{filedes}, int @var{command}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
The @code{ioctl} function performs the generic I/O operation |
|
|
@var{command} on @var{filedes}. |
|
|
@@ -3653,3 +4189,6 @@ |
|
|
Most IOCTLs are OS-specific and/or only used in special system utilities, |
|
|
and are thus beyond the scope of this document. For an example of the use |
|
|
of an IOCTL, see @ref{Out-of-Band Data}. |
|
|
+ |
|
|
+@c FIXME this is undocumented: |
|
|
+@c dup3 |
|
|
diff -urN glibc-2.17-c758a686/manual/locale.texi glibc-2.17-c758a686/manual/locale.texi |
|
|
--- glibc-2.17-c758a686/manual/locale.texi 2014-09-12 16:08:18.266069610 -0400 |
|
|
+++ glibc-2.17-c758a686/manual/locale.texi 2014-09-12 16:10:06.044792719 -0400 |
|
|
@@ -231,6 +231,136 @@ |
|
|
@comment locale.h |
|
|
@comment ISO |
|
|
@deftypefun {char *} setlocale (int @var{category}, const char *@var{locale}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtslocale{}} @mtsenv{}}@asunsafe{@asuinit{} @asulock{} @ascuheap{} @asucorrupt{}}@acunsafe{@acuinit{} @acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c Uses of the global locale object are unguarded in functions that |
|
|
+@c ought to be MT-Safe, so we're ruling out the use of this function |
|
|
+@c once threads are started. It takes a write lock itself, but it may |
|
|
+@c return a pointer loaded from the global locale object after releasing |
|
|
+@c the lock, or before taking it. |
|
|
+@c setlocale @mtasuconst:@mtslocale @mtsenv @asuinit @ascuheap @asulock @asucorrupt @acucorrupt @acsmem @acsfd @aculock |
|
|
+@c libc_rwlock_wrlock @asulock @aculock |
|
|
+@c libc_rwlock_unlock @aculock |
|
|
+@c getenv LOCPATH @mtsenv |
|
|
+@c malloc @ascuheap @acsmem |
|
|
+@c free @ascuheap @acsmem |
|
|
+@c new_composite_name ok |
|
|
+@c setdata ok |
|
|
+@c setname ok |
|
|
+@c _nl_find_locale @mtsenv @asuinit @ascuheap @asulock @asucorrupt @acucorrupt @acsmem @acsfd @aculock |
|
|
+@c getenv LC_ALL and LANG @mtsenv |
|
|
+@c _nl_load_locale_from_archive @ascuheap @acucorrupt @acsmem @acsfd |
|
|
+@c sysconf _SC_PAGE_SIZE ok |
|
|
+@c _nl_normalize_codeset @ascuheap @acsmem |
|
|
+@c isalnum_l ok (C locale) |
|
|
+@c isdigit_l ok (C locale) |
|
|
+@c malloc @ascuheap @acsmem |
|
|
+@c tolower_l ok (C locale) |
|
|
+@c open_not_cancel_2 @acsfd |
|
|
+@c fxstat64 ok |
|
|
+@c close_not_cancel_no_status ok |
|
|
+@c __mmap64 @acsmem |
|
|
+@c calculate_head_size ok |
|
|
+@c __munmap ok |
|
|
+@c compute_hashval ok |
|
|
+@c qsort dup @acucorrupt |
|
|
+@c rangecmp ok |
|
|
+@c malloc @ascuheap @acsmem |
|
|
+@c strdup @ascuheap @acsmem |
|
|
+@c _nl_intern_locale_data @ascuheap @acsmem |
|
|
+@c malloc @ascuheap @acsmem |
|
|
+@c free @ascuheap @acsmem |
|
|
+@c _nl_expand_alias @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c bsearch ok |
|
|
+@c alias_compare ok |
|
|
+@c strcasecmp ok |
|
|
+@c read_alias_file @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c fopen @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c fsetlocking ok |
|
|
+@c feof_unlocked ok |
|
|
+@c fgets_unlocked ok |
|
|
+@c isspace ok (locale mutex is locked) |
|
|
+@c extend_alias_table @ascuheap @acsmem |
|
|
+@c realloc @ascuheap @acsmem |
|
|
+@c realloc @ascuheap @acsmem |
|
|
+@c fclose @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c qsort @ascuheap @acsmem |
|
|
+@c alias_compare dup |
|
|
+@c libc_lock_unlock @aculock |
|
|
+@c _nl_explode_name @ascuheap @acsmem |
|
|
+@c _nl_find_language ok |
|
|
+@c _nl_normalize_codeset dup @ascuheap @acsmem |
|
|
+@c _nl_make_l10nflist @ascuheap @acsmem |
|
|
+@c malloc @ascuheap @acsmem |
|
|
+@c free @ascuheap @acsmem |
|
|
+@c __argz_stringify ok |
|
|
+@c __argz_count ok |
|
|
+@c __argz_next ok |
|
|
+@c _nl_load_locale @ascuheap @acsmem @acsfd |
|
|
+@c open_not_cancel_2 @acsfd |
|
|
+@c __fxstat64 ok |
|
|
+@c close_not_cancel_no_status ok |
|
|
+@c mmap @acsmem |
|
|
+@c malloc @ascuheap @acsmem |
|
|
+@c read_not_cancel ok |
|
|
+@c free @ascuheap @acsmem |
|
|
+@c _nl_intern_locale_data dup @ascuheap @acsmem |
|
|
+@c munmap ok |
|
|
+@c __gconv_compare_alias @asuinit @ascuheap @asucorrupt @asulock @acsmem@acucorrupt @acsfd @aculock |
|
|
+@c __gconv_read_conf @asuinit @ascuheap @asucorrupt @asulock @acsmem@acucorrupt @acsfd @aculock |
|
|
+@c (libc_once-initializes gconv_cache and gconv_path_envvar; they're |
|
|
+@c never modified afterwards) |
|
|
+@c __gconv_load_cache @ascuheap @acsmem @acsfd |
|
|
+@c getenv GCONV_PATH @mtsenv |
|
|
+@c open_not_cancel @acsfd |
|
|
+@c __fxstat64 ok |
|
|
+@c close_not_cancel_no_status ok |
|
|
+@c mmap @acsmem |
|
|
+@c malloc @ascuheap @acsmem |
|
|
+@c __read ok |
|
|
+@c free @ascuheap @acsmem |
|
|
+@c munmap ok |
|
|
+@c __gconv_get_path @asulock @ascuheap @aculock @acsmem @acsfd |
|
|
+@c getcwd @ascuheap @acsmem @acsfd |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c malloc @ascuheap @acsmem |
|
|
+@c strtok_r ok |
|
|
+@c libc_lock_unlock @aculock |
|
|
+@c read_conf_file @ascuheap @asucorrupt @asulock @acsmem @acucorrupt @acsfd @aculock |
|
|
+@c fopen @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c fsetlocking ok |
|
|
+@c feof_unlocked ok |
|
|
+@c getdelim @ascuheap @asucorrupt @acsmem @acucorrupt |
|
|
+@c isspace_l ok (C locale) |
|
|
+@c add_alias |
|
|
+@c isspace_l ok (C locale) |
|
|
+@c toupper_l ok (C locale) |
|
|
+@c add_alias2 dup @ascuheap @acucorrupt @acsmem |
|
|
+@c add_module @ascuheap @acsmem |
|
|
+@c isspace_l ok (C locale) |
|
|
+@c toupper_l ok (C locale) |
|
|
+@c strtol ok (@mtslocale but we hold the locale lock) |
|
|
+@c tfind __gconv_alias_db ok |
|
|
+@c __gconv_alias_compare dup ok |
|
|
+@c calloc @ascuheap @acsmem |
|
|
+@c insert_module dup @ascuheap |
|
|
+@c __tfind ok (because the tree is read only by then) |
|
|
+@c __gconv_alias_compare dup ok |
|
|
+@c insert_module @ascuheap |
|
|
+@c free @ascuheap |
|
|
+@c add_alias2 @ascuheap @acucorrupt @acsmem |
|
|
+@c detect_conflict ok, reads __gconv_modules_db |
|
|
+@c malloc @ascuheap @acsmem |
|
|
+@c tsearch __gconv_alias_db @ascuheap @acucorrupt @acsmem [exclusive tree, no @mtsrace] |
|
|
+@c __gconv_alias_compare ok |
|
|
+@c free @ascuheap |
|
|
+@c __gconv_compare_alias_cache ok |
|
|
+@c find_module_idx ok |
|
|
+@c do_lookup_alias ok |
|
|
+@c __tfind ok (because the tree is read only by then) |
|
|
+@c __gconv_alias_compare ok |
|
|
+@c strndup @ascuheap @acsmem |
|
|
+@c strcasecmp_l ok (C locale) |
|
|
The function @code{setlocale} sets the current locale for category |
|
|
@var{category} to @var{locale}. |
|
|
|
|
|
@@ -496,6 +626,10 @@ |
|
|
@comment locale.h |
|
|
@comment ISO |
|
|
@deftypefun {struct lconv *} localeconv (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:localeconv} @mtslocale{}}@asunsafe{}@acsafe{}} |
|
|
+@c This function reads from multiple components of the locale object, |
|
|
+@c without synchronization, while writing to the static buffer it uses |
|
|
+@c as the return value. |
|
|
The @code{localeconv} function returns a pointer to a structure whose |
|
|
components contain information about how numeric and monetary values |
|
|
should be formatted in the current locale. |
|
|
@@ -762,6 +896,9 @@ |
|
|
@comment langinfo.h |
|
|
@comment XOPEN |
|
|
@deftypefun {char *} nl_langinfo (nl_item @var{item}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c It calls _nl_langinfo_l with the current locale, which returns a |
|
|
+@c pointer into constant strings defined in locale data structures. |
|
|
The @code{nl_langinfo} function can be used to access individual |
|
|
elements of the locale categories. Unlike the @code{localeconv} |
|
|
function, which returns all the information, @code{nl_langinfo} |
|
|
@@ -1056,6 +1193,11 @@ |
|
|
numbers according to these rules. |
|
|
|
|
|
@deftypefun ssize_t strfmon (char *@var{s}, size_t @var{maxsize}, const char *@var{format}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c It (and strfmon_l) both call vstrfmon_l, which, besides accessing the |
|
|
+@c locale object passed to it, accesses the active locale through |
|
|
+@c isdigit (but to_digit assumes ASCII digits only). It may call |
|
|
+@c __printf_fp (@mtslocale @ascuheap @acsmem) and guess_grouping (safe). |
|
|
The @code{strfmon} function is similar to the @code{strftime} function |
|
|
in that it takes a buffer, its size, a format string, |
|
|
and values to write into the buffer as text in a form specified |
|
|
@@ -1267,6 +1409,10 @@ |
|
|
@comment GNU |
|
|
@comment stdlib.h |
|
|
@deftypefun int rpmatch (const char *@var{response}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c Calls nl_langinfo with YESEXPR and NOEXPR, triggering @mtslocale but |
|
|
+@c it's regcomp and regexec that bring in all of the safety issues. |
|
|
+@c regfree is also called, but it doesn't introduce any further issues. |
|
|
The function @code{rpmatch} checks the string in @var{response} whether |
|
|
or not it is a correct yes-or-no answer and if yes, which one. The |
|
|
check uses the @code{YESEXPR} and @code{NOEXPR} data in the |
|
|
@@ -1318,5 +1464,5 @@ |
|
|
free (line); |
|
|
@end smallexample |
|
|
|
|
|
-Note that the loop continues until an read error is detected or until a |
|
|
+Note that the loop continues until a read error is detected or until a |
|
|
definitive (positive or negative) answer is read. |
|
|
diff -urN glibc-2.17-c758a686/manual/macros.texi glibc-2.17-c758a686/manual/macros.texi |
|
|
--- glibc-2.17-c758a686/manual/macros.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/macros.texi 2014-09-12 16:10:06.045792717 -0400 |
|
|
@@ -35,16 +35,225 @@ |
|
|
GNU/Linux and GNU/Hurd systems |
|
|
@end macro |
|
|
|
|
|
-@c Descrption applying to GNU/Hurd systems; that is, systems using the |
|
|
+@c Description applying to GNU/Hurd systems; that is, systems using the |
|
|
@c GNU Hurd with the GNU C Library. |
|
|
@macro gnuhurdsystems |
|
|
GNU/Hurd systems |
|
|
@end macro |
|
|
|
|
|
-@c Descrption applying to GNU/Linux systems; that is, systems using |
|
|
+@c Description applying to GNU/Linux systems; that is, systems using |
|
|
@c the Linux kernel with the GNU C Library. |
|
|
@macro gnulinuxsystems |
|
|
GNU/Linux systems |
|
|
@end macro |
|
|
|
|
|
+@c Document the safety functions as preliminary. It does NOT expand its |
|
|
+@c comments. |
|
|
+@macro prelim {comments} |
|
|
+Preliminary: |
|
|
+ |
|
|
+@end macro |
|
|
+@c Document a function as thread safe. |
|
|
+@macro mtsafe {comments} |
|
|
+| MT-Safe \comments\ |
|
|
+ |
|
|
+@end macro |
|
|
+@c Document a function as thread unsafe. |
|
|
+@macro mtunsafe {comments} |
|
|
+| MT-Unsafe \comments\ |
|
|
+ |
|
|
+@end macro |
|
|
+@c Document a function as safe for use in asynchronous signal handlers. |
|
|
+@macro assafe {comments} |
|
|
+| AS-Safe \comments\ |
|
|
+ |
|
|
+@end macro |
|
|
+@c Document a function as unsafe for use in asynchronous signal |
|
|
+@c handlers. This distinguishes unmarked functions, for which this |
|
|
+@c property has not been assessed, from those that have been analyzed. |
|
|
+@macro asunsafe {comments} |
|
|
+| AS-Unsafe \comments\ |
|
|
+ |
|
|
+@end macro |
|
|
+@c Document a function as safe for use when asynchronous cancellation is |
|
|
+@c enabled. |
|
|
+@macro acsafe {comments} |
|
|
+| AC-Safe \comments\ |
|
|
+ |
|
|
+@end macro |
|
|
+@c Document a function as unsafe for use when asynchronous cancellation |
|
|
+@c is enabled. This distinguishes unmarked functions, for which this |
|
|
+@c property has not been assessed, from those that have been analyzed. |
|
|
+@macro acunsafe {comments} |
|
|
+| AC-Unsafe \comments\ |
|
|
+ |
|
|
+@end macro |
|
|
+@c Format safety properties without referencing the section of the |
|
|
+@c definitions. To be used in the definitions of the properties |
|
|
+@c themselves. |
|
|
+@macro sampsafety {notes} |
|
|
+@noindent |
|
|
+\notes\| |
|
|
+ |
|
|
+ |
|
|
+@end macro |
|
|
+@c Format the safety properties of a function. |
|
|
+@macro safety {notes} |
|
|
+\notes\| @xref{POSIX Safety Concepts}. |
|
|
+ |
|
|
+ |
|
|
+@end macro |
|
|
+@c Function is MT- and AS-Unsafe due to an internal race. |
|
|
+@macro mtasurace {comments} |
|
|
+race\comments\ |
|
|
+@end macro |
|
|
+@c Function is AS-Unsafe due to an internal race. |
|
|
+@macro asurace {comments} |
|
|
+race\comments\ |
|
|
+@end macro |
|
|
+@c Function is MT-Safe, but with potential race on user-supplied object |
|
|
+@c of opaque type. |
|
|
+@macro mtsrace {comments} |
|
|
+race\comments\ |
|
|
+@end macro |
|
|
+@c Function is MT- and AS-Unsafe for modifying an object that is decreed |
|
|
+@c MT-constant due to MT-Unsafe accesses elsewhere. |
|
|
+@macro mtasuconst {comments} |
|
|
+const\comments\ |
|
|
+@end macro |
|
|
+@c Function accesses the assumed-constant locale object. |
|
|
+@macro mtslocale {comments} |
|
|
+locale\comments\ |
|
|
+@end macro |
|
|
+@c Function accesses the assumed-constant environment. |
|
|
+@macro mtsenv {comments} |
|
|
+env\comments\ |
|
|
+@end macro |
|
|
+@c Function accesses the assumed-constant hostid. |
|
|
+@macro mtshostid {comments} |
|
|
+hostid\comments\ |
|
|
+@end macro |
|
|
+@c Function accesses the assumed-constant _sigintr variable. |
|
|
+@macro mtssigintr {comments} |
|
|
+sigintr\comments\ |
|
|
+@end macro |
|
|
+@c Function performs MT-Unsafe initialization at the first call. |
|
|
+@macro mtuinit {comments} |
|
|
+init\comments\ |
|
|
+@end macro |
|
|
+@c Function performs libc_once AS-Unsafe initialization. |
|
|
+@macro asuinit {comments} |
|
|
+init\comments\ |
|
|
+@end macro |
|
|
+@c Function performs libc_once AC-Unsafe initialization. |
|
|
+@macro acuinit {comments} |
|
|
+init\comments\ |
|
|
+@end macro |
|
|
+@c Function is AS-Unsafe because it takes a non-recursive mutex that may |
|
|
+@c already be held by the function interrupted by the signal. |
|
|
+@macro asulock {comments} |
|
|
+lock\comments\ |
|
|
+@end macro |
|
|
+@c Function is AC-Unsafe because it may fail to release a mutex. |
|
|
+@macro aculock {comments} |
|
|
+lock\comments\ |
|
|
+@end macro |
|
|
+@c Function is AS-Unsafe because some data structure may be inconsistent |
|
|
+@c due to an ongoing updated interrupted by a signal. |
|
|
+@macro asucorrupt {comments} |
|
|
+corrupt\comments\ |
|
|
+@end macro |
|
|
+@c Function is AC-Unsafe because some data structure may be left |
|
|
+@c inconsistent when cancelled. |
|
|
+@macro acucorrupt {comments} |
|
|
+corrupt\comments\ |
|
|
+@end macro |
|
|
+@c Function is AS- and AC-Unsafe because of malloc/free. |
|
|
+@macro ascuheap {comments} |
|
|
+heap\comments\ |
|
|
+@end macro |
|
|
+@c Function is AS-Unsafe because of malloc/free. |
|
|
+@macro asuheap {comments} |
|
|
+heap\comments\ |
|
|
+@end macro |
|
|
+@c Function is AS- and AC-Unsafe because of dlopen/dlclose. |
|
|
+@macro ascudlopen {comments} |
|
|
+dlopen\comments\ |
|
|
+@end macro |
|
|
+@c Function is AS- and AC-Unsafe because of unknown plugins. |
|
|
+@macro ascuplugin {comments} |
|
|
+plugin\comments\ |
|
|
+@end macro |
|
|
+@c Function is AS- and AC-Unsafe because of i18n. |
|
|
+@macro ascuintl {comments} |
|
|
+i18n\comments\ |
|
|
+@end macro |
|
|
+@c Function is AS--Unsafe because of i18n. |
|
|
+@macro asuintl {comments} |
|
|
+i18n\comments\ |
|
|
+@end macro |
|
|
+@c Function may leak file descriptors if async-cancelled. |
|
|
+@macro acsfd {comments} |
|
|
+fd\comments\ |
|
|
+@end macro |
|
|
+@c Function may leak memory if async-cancelled. |
|
|
+@macro acsmem {comments} |
|
|
+mem\comments\ |
|
|
+@end macro |
|
|
+@c Function is unsafe due to temporary overriding a signal handler. |
|
|
+@macro mtascusig {comments} |
|
|
+sig\comments\ |
|
|
+@end macro |
|
|
+@c Function is MT- and AS-Unsafe due to temporarily changing attributes |
|
|
+@c of the controlling terminal. |
|
|
+@macro mtasuterm {comments} |
|
|
+term\comments\ |
|
|
+@end macro |
|
|
+@c Function is AC-Unsafe for failing to restore attributes of the |
|
|
+@c controlling terminal. |
|
|
+@macro acuterm {comments} |
|
|
+term\comments\ |
|
|
+@end macro |
|
|
+@c Function sets timers atomically. |
|
|
+@macro mtstimer {comments} |
|
|
+timer\comments\ |
|
|
+@end macro |
|
|
+@c Function sets and restores timers. |
|
|
+@macro mtascutimer {comments} |
|
|
+timer\comments\ |
|
|
+@end macro |
|
|
+@c Function temporarily changes the current working directory. |
|
|
+@macro mtasscwd {comments} |
|
|
+cwd\comments\ |
|
|
+@end macro |
|
|
+@c Function may fail to restore to the original current working |
|
|
+@c directory after temporarily changing it. |
|
|
+@macro acscwd {comments} |
|
|
+cwd\comments\ |
|
|
+@end macro |
|
|
+@c Function is MT-Safe while POSIX says it needn't be MT-Safe. |
|
|
+@macro mtsposix {comments} |
|
|
+!posix\comments\ |
|
|
+@end macro |
|
|
+@c Function is MT-Unsafe while POSIX says it should be MT-Safe. |
|
|
+@macro mtuposix {comments} |
|
|
+!posix\comments\ |
|
|
+@end macro |
|
|
+@c Function is AS-Safe while POSIX says it needn't be AS-Safe. |
|
|
+@macro assposix {comments} |
|
|
+!posix\comments\ |
|
|
+@end macro |
|
|
+@c Function is AS-Unsafe while POSIX says it should be AS-Safe. |
|
|
+@macro asuposix {comments} |
|
|
+!posix\comments\ |
|
|
+@end macro |
|
|
+@c Function is AC-Safe while POSIX says it needn't be AC-Safe. |
|
|
+@macro acsposix {comments} |
|
|
+!posix\comments\ |
|
|
+@end macro |
|
|
+@c Function is AC-Unsafe while POSIX says it should be AC-Safe. |
|
|
+@macro acuposix {comments} |
|
|
+!posix\comments\ |
|
|
+@end macro |
|
|
+ |
|
|
@end ifclear |
|
|
diff -urN glibc-2.17-c758a686/manual/maint.texi glibc-2.17-c758a686/manual/maint.texi |
|
|
--- glibc-2.17-c758a686/manual/maint.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/maint.texi 2014-09-12 16:10:06.045792717 -0400 |
|
|
@@ -316,7 +316,7 @@ |
|
|
The top-level @file{configure} script uses the shell @code{.} command to |
|
|
read the @file{configure} file in each system-dependent directory |
|
|
chosen, in order. The @file{configure} files are often generated from |
|
|
-@file{configure.in} files using Autoconf. |
|
|
+@file{configure.ac} files using Autoconf. |
|
|
|
|
|
A system-dependent @file{configure} script will usually add things to |
|
|
the shell variables @samp{DEFS} and @samp{config_vars}; see the |
|
|
@@ -329,14 +329,14 @@ |
|
|
just @w{@samp{--with-@var{package}}} (no argument), then it sets |
|
|
@w{@samp{with_@var{package}}} to @samp{yes}. |
|
|
|
|
|
-@item configure.in |
|
|
+@item configure.ac |
|
|
|
|
|
This file is an Autoconf input fragment to be processed into the file |
|
|
@file{configure} in this subdirectory. @xref{Introduction,,, |
|
|
autoconf.info, Autoconf: Generating Automatic Configuration Scripts}, |
|
|
for a description of Autoconf. You should write either @file{configure} |
|
|
-or @file{configure.in}, but not both. The first line of |
|
|
-@file{configure.in} should invoke the @code{m4} macro |
|
|
+or @file{configure.ac}, but not both. The first line of |
|
|
+@file{configure.ac} should invoke the @code{m4} macro |
|
|
@samp{GLIBC_PROVIDES}. This macro does several @code{AC_PROVIDE} calls |
|
|
for Autoconf macros which are used by the top-level @file{configure} |
|
|
script; without this, those macros might be invoked again unnecessarily |
|
|
@@ -424,7 +424,7 @@ |
|
|
files specific to those machine architectures, but not specific to any |
|
|
particular operating system. There might be subdirectories for |
|
|
specializations of those architectures, such as |
|
|
-@w{@file{sysdeps/m68k/68020}}. Code which is specific to the |
|
|
+@w{@file{sysdeps/m68k/68020}}. Code which is specific to the |
|
|
floating-point coprocessor used with a particular machine should go in |
|
|
@w{@file{sysdeps/@var{machine}/fpu}}. |
|
|
|
|
|
diff -urN glibc-2.17-c758a686/manual/Makefile glibc-2.17-c758a686/manual/Makefile |
|
|
--- glibc-2.17-c758a686/manual/Makefile 2014-09-12 16:08:17.823070748 -0400 |
|
|
+++ glibc-2.17-c758a686/manual/Makefile 2014-09-12 16:10:06.045792717 -0400 |
|
|
@@ -1,5 +1,4 @@ |
|
|
-# Copyright (C) 1992-2012 |
|
|
-# Free Software Foundation, Inc. |
|
|
+# Copyright (C) 1992-2014 Free Software Foundation, Inc. |
|
|
# This file is part of the GNU C Library. |
|
|
|
|
|
# The GNU C Library is free software; you can redistribute it and/or |
|
|
@@ -20,14 +19,10 @@ |
|
|
|
|
|
subdir := manual |
|
|
|
|
|
-# Allow override |
|
|
-INSTALL_INFO = install-info |
|
|
+include ../Makeconfig |
|
|
|
|
|
.PHONY: dvi pdf info html |
|
|
|
|
|
-# Get glibc's configuration info. |
|
|
-include ../Makeconfig |
|
|
- |
|
|
dvi: $(objpfx)libc.dvi |
|
|
pdf: $(objpfx)libc.pdf |
|
|
|
|
|
@@ -42,8 +37,8 @@ |
|
|
intro errno memory ctype string charset locale \ |
|
|
message search pattern io stdio llio filesys \ |
|
|
pipe socket terminal syslog math arith time \ |
|
|
- resource setjmp signal startup process job nss \ |
|
|
- users sysinfo conf crypt debug probes) |
|
|
+ resource setjmp signal startup process ipc job \ |
|
|
+ nss users sysinfo conf crypt debug threads probes) |
|
|
add-chapters = $(wildcard $(foreach d, $(add-ons), ../$d/$d.texi)) |
|
|
appendices = lang.texi header.texi install.texi maint.texi platform.texi \ |
|
|
contrib.texi |
|
|
@@ -89,6 +84,7 @@ |
|
|
$(objpfx)summary.texi: $(objpfx)stamp-summary ; |
|
|
$(objpfx)stamp-summary: summary.awk $(filter-out $(objpfx)summary.texi, \ |
|
|
$(texis-path)) |
|
|
+ -$(SHELL) ./check-safety.sh $(filter-out $(objpfx)%, $(texis-path)) |
|
|
$(AWK) -f $^ | sort -t'' -df -k 1,1 | tr '\014' '\012' \ |
|
|
> $(objpfx)summary-tmp |
|
|
$(move-if-change) $(objpfx)summary-tmp $(objpfx)summary.texi |
|
|
@@ -145,8 +141,7 @@ |
|
|
mv -f $@.new $@ |
|
|
|
|
|
$(objpfx)%.info: %.texinfo |
|
|
- LANGUAGE=C LC_ALL=C $(MAKEINFO) -P $(objpfx) --output=`basename $@` $< |
|
|
- mv `basename $@`* $(objpfx) |
|
|
+ LANGUAGE=C LC_ALL=C $(MAKEINFO) -P $(objpfx) --output=$@ $< |
|
|
|
|
|
$(objpfx)%.dvi: %.texinfo |
|
|
cd $(objpfx);$(TEXI2DVI) -I $(shell cd $(<D) && pwd) --output=$@ \ |
|
|
@@ -159,19 +154,19 @@ |
|
|
|
|
|
# Distribution. |
|
|
minimal-dist = summary.awk texis.awk tsort.awk libc-texinfo.sh libc.texinfo \ |
|
|
- libm-err.texi stamp-libm-err \ |
|
|
+ libm-err.texi stamp-libm-err check-safety.sh \ |
|
|
$(filter-out summary.texi, $(nonexamples)) \ |
|
|
$(patsubst %.c.texi,examples/%.c, $(examples)) |
|
|
|
|
|
indices = cp fn pg tp vr ky |
|
|
-generated-dirs := libc |
|
|
-generated = libc.dvi libc.pdf libc.tmp libc.info* \ |
|
|
- stubs \ |
|
|
- texis summary.texi stamp-summary *.c.texi \ |
|
|
- $(foreach index,$(indices),libc.$(index) libc.$(index)s) \ |
|
|
- libc.log libc.aux libc.toc \ |
|
|
- $(libc-texi-generated) \ |
|
|
- stamp-libm-err stamp-version |
|
|
+generated-dirs += libc |
|
|
+generated += libc.dvi libc.pdf libc.tmp libc.info* \ |
|
|
+ stubs \ |
|
|
+ texis summary.texi stamp-summary *.c.texi \ |
|
|
+ $(foreach index,$(indices),libc.$(index) libc.$(index)s) \ |
|
|
+ libc.log libc.aux libc.toc \ |
|
|
+ $(libc-texi-generated) \ |
|
|
+ stamp-libm-err stamp-version |
|
|
|
|
|
include ../Rules |
|
|
|
|
|
diff -urN glibc-2.17-c758a686/manual/math.texi glibc-2.17-c758a686/manual/math.texi |
|
|
--- glibc-2.17-c758a686/manual/math.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/math.texi 2014-09-12 16:10:06.043792722 -0400 |
|
|
@@ -157,6 +157,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} sinl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the sine of @var{x}, where @var{x} is given in |
|
|
radians. The return value is in the range @code{-1} to @code{1}. |
|
|
@end deftypefun |
|
|
@@ -170,6 +171,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} cosl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the cosine of @var{x}, where @var{x} is given in |
|
|
radians. The return value is in the range @code{-1} to @code{1}. |
|
|
@end deftypefun |
|
|
@@ -183,6 +185,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} tanl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the tangent of @var{x}, where @var{x} is given in |
|
|
radians. |
|
|
|
|
|
@@ -205,6 +208,7 @@ |
|
|
@comment math.h |
|
|
@comment GNU |
|
|
@deftypefunx void sincosl (long double @var{x}, long double *@var{sinx}, long double *@var{cosx}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the sine of @var{x} in @code{*@var{sinx}} and the |
|
|
cosine of @var{x} in @code{*@var{cos}}, where @var{x} is given in |
|
|
radians. Both values, @code{*@var{sinx}} and @code{*@var{cosx}}, are in |
|
|
@@ -233,6 +237,9 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} csinl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c There are calls to nan* that could trigger @mtslocale if they didn't get |
|
|
+@c empty strings. |
|
|
These functions return the complex sine of @var{z}. |
|
|
The mathematical definition of the complex sine is |
|
|
|
|
|
@@ -253,6 +260,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} ccosl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the complex cosine of @var{z}. |
|
|
The mathematical definition of the complex cosine is |
|
|
|
|
|
@@ -273,6 +281,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} ctanl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the complex tangent of @var{z}. |
|
|
The mathematical definition of the complex tangent is |
|
|
|
|
|
@@ -307,6 +316,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} asinl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions compute the arc sine of @var{x}---that is, the value whose |
|
|
sine is @var{x}. The value is in units of radians. Mathematically, |
|
|
there are infinitely many such values; the one actually returned is the |
|
|
@@ -326,6 +336,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} acosl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions compute the arc cosine of @var{x}---that is, the value |
|
|
whose cosine is @var{x}. The value is in units of radians. |
|
|
Mathematically, there are infinitely many such values; the one actually |
|
|
@@ -345,6 +356,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} atanl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions compute the arc tangent of @var{x}---that is, the value |
|
|
whose tangent is @var{x}. The value is in units of radians. |
|
|
Mathematically, there are infinitely many such values; the one actually |
|
|
@@ -360,6 +372,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} atan2l (long double @var{y}, long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function computes the arc tangent of @var{y}/@var{x}, but the signs |
|
|
of both arguments are used to determine the quadrant of the result, and |
|
|
@var{x} is permitted to be zero. The return value is given in radians |
|
|
@@ -388,6 +401,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} casinl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions compute the complex arc sine of @var{z}---that is, the |
|
|
value whose sine is @var{z}. The value returned is in radians. |
|
|
|
|
|
@@ -404,6 +418,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} cacosl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions compute the complex arc cosine of @var{z}---that is, the |
|
|
value whose cosine is @var{z}. The value returned is in radians. |
|
|
|
|
|
@@ -421,6 +436,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} catanl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions compute the complex arc tangent of @var{z}---that is, |
|
|
the value whose tangent is @var{z}. The value is in units of radians. |
|
|
@end deftypefun |
|
|
@@ -441,6 +457,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} expl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions compute @code{e} (the base of natural logarithms) raised |
|
|
to the power @var{x}. |
|
|
|
|
|
@@ -457,6 +474,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} exp2l (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions compute @code{2} raised to the power @var{x}. |
|
|
Mathematically, @code{exp2 (x)} is the same as @code{exp (x * log (2))}. |
|
|
@end deftypefun |
|
|
@@ -479,6 +497,7 @@ |
|
|
@comment math.h |
|
|
@comment GNU |
|
|
@deftypefunx {long double} pow10l (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions compute @code{10} raised to the power @var{x}. |
|
|
Mathematically, @code{exp10 (x)} is the same as @code{exp (x * log (10))}. |
|
|
|
|
|
@@ -496,6 +515,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} logl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions compute the natural logarithm of @var{x}. @code{exp (log |
|
|
(@var{x}))} equals @var{x}, exactly in mathematics and approximately in |
|
|
C. |
|
|
@@ -514,6 +534,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} log10l (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the base-10 logarithm of @var{x}. |
|
|
@code{log10 (@var{x})} equals @code{log (@var{x}) / log (10)}. |
|
|
|
|
|
@@ -528,6 +549,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} log2l (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the base-2 logarithm of @var{x}. |
|
|
@code{log2 (@var{x})} equals @code{log (@var{x}) / log (2)}. |
|
|
@end deftypefun |
|
|
@@ -541,6 +563,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} logbl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions extract the exponent of @var{x} and return it as a |
|
|
floating-point value. If @code{FLT_RADIX} is two, @code{logb} is equal |
|
|
to @code{floor (log2 (x))}, except it's probably faster. |
|
|
@@ -560,6 +583,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx int ilogbl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions are equivalent to the corresponding @code{logb} |
|
|
functions except that they return signed integer values. |
|
|
@end deftypefun |
|
|
@@ -619,6 +643,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} powl (long double @var{base}, long double @var{power}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These are general exponentiation functions, returning @var{base} raised |
|
|
to @var{power}. |
|
|
|
|
|
@@ -638,6 +663,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} sqrtl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the nonnegative square root of @var{x}. |
|
|
|
|
|
If @var{x} is negative, @code{sqrt} signals a domain error. |
|
|
@@ -654,6 +680,7 @@ |
|
|
@comment math.h |
|
|
@comment BSD |
|
|
@deftypefunx {long double} cbrtl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the cube root of @var{x}. They cannot |
|
|
fail; every representable real value has a representable real cube root. |
|
|
@end deftypefun |
|
|
@@ -667,6 +694,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} hypotl (long double @var{x}, long double @var{y}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return @code{sqrt (@var{x}*@var{x} + |
|
|
@var{y}*@var{y})}. This is the length of the hypotenuse of a right |
|
|
triangle with sides of length @var{x} and @var{y}, or the distance |
|
|
@@ -684,6 +712,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} expm1l (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return a value equivalent to @code{exp (@var{x}) - 1}. |
|
|
They are computed in a way that is accurate even if @var{x} is |
|
|
near zero---a case where @code{exp (@var{x}) - 1} would be inaccurate owing |
|
|
@@ -699,6 +728,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} log1pl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions returns a value equivalent to @w{@code{log (1 + @var{x})}}. |
|
|
They are computed in a way that is accurate even if @var{x} is |
|
|
near zero. |
|
|
@@ -719,6 +749,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} cexpl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return @code{e} (the base of natural |
|
|
logarithms) raised to the power of @var{z}. |
|
|
Mathematically, this corresponds to the value |
|
|
@@ -740,6 +771,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} clogl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the natural logarithm of @var{z}. |
|
|
Mathematically, this corresponds to the value |
|
|
|
|
|
@@ -766,8 +798,9 @@ |
|
|
@comment complex.h |
|
|
@comment GNU |
|
|
@deftypefunx {complex long double} clog10l (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the base 10 logarithm of the complex value |
|
|
-@var{z}. Mathematically, this corresponds to the value |
|
|
+@var{z}. Mathematically, this corresponds to the value |
|
|
|
|
|
@ifnottex |
|
|
@math{log (z) = log10 (cabs (z)) + I * carg (z)} |
|
|
@@ -788,6 +821,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} csqrtl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the complex square root of the argument @var{z}. Unlike |
|
|
the real-valued functions, they are defined for all values of @var{z}. |
|
|
@end deftypefun |
|
|
@@ -801,6 +835,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} cpowl (complex long double @var{base}, complex long double @var{power}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return @var{base} raised to the power of |
|
|
@var{power}. This is equivalent to @w{@code{cexp (y * clog (x))}} |
|
|
@end deftypefun |
|
|
@@ -821,6 +856,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} sinhl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the hyperbolic sine of @var{x}, defined |
|
|
mathematically as @w{@code{(exp (@var{x}) - exp (-@var{x})) / 2}}. They |
|
|
may signal overflow if @var{x} is too large. |
|
|
@@ -835,6 +871,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} coshl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These function return the hyperbolic cosine of @var{x}, |
|
|
defined mathematically as @w{@code{(exp (@var{x}) + exp (-@var{x})) / 2}}. |
|
|
They may signal overflow if @var{x} is too large. |
|
|
@@ -849,6 +886,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} tanhl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the hyperbolic tangent of @var{x}, |
|
|
defined mathematically as @w{@code{sinh (@var{x}) / cosh (@var{x})}}. |
|
|
They may signal overflow if @var{x} is too large. |
|
|
@@ -868,6 +906,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} csinhl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the complex hyperbolic sine of @var{z}, defined |
|
|
mathematically as @w{@code{(exp (@var{z}) - exp (-@var{z})) / 2}}. |
|
|
@end deftypefun |
|
|
@@ -881,6 +920,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} ccoshl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the complex hyperbolic cosine of @var{z}, defined |
|
|
mathematically as @w{@code{(exp (@var{z}) + exp (-@var{z})) / 2}}. |
|
|
@end deftypefun |
|
|
@@ -894,6 +934,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} ctanhl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the complex hyperbolic tangent of @var{z}, |
|
|
defined mathematically as @w{@code{csinh (@var{z}) / ccosh (@var{z})}}. |
|
|
@end deftypefun |
|
|
@@ -910,6 +951,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} asinhl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the inverse hyperbolic sine of @var{x}---the |
|
|
value whose hyperbolic sine is @var{x}. |
|
|
@end deftypefun |
|
|
@@ -923,6 +965,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} acoshl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the inverse hyperbolic cosine of @var{x}---the |
|
|
value whose hyperbolic cosine is @var{x}. If @var{x} is less than |
|
|
@code{1}, @code{acosh} signals a domain error. |
|
|
@@ -937,6 +980,7 @@ |
|
|
@comment math.h |
|
|
@comment ISO |
|
|
@deftypefunx {long double} atanhl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the inverse hyperbolic tangent of @var{x}---the |
|
|
value whose hyperbolic tangent is @var{x}. If the absolute value of |
|
|
@var{x} is greater than @code{1}, @code{atanh} signals a domain error; |
|
|
@@ -954,6 +998,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} casinhl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the inverse complex hyperbolic sine of |
|
|
@var{z}---the value whose complex hyperbolic sine is @var{z}. |
|
|
@end deftypefun |
|
|
@@ -967,6 +1012,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} cacoshl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the inverse complex hyperbolic cosine of |
|
|
@var{z}---the value whose complex hyperbolic cosine is @var{z}. Unlike |
|
|
the real-valued functions, there are no restrictions on the value of @var{z}. |
|
|
@@ -981,6 +1027,7 @@ |
|
|
@comment complex.h |
|
|
@comment ISO |
|
|
@deftypefunx {complex long double} catanhl (complex long double @var{z}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
These functions return the inverse complex hyperbolic tangent of |
|
|
@var{z}---the value whose complex hyperbolic tangent is @var{z}. Unlike |
|
|
the real-valued functions, there are no restrictions on the value of |
|
|
@@ -1005,6 +1052,7 @@ |
|
|
@comment math.h |
|
|
@comment SVID |
|
|
@deftypefunx {long double} erfl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{erf} returns the error function of @var{x}. The error |
|
|
function is defined as |
|
|
@tex |
|
|
@@ -1026,6 +1074,7 @@ |
|
|
@comment math.h |
|
|
@comment SVID |
|
|
@deftypefunx {long double} erfcl (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{erfc} returns @code{1.0 - erf(@var{x})}, but computed in a |
|
|
fashion that avoids round-off error when @var{x} is large. |
|
|
@end deftypefun |
|
|
@@ -1039,6 +1088,7 @@ |
|
|
@comment math.h |
|
|
@comment SVID |
|
|
@deftypefunx {long double} lgammal (long double @var{x}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:signgam}}@asunsafe{}@acsafe{}} |
|
|
@code{lgamma} returns the natural logarithm of the absolute value of |
|
|
the gamma function of @var{x}. The gamma function is defined as |
|
|
@tex |
|
|
@@ -1077,6 +1127,7 @@ |
|
|
@comment math.h |
|
|
@comment XPG |
|
|
@deftypefunx {long double} lgammal_r (long double @var{x}, int *@var{signp}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{lgamma_r} is just like @code{lgamma}, but it stores the sign of |
|
|
the intermediate result in the variable pointed to by @var{signp} |
|
|
instead of in the @var{signgam} global. This means it is reentrant. |
|
|
@@ -1091,6 +1142,7 @@ |
|
|
@comment math.h |
|
|
@comment SVID |
|
|
@deftypefunx {long double} gammal (long double @var{x}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:signgam}}@asunsafe{}@acsafe{}} |
|
|
These functions exist for compatibility reasons. They are equivalent to |
|
|
@code{lgamma} etc. It is better to use @code{lgamma} since for one the |
|
|
name reflects better the actual computation, moreover @code{lgamma} is |
|
|
@@ -1106,6 +1158,7 @@ |
|
|
@comment math.h |
|
|
@comment XPG, ISO |
|
|
@deftypefunx {long double} tgammal (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{tgamma} applies the gamma function to @var{x}. The gamma |
|
|
function is defined as |
|
|
@tex |
|
|
@@ -1129,6 +1182,7 @@ |
|
|
@comment math.h |
|
|
@comment SVID |
|
|
@deftypefunx {long double} j0l (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{j0} returns the Bessel function of the first kind of order 0 of |
|
|
@var{x}. It may signal underflow if @var{x} is too large. |
|
|
@end deftypefun |
|
|
@@ -1142,6 +1196,7 @@ |
|
|
@comment math.h |
|
|
@comment SVID |
|
|
@deftypefunx {long double} j1l (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{j1} returns the Bessel function of the first kind of order 1 of |
|
|
@var{x}. It may signal underflow if @var{x} is too large. |
|
|
@end deftypefun |
|
|
@@ -1155,6 +1210,7 @@ |
|
|
@comment math.h |
|
|
@comment SVID |
|
|
@deftypefunx {long double} jnl (int @var{n}, long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{jn} returns the Bessel function of the first kind of order |
|
|
@var{n} of @var{x}. It may signal underflow if @var{x} is too large. |
|
|
@end deftypefun |
|
|
@@ -1168,6 +1224,7 @@ |
|
|
@comment math.h |
|
|
@comment SVID |
|
|
@deftypefunx {long double} y0l (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{y0} returns the Bessel function of the second kind of order 0 of |
|
|
@var{x}. It may signal underflow if @var{x} is too large. If @var{x} |
|
|
is negative, @code{y0} signals a domain error; if it is zero, |
|
|
@@ -1183,6 +1240,7 @@ |
|
|
@comment math.h |
|
|
@comment SVID |
|
|
@deftypefunx {long double} y1l (long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{y1} returns the Bessel function of the second kind of order 1 of |
|
|
@var{x}. It may signal underflow if @var{x} is too large. If @var{x} |
|
|
is negative, @code{y1} signals a domain error; if it is zero, |
|
|
@@ -1198,6 +1256,7 @@ |
|
|
@comment math.h |
|
|
@comment SVID |
|
|
@deftypefunx {long double} ynl (int @var{n}, long double @var{x}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{yn} returns the Bessel function of the second kind of order @var{n} of |
|
|
@var{x}. It may signal underflow if @var{x} is too large. If @var{x} |
|
|
is negative, @code{yn} signals a domain error; if it is zero, |
|
|
@@ -1227,10 +1286,80 @@ |
|
|
@noindent |
|
|
where @math{p} is the number of bits in the mantissa of the |
|
|
floating-point number representation. Ideally the error for all |
|
|
-functions is always less than 0.5ulps. Using rounding bits this is also |
|
|
-possible and normally implemented for the basic operations. To achieve |
|
|
-the same for the complex math functions requires a lot more work and |
|
|
-this has not yet been done. |
|
|
+functions is always less than 0.5ulps in round-to-nearest mode. Using |
|
|
+rounding bits this is also |
|
|
+possible and normally implemented for the basic operations. Except |
|
|
+for certain functions such as @code{sqrt}, @code{fma} and @code{rint} |
|
|
+whose results are fully specified by reference to corresponding IEEE |
|
|
+754 floating-point operations, and conversions between strings and |
|
|
+floating point, @theglibc{} does not aim for correctly rounded results |
|
|
+for functions in the math library, and does not aim for correctness in |
|
|
+whether ``inexact'' exceptions are raised. Instead, the goals for |
|
|
+accuracy of functions without fully specified results are as follows; |
|
|
+some functions have bugs meaning they do not meet these goals in all |
|
|
+cases. In future, @theglibc{} may provide some other correctly |
|
|
+rounding functions under the names such as @code{crsin} proposed for |
|
|
+an extension to ISO C. |
|
|
+ |
|
|
+@itemize @bullet |
|
|
+ |
|
|
+@item |
|
|
+Each function with a floating-point result behaves as if it computes |
|
|
+an infinite-precision result that is within a few ulp (in both real |
|
|
+and complex parts, for functions with complex results) of the |
|
|
+mathematically correct value of the function (interpreted together |
|
|
+with ISO C or POSIX semantics for the function in question) at the |
|
|
+exact value passed as the input. Exceptions are raised appropriately |
|
|
+for this value and in accordance with IEEE 754 / ISO C / POSIX |
|
|
+semantics, and it is then rounded according to the current rounding |
|
|
+direction to the result that is returned to the user. @code{errno} |
|
|
+may also be set (@pxref{Math Error Reporting}). |
|
|
+ |
|
|
+@item |
|
|
+For the IBM @code{long double} format, as used on PowerPC GNU/Linux, |
|
|
+the accuracy goal is weaker for input values not exactly representable |
|
|
+in 106 bits of precision; it is as if the input value is some value |
|
|
+within 0.5ulp of the value actually passed, where ``ulp'' is |
|
|
+interpreted in terms of a fixed-precision 106-bit mantissa, but not |
|
|
+necessarily the exact value actually passed with discontiguous |
|
|
+mantissa bits. |
|
|
+ |
|
|
+@item |
|
|
+Functions behave as if the infinite-precision result computed is zero, |
|
|
+infinity or NaN if and only if that is the mathematically correct |
|
|
+infinite-precision result. They behave as if the infinite-precision |
|
|
+result computed always has the same sign as the mathematically correct |
|
|
+result. |
|
|
+ |
|
|
+@item |
|
|
+If the mathematical result is more than a few ulp above the overflow |
|
|
+threshold for the current rounding direction, the value returned is |
|
|
+the appropriate overflow value for the current rounding direction, |
|
|
+with the overflow exception raised. |
|
|
+ |
|
|
+@item |
|
|
+If the mathematical result has magnitude well below half the least |
|
|
+subnormal magnitude, the returned value is either zero or the least |
|
|
+subnormal (in each case, with the correct sign), according to the |
|
|
+current rounding direction and with the underflow exception raised. |
|
|
+ |
|
|
+@item |
|
|
+Where the mathematical result underflows and is not exactly |
|
|
+representable as a floating-point value, the underflow exception is |
|
|
+raised (so there may be spurious underflow exceptions in cases where |
|
|
+the underflowing result is exact, but not missing underflow exceptions |
|
|
+in cases where it is inexact). |
|
|
+ |
|
|
+@item |
|
|
+@Theglibc{} does not aim for functions to satisfy other properties of |
|
|
+the underlying mathematical function, such as monotonicity, where not |
|
|
+implied by the above goals. |
|
|
+ |
|
|
+@item |
|
|
+All the above applies to both real and complex parts, for complex |
|
|
+functions. |
|
|
+ |
|
|
+@end itemize |
|
|
|
|
|
Therefore many of the functions in the math library have errors. The |
|
|
table lists the maximum error for each function which is exposed by one |
|
|
@@ -1314,6 +1443,8 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun int rand (void) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c Just calls random. |
|
|
The @code{rand} function returns the next pseudo-random number in the |
|
|
series. The value ranges from @code{0} to @code{RAND_MAX}. |
|
|
@end deftypefun |
|
|
@@ -1321,6 +1452,8 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun void srand (unsigned int @var{seed}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c Alias to srandom. |
|
|
This function establishes @var{seed} as the seed for a new series of |
|
|
pseudo-random numbers. If you call @code{rand} before a seed has been |
|
|
established with @code{srand}, it uses the value @code{1} as a default |
|
|
@@ -1337,6 +1470,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int rand_r (unsigned int *@var{seed}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function returns a random number in the range 0 to @code{RAND_MAX} |
|
|
just as @code{rand} does. However, all its state is stored in the |
|
|
@var{seed} argument. This means the RNG's state can only have as many |
|
|
@@ -1363,8 +1497,11 @@ |
|
|
@comment stdlib.h |
|
|
@comment BSD |
|
|
@deftypefun {long int} random (void) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c Takes a lock and calls random_r with an automatic variable and the |
|
|
+@c global state, while holding a lock. |
|
|
This function returns the next pseudo-random number in the sequence. |
|
|
-The value returned ranges from @code{0} to @code{RAND_MAX}. |
|
|
+The value returned ranges from @code{0} to @code{2147483647}. |
|
|
|
|
|
@strong{NB:} Temporarily this function was defined to return a |
|
|
@code{int32_t} value to indicate that the return value always contains |
|
|
@@ -1376,6 +1513,11 @@ |
|
|
@comment stdlib.h |
|
|
@comment BSD |
|
|
@deftypefun void srandom (unsigned int @var{seed}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c Takes a lock and calls srandom_r with an automatic variable and a |
|
|
+@c static buffer. There's no MT-safety issue because the static buffer |
|
|
+@c is internally protected by a lock, although other threads may modify |
|
|
+@c the set state before it is used. |
|
|
The @code{srandom} function sets the state of the random number |
|
|
generator based on the integer @var{seed}. If you supply a @var{seed} value |
|
|
of @code{1}, this will cause @code{random} to reproduce the default set |
|
|
@@ -1387,7 +1529,8 @@ |
|
|
|
|
|
@comment stdlib.h |
|
|
@comment BSD |
|
|
-@deftypefun {void *} initstate (unsigned int @var{seed}, void *@var{state}, size_t @var{size}) |
|
|
+@deftypefun {char *} initstate (unsigned int @var{seed}, char *@var{state}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
The @code{initstate} function is used to initialize the random number |
|
|
generator state. The argument @var{state} is an array of @var{size} |
|
|
bytes, used to hold the state information. It is initialized based on |
|
|
@@ -1401,7 +1544,8 @@ |
|
|
|
|
|
@comment stdlib.h |
|
|
@comment BSD |
|
|
-@deftypefun {void *} setstate (void *@var{state}) |
|
|
+@deftypefun {char *} setstate (char *@var{state}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
The @code{setstate} function restores the random number state |
|
|
information @var{state}. The argument must have been the result of |
|
|
a previous call to @var{initstate} or @var{setstate}. |
|
|
@@ -1442,6 +1586,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun int random_r (struct random_data *restrict @var{buf}, int32_t *restrict @var{result}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
The @code{random_r} function behaves exactly like the @code{random} |
|
|
function except that it uses and modifies the state in the object |
|
|
pointed to by the first parameter instead of the global state. |
|
|
@@ -1450,6 +1595,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun int srandom_r (unsigned int @var{seed}, struct random_data *@var{buf}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
The @code{srandom_r} function behaves exactly like the @code{srandom} |
|
|
function except that it uses and modifies the state in the object |
|
|
pointed to by the second parameter instead of the global state. |
|
|
@@ -1458,6 +1604,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun int initstate_r (unsigned int @var{seed}, char *restrict @var{statebuf}, size_t @var{statelen}, struct random_data *restrict @var{buf}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
The @code{initstate_r} function behaves exactly like the @code{initstate} |
|
|
function except that it uses and modifies the state in the object |
|
|
pointed to by the fourth parameter instead of the global state. |
|
|
@@ -1466,6 +1613,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun int setstate_r (char *restrict @var{statebuf}, struct random_data *restrict @var{buf}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:buf}}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
The @code{setstate_r} function behaves exactly like the @code{setstate} |
|
|
function except that it uses and modifies the state in the object |
|
|
pointed to by the first parameter instead of the global state. |
|
|
@@ -1512,6 +1660,12 @@ |
|
|
@comment stdlib.h |
|
|
@comment SVID |
|
|
@deftypefun double drand48 (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} |
|
|
+@c Uses of the static state buffer are not guarded by a lock (thus |
|
|
+@c @mtasurace:drand48), so they may be found or left at a |
|
|
+@c partially-updated state in case of calls from within signal handlers |
|
|
+@c or cancellation. None of this will break safety rules or invoke |
|
|
+@c undefined behavior, but it may affect randomness. |
|
|
This function returns a @code{double} value in the range of @code{0.0} |
|
|
to @code{1.0} (exclusive). The random bits are determined by the global |
|
|
state of the random number generator in the C library. |
|
|
@@ -1525,6 +1679,9 @@ |
|
|
@comment stdlib.h |
|
|
@comment SVID |
|
|
@deftypefun double erand48 (unsigned short int @var{xsubi}[3]) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} |
|
|
+@c The static buffer is just initialized with default parameters, which |
|
|
+@c are later read to advance the state held in xsubi. |
|
|
This function returns a @code{double} value in the range of @code{0.0} |
|
|
to @code{1.0} (exclusive), similarly to @code{drand48}. The argument is |
|
|
an array describing the state of the random number generator. |
|
|
@@ -1537,6 +1694,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment SVID |
|
|
@deftypefun {long int} lrand48 (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} |
|
|
The @code{lrand48} function returns an integer value in the range of |
|
|
@code{0} to @code{2^31} (exclusive). Even if the size of the @code{long |
|
|
int} type can take more than 32 bits, no higher numbers are returned. |
|
|
@@ -1547,6 +1705,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment SVID |
|
|
@deftypefun {long int} nrand48 (unsigned short int @var{xsubi}[3]) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} |
|
|
This function is similar to the @code{lrand48} function in that it |
|
|
returns a number in the range of @code{0} to @code{2^31} (exclusive) but |
|
|
the state of the random number generator used to produce the random bits |
|
|
@@ -1561,6 +1720,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment SVID |
|
|
@deftypefun {long int} mrand48 (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} |
|
|
The @code{mrand48} function is similar to @code{lrand48}. The only |
|
|
difference is that the numbers returned are in the range @code{-2^31} to |
|
|
@code{2^31} (exclusive). |
|
|
@@ -1569,6 +1729,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment SVID |
|
|
@deftypefun {long int} jrand48 (unsigned short int @var{xsubi}[3]) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} |
|
|
The @code{jrand48} function is similar to @code{nrand48}. The only |
|
|
difference is that the numbers returned are in the range @code{-2^31} to |
|
|
@code{2^31} (exclusive). For the @code{xsubi} parameter the same |
|
|
@@ -1582,6 +1743,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment SVID |
|
|
@deftypefun void srand48 (long int @var{seedval}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} |
|
|
The @code{srand48} function sets the most significant 32 bits of the |
|
|
internal state of the random number generator to the least |
|
|
significant 32 bits of the @var{seedval} parameter. The lower 16 bits |
|
|
@@ -1601,6 +1763,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment SVID |
|
|
@deftypefun {unsigned short int *} seed48 (unsigned short int @var{seed16v}[3]) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} |
|
|
The @code{seed48} function initializes all 48 bits of the state of the |
|
|
internal random number generator from the contents of the parameter |
|
|
@var{seed16v}. Here the lower 16 bits of the first element of |
|
|
@@ -1628,6 +1791,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment SVID |
|
|
@deftypefun void lcong48 (unsigned short int @var{param}[7]) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:drand48}}@asunsafe{}@acunsafe{@acucorrupt{}}} |
|
|
The @code{lcong48} function allows the user to change the complete state |
|
|
of the random number generator. Unlike @code{srand48} and |
|
|
@code{seed48}, this function also changes the constants in the |
|
|
@@ -1660,6 +1824,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun int drand48_r (struct drand48_data *@var{buffer}, double *@var{result}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
This function is equivalent to the @code{drand48} function with the |
|
|
difference that it does not modify the global random number generator |
|
|
parameters but instead the parameters in the buffer supplied through the |
|
|
@@ -1677,6 +1842,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun int erand48_r (unsigned short int @var{xsubi}[3], struct drand48_data *@var{buffer}, double *@var{result}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
The @code{erand48_r} function works like @code{erand48}, but in addition |
|
|
it takes an argument @var{buffer} which describes the random number |
|
|
generator. The state of the random number generator is taken from the |
|
|
@@ -1692,7 +1858,8 @@ |
|
|
|
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
-@deftypefun int lrand48_r (struct drand48_data *@var{buffer}, double *@var{result}) |
|
|
+@deftypefun int lrand48_r (struct drand48_data *@var{buffer}, long int *@var{result}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
This function is similar to @code{lrand48}, but in addition it takes a |
|
|
pointer to a buffer describing the state of the random number generator |
|
|
just like @code{drand48}. |
|
|
@@ -1707,6 +1874,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun int nrand48_r (unsigned short int @var{xsubi}[3], struct drand48_data *@var{buffer}, long int *@var{result}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
The @code{nrand48_r} function works like @code{nrand48} in that it |
|
|
produces a random number in the range @code{0} to @code{2^31}. But instead |
|
|
of using the global parameters for the congruential formula it uses the |
|
|
@@ -1722,7 +1890,8 @@ |
|
|
|
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
-@deftypefun int mrand48_r (struct drand48_data *@var{buffer}, double *@var{result}) |
|
|
+@deftypefun int mrand48_r (struct drand48_data *@var{buffer}, long int *@var{result}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
This function is similar to @code{mrand48} but like the other reentrant |
|
|
functions it uses the random number generator described by the value in |
|
|
the buffer pointed to by @var{buffer}. |
|
|
@@ -1737,6 +1906,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun int jrand48_r (unsigned short int @var{xsubi}[3], struct drand48_data *@var{buffer}, long int *@var{result}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
The @code{jrand48_r} function is similar to @code{jrand48}. Like the |
|
|
other reentrant functions of this function family it uses the |
|
|
congruential formula parameters from the buffer pointed to by |
|
|
@@ -1771,6 +1941,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun int srand48_r (long int @var{seedval}, struct drand48_data *@var{buffer}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
The description of the random number generator represented by the |
|
|
information in @var{buffer} is initialized similarly to what the function |
|
|
@code{srand48} does. The state is initialized from the parameter |
|
|
@@ -1786,6 +1957,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun int seed48_r (unsigned short int @var{seed16v}[3], struct drand48_data *@var{buffer}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
This function is similar to @code{srand48_r} but like @code{seed48} it |
|
|
initializes all 48 bits of the state from the parameter @var{seed16v}. |
|
|
|
|
|
@@ -1802,6 +1974,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun int lcong48_r (unsigned short int @var{param}[7], struct drand48_data *@var{buffer}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:buffer}}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
This function initializes all aspects of the random number generator |
|
|
described in @var{buffer} with the data in @var{param}. Here it is |
|
|
especially true that the function does more than just copying the |
|
|
diff -urN glibc-2.17-c758a686/manual/memory.texi glibc-2.17-c758a686/manual/memory.texi |
|
|
--- glibc-2.17-c758a686/manual/memory.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/memory.texi 2014-09-12 16:10:06.045792717 -0400 |
|
|
@@ -302,6 +302,245 @@ |
|
|
@comment malloc.h stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun {void *} malloc (size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c Malloc hooks and __morecore pointers, as well as such parameters as |
|
|
+@c max_n_mmaps and max_mmapped_mem, are accessed without guards, so they |
|
|
+@c could pose a thread safety issue; in order to not declare malloc |
|
|
+@c MT-unsafe, it's modifying the hooks and parameters while multiple |
|
|
+@c threads are active that is regarded as unsafe. An arena's next field |
|
|
+@c is initialized and never changed again, except for main_arena's, |
|
|
+@c that's protected by list_lock; next_free is only modified while |
|
|
+@c list_lock is held too. All other data members of an arena, as well |
|
|
+@c as the metadata of the memory areas assigned to it, are only modified |
|
|
+@c while holding the arena's mutex (fastbin pointers use catomic ops |
|
|
+@c because they may be modified by free without taking the arena's |
|
|
+@c lock). Some reassurance was needed for fastbins, for it wasn't clear |
|
|
+@c how they were initialized. It turns out they are always |
|
|
+@c zero-initialized: main_arena's, for being static data, and other |
|
|
+@c arena's, for being just-mmapped memory. |
|
|
+ |
|
|
+@c Leaking file descriptors and memory in case of cancellation is |
|
|
+@c unavoidable without disabling cancellation, but the lock situation is |
|
|
+@c a bit more complicated: we don't have fallback arenas for malloc to |
|
|
+@c be safe to call from within signal handlers. Error-checking mutexes |
|
|
+@c or trylock could enable us to try and use alternate arenas, even with |
|
|
+@c -DPER_THREAD (enabled by default), but supporting interruption |
|
|
+@c (cancellation or signal handling) while holding the arena list mutex |
|
|
+@c would require more work; maybe blocking signals and disabling async |
|
|
+@c cancellation while manipulating the arena lists? |
|
|
+ |
|
|
+@c __libc_malloc @asulock @aculock @acsfd @acsmem |
|
|
+@c force_reg ok |
|
|
+@c *malloc_hook unguarded |
|
|
+@c arena_lookup ok |
|
|
+@c tsd_getspecific ok, TLS |
|
|
+@c arena_lock @asulock @aculock @acsfd @acsmem |
|
|
+@c mutex_lock @asulock @aculock |
|
|
+@c arena_get2 @asulock @aculock @acsfd @acsmem |
|
|
+@c get_free_list @asulock @aculock |
|
|
+@c mutex_lock (list_lock) dup @asulock @aculock |
|
|
+@c mutex_unlock (list_lock) dup @aculock |
|
|
+@c mutex_lock (arena lock) dup @asulock @aculock [returns locked] |
|
|
+@c tsd_setspecific ok, TLS |
|
|
+@c __get_nprocs ext ok @acsfd |
|
|
+@c NARENAS_FROM_NCORES ok |
|
|
+@c catomic_compare_and_exchange_bool_acq ok |
|
|
+@c _int_new_arena ok @asulock @aculock @acsmem |
|
|
+@c new_heap ok @acsmem |
|
|
+@c mmap ok @acsmem |
|
|
+@c munmap ok @acsmem |
|
|
+@c mprotect ok |
|
|
+@c chunk2mem ok |
|
|
+@c set_head ok |
|
|
+@c tsd_setspecific dup ok |
|
|
+@c mutex_init ok |
|
|
+@c mutex_lock (just-created mutex) ok, returns locked |
|
|
+@c mutex_lock (list_lock) dup @asulock @aculock |
|
|
+@c atomic_write_barrier ok |
|
|
+@c mutex_unlock (list_lock) @aculock |
|
|
+@c catomic_decrement ok |
|
|
+@c reused_arena @asulock @aculock |
|
|
+@c reads&writes next_to_use and iterates over arena next without guards |
|
|
+@c those are harmless as long as we don't drop arenas from the |
|
|
+@c NEXT list, and we never do; when a thread terminates, |
|
|
+@c arena_thread_freeres prepends the arena to the free_list |
|
|
+@c NEXT_FREE list, but NEXT is never modified, so it's safe! |
|
|
+@c mutex_trylock (arena lock) @asulock @aculock |
|
|
+@c mutex_lock (arena lock) dup @asulock @aculock |
|
|
+@c tsd_setspecific dup ok |
|
|
+@c _int_malloc @acsfd @acsmem |
|
|
+@c checked_request2size ok |
|
|
+@c REQUEST_OUT_OF_RANGE ok |
|
|
+@c request2size ok |
|
|
+@c get_max_fast ok |
|
|
+@c fastbin_index ok |
|
|
+@c fastbin ok |
|
|
+@c catomic_compare_and_exhange_val_acq ok |
|
|
+@c malloc_printerr dup @mtsenv |
|
|
+@c if we get to it, we're toast already, undefined behavior must have |
|
|
+@c been invoked before |
|
|
+@c libc_message @mtsenv [no leaks with cancellation disabled] |
|
|
+@c FATAL_PREPARE ok |
|
|
+@c pthread_setcancelstate disable ok |
|
|
+@c libc_secure_getenv @mtsenv |
|
|
+@c getenv @mtsenv |
|
|
+@c open_not_cancel_2 dup @acsfd |
|
|
+@c strchrnul ok |
|
|
+@c WRITEV_FOR_FATAL ok |
|
|
+@c writev ok |
|
|
+@c mmap ok @acsmem |
|
|
+@c munmap ok @acsmem |
|
|
+@c BEFORE_ABORT @acsfd |
|
|
+@c backtrace ok |
|
|
+@c write_not_cancel dup ok |
|
|
+@c backtrace_symbols_fd @aculock |
|
|
+@c open_not_cancel_2 dup @acsfd |
|
|
+@c read_not_cancel dup ok |
|
|
+@c close_not_cancel_no_status dup @acsfd |
|
|
+@c abort ok |
|
|
+@c itoa_word ok |
|
|
+@c abort ok |
|
|
+@c check_remalloced_chunk ok/disabled |
|
|
+@c chunk2mem dup ok |
|
|
+@c alloc_perturb ok |
|
|
+@c in_smallbin_range ok |
|
|
+@c smallbin_index ok |
|
|
+@c bin_at ok |
|
|
+@c last ok |
|
|
+@c malloc_consolidate ok |
|
|
+@c get_max_fast dup ok |
|
|
+@c clear_fastchunks ok |
|
|
+@c unsorted_chunks dup ok |
|
|
+@c fastbin dup ok |
|
|
+@c atomic_exchange_acq ok |
|
|
+@c check_inuse_chunk dup ok/disabled |
|
|
+@c chunk_at_offset dup ok |
|
|
+@c chunksize dup ok |
|
|
+@c inuse_bit_at_offset dup ok |
|
|
+@c unlink dup ok |
|
|
+@c clear_inuse_bit_at_offset dup ok |
|
|
+@c in_smallbin_range dup ok |
|
|
+@c set_head dup ok |
|
|
+@c malloc_init_state ok |
|
|
+@c bin_at dup ok |
|
|
+@c set_noncontiguous dup ok |
|
|
+@c set_max_fast dup ok |
|
|
+@c initial_top ok |
|
|
+@c unsorted_chunks dup ok |
|
|
+@c check_malloc_state ok/disabled |
|
|
+@c set_inuse_bit_at_offset ok |
|
|
+@c check_malloced_chunk ok/disabled |
|
|
+@c largebin_index ok |
|
|
+@c have_fastchunks ok |
|
|
+@c unsorted_chunks ok |
|
|
+@c bin_at ok |
|
|
+@c chunksize ok |
|
|
+@c chunk_at_offset ok |
|
|
+@c set_head ok |
|
|
+@c set_foot ok |
|
|
+@c mark_bin ok |
|
|
+@c idx2bit ok |
|
|
+@c first ok |
|
|
+@c unlink ok |
|
|
+@c malloc_printerr dup ok |
|
|
+@c in_smallbin_range dup ok |
|
|
+@c idx2block ok |
|
|
+@c idx2bit dup ok |
|
|
+@c next_bin ok |
|
|
+@c sysmalloc @acsfd @acsmem |
|
|
+@c MMAP @acsmem |
|
|
+@c set_head dup ok |
|
|
+@c check_chunk ok/disabled |
|
|
+@c chunk2mem dup ok |
|
|
+@c chunksize dup ok |
|
|
+@c chunk_at_offset dup ok |
|
|
+@c heap_for_ptr ok |
|
|
+@c grow_heap ok |
|
|
+@c mprotect ok |
|
|
+@c set_head dup ok |
|
|
+@c new_heap @acsmem |
|
|
+@c MMAP dup @acsmem |
|
|
+@c munmap @acsmem |
|
|
+@c top ok |
|
|
+@c set_foot dup ok |
|
|
+@c contiguous ok |
|
|
+@c MORECORE ok |
|
|
+@c *__morecore ok unguarded |
|
|
+@c __default_morecore |
|
|
+@c sbrk ok |
|
|
+@c force_reg dup ok |
|
|
+@c *__after_morecore_hook unguarded |
|
|
+@c set_noncontiguous ok |
|
|
+@c malloc_printerr dup ok |
|
|
+@c _int_free (have_lock) @acsfd @acsmem [@asulock @aculock] |
|
|
+@c chunksize dup ok |
|
|
+@c mutex_unlock dup @aculock/!have_lock |
|
|
+@c malloc_printerr dup ok |
|
|
+@c check_inuse_chunk ok/disabled |
|
|
+@c chunk_at_offset dup ok |
|
|
+@c mutex_lock dup @asulock @aculock/@have_lock |
|
|
+@c chunk2mem dup ok |
|
|
+@c free_perturb ok |
|
|
+@c set_fastchunks ok |
|
|
+@c catomic_and ok |
|
|
+@c fastbin_index dup ok |
|
|
+@c fastbin dup ok |
|
|
+@c catomic_compare_and_exchange_val_rel ok |
|
|
+@c chunk_is_mmapped ok |
|
|
+@c contiguous dup ok |
|
|
+@c prev_inuse ok |
|
|
+@c unlink dup ok |
|
|
+@c inuse_bit_at_offset dup ok |
|
|
+@c clear_inuse_bit_at_offset ok |
|
|
+@c unsorted_chunks dup ok |
|
|
+@c in_smallbin_range dup ok |
|
|
+@c set_head dup ok |
|
|
+@c set_foot dup ok |
|
|
+@c check_free_chunk ok/disabled |
|
|
+@c check_chunk dup ok/disabled |
|
|
+@c have_fastchunks dup ok |
|
|
+@c malloc_consolidate dup ok |
|
|
+@c systrim ok |
|
|
+@c MORECORE dup ok |
|
|
+@c *__after_morecore_hook dup unguarded |
|
|
+@c set_head dup ok |
|
|
+@c check_malloc_state ok/disabled |
|
|
+@c top dup ok |
|
|
+@c heap_for_ptr dup ok |
|
|
+@c heap_trim @acsfd @acsmem |
|
|
+@c top dup ok |
|
|
+@c chunk_at_offset dup ok |
|
|
+@c prev_chunk ok |
|
|
+@c chunksize dup ok |
|
|
+@c prev_inuse dup ok |
|
|
+@c delete_heap @acsmem |
|
|
+@c munmap dup @acsmem |
|
|
+@c unlink dup ok |
|
|
+@c set_head dup ok |
|
|
+@c shrink_heap @acsfd |
|
|
+@c check_may_shrink_heap @acsfd |
|
|
+@c open_not_cancel_2 @acsfd |
|
|
+@c read_not_cancel ok |
|
|
+@c close_not_cancel_no_status @acsfd |
|
|
+@c MMAP dup ok |
|
|
+@c madvise ok |
|
|
+@c munmap_chunk @acsmem |
|
|
+@c chunksize dup ok |
|
|
+@c chunk_is_mmapped dup ok |
|
|
+@c chunk2mem dup ok |
|
|
+@c malloc_printerr dup ok |
|
|
+@c munmap dup @acsmem |
|
|
+@c check_malloc_state ok/disabled |
|
|
+@c arena_get_retry @asulock @aculock @acsfd @acsmem |
|
|
+@c mutex_unlock dup @aculock |
|
|
+@c mutex_lock dup @asulock @aculock |
|
|
+@c arena_get2 dup @asulock @aculock @acsfd @acsmem |
|
|
+@c mutex_unlock @aculock |
|
|
+@c mem2chunk ok |
|
|
+@c chunk_is_mmapped ok |
|
|
+@c arena_for_chunk ok |
|
|
+@c chunk_non_main_arena ok |
|
|
+@c heap_for_ptr ok |
|
|
This function returns a pointer to a newly allocated block @var{size} |
|
|
bytes long, or a null pointer if the block could not be allocated. |
|
|
@end deftypefun |
|
|
@@ -355,7 +594,7 @@ |
|
|
void * |
|
|
xmalloc (size_t size) |
|
|
@{ |
|
|
- register void *value = malloc (size); |
|
|
+ void *value = malloc (size); |
|
|
if (value == 0) |
|
|
fatal ("virtual memory exhausted"); |
|
|
return value; |
|
|
@@ -371,7 +610,7 @@ |
|
|
char * |
|
|
savestring (const char *ptr, size_t len) |
|
|
@{ |
|
|
- register char *value = (char *) xmalloc (len + 1); |
|
|
+ char *value = (char *) xmalloc (len + 1); |
|
|
value[len] = '\0'; |
|
|
return (char *) memcpy (value, ptr, len); |
|
|
@} |
|
|
@@ -380,10 +619,10 @@ |
|
|
|
|
|
The block that @code{malloc} gives you is guaranteed to be aligned so |
|
|
that it can hold any type of data. On @gnusystems{}, the address is |
|
|
-always a multiple of eight on most systems, and a multiple of 16 on |
|
|
+always a multiple of eight on 32-bit systems, and a multiple of 16 on |
|
|
64-bit systems. Only rarely is any higher boundary (such as a page |
|
|
-boundary) necessary; for those cases, use @code{memalign}, |
|
|
-@code{posix_memalign} or @code{valloc} (@pxref{Aligned Memory Blocks}). |
|
|
+boundary) necessary; for those cases, use @code{aligned_alloc} or |
|
|
+@code{posix_memalign} (@pxref{Aligned Memory Blocks}). |
|
|
|
|
|
Note that the memory located after the end of the block is likely to be |
|
|
in use for something else; perhaps a block already allocated by another |
|
|
@@ -407,6 +646,21 @@ |
|
|
@comment malloc.h stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun void free (void *@var{ptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c __libc_free @asulock @aculock @acsfd @acsmem |
|
|
+@c releasing memory into fastbins modifies the arena without taking |
|
|
+@c its mutex, but catomic operations ensure safety. If two (or more) |
|
|
+@c threads are running malloc and have their own arenas locked when |
|
|
+@c each gets a signal whose handler free()s large (non-fastbin-able) |
|
|
+@c blocks from each other's arena, we deadlock; this is a more general |
|
|
+@c case of @asulock. |
|
|
+@c *__free_hook unguarded |
|
|
+@c mem2chunk ok |
|
|
+@c chunk_is_mmapped ok, chunk bits not modified after allocation |
|
|
+@c chunksize ok |
|
|
+@c munmap_chunk dup @acsmem |
|
|
+@c arena_for_chunk dup ok |
|
|
+@c _int_free (!have_lock) dup @asulock @aculock @acsfd @acsmem |
|
|
The @code{free} function deallocates the block of memory pointed at |
|
|
by @var{ptr}. |
|
|
@end deftypefun |
|
|
@@ -414,6 +668,8 @@ |
|
|
@comment stdlib.h |
|
|
@comment Sun |
|
|
@deftypefun void cfree (void *@var{ptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c alias to free |
|
|
This function does the same thing as @code{free}. It's provided for |
|
|
backward compatibility with SunOS; you should use @code{free} instead. |
|
|
@end deftypefun |
|
|
@@ -471,6 +727,48 @@ |
|
|
@comment malloc.h stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun {void *} realloc (void *@var{ptr}, size_t @var{newsize}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c It may call the implementations of malloc and free, so all of their |
|
|
+@c issues arise, plus the realloc hook, also accessed without guards. |
|
|
+ |
|
|
+@c __libc_realloc @asulock @aculock @acsfd @acsmem |
|
|
+@c *__realloc_hook unguarded |
|
|
+@c __libc_free dup @asulock @aculock @acsfd @acsmem |
|
|
+@c __libc_malloc dup @asulock @aculock @acsfd @acsmem |
|
|
+@c mem2chunk dup ok |
|
|
+@c chunksize dup ok |
|
|
+@c malloc_printerr dup ok |
|
|
+@c checked_request2size dup ok |
|
|
+@c chunk_is_mmapped dup ok |
|
|
+@c mremap_chunk |
|
|
+@c chunksize dup ok |
|
|
+@c __mremap ok |
|
|
+@c set_head dup ok |
|
|
+@c MALLOC_COPY ok |
|
|
+@c memcpy ok |
|
|
+@c munmap_chunk dup @acsmem |
|
|
+@c arena_for_chunk dup ok |
|
|
+@c mutex_lock (arena mutex) dup @asulock @aculock |
|
|
+@c _int_realloc @acsfd @acsmem |
|
|
+@c malloc_printerr dup ok |
|
|
+@c check_inuse_chunk dup ok/disabled |
|
|
+@c chunk_at_offset dup ok |
|
|
+@c chunksize dup ok |
|
|
+@c set_head_size dup ok |
|
|
+@c chunk_at_offset dup ok |
|
|
+@c set_head dup ok |
|
|
+@c chunk2mem dup ok |
|
|
+@c inuse dup ok |
|
|
+@c unlink dup ok |
|
|
+@c _int_malloc dup @acsfd @acsmem |
|
|
+@c mem2chunk dup ok |
|
|
+@c MALLOC_COPY dup ok |
|
|
+@c _int_free (have_lock) dup @acsfd @acsmem |
|
|
+@c set_inuse_bit_at_offset dup ok |
|
|
+@c set_head dup ok |
|
|
+@c mutex_unlock (arena mutex) dup @aculock |
|
|
+@c _int_free (!have_lock) dup @asulock @aculock @acsfd @acsmem |
|
|
+ |
|
|
The @code{realloc} function changes the size of the block whose address is |
|
|
@var{ptr} to be @var{newsize}. |
|
|
|
|
|
@@ -502,7 +800,7 @@ |
|
|
void * |
|
|
xrealloc (void *ptr, size_t size) |
|
|
@{ |
|
|
- register void *value = realloc (ptr, size); |
|
|
+ void *value = realloc (ptr, size); |
|
|
if (value == 0) |
|
|
fatal ("Virtual memory exhausted"); |
|
|
return value; |
|
|
@@ -530,6 +828,25 @@ |
|
|
@comment malloc.h stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun {void *} calloc (size_t @var{count}, size_t @var{eltsize}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c Same caveats as malloc. |
|
|
+ |
|
|
+@c __libc_calloc @asulock @aculock @acsfd @acsmem |
|
|
+@c *__malloc_hook dup unguarded |
|
|
+@c memset dup ok |
|
|
+@c arena_get @asulock @aculock @acsfd @acsmem |
|
|
+@c arena_lookup dup ok |
|
|
+@c arena_lock dup @asulock @aculock @acsfd @acsmem |
|
|
+@c top dup ok |
|
|
+@c chunksize dup ok |
|
|
+@c heap_for_ptr dup ok |
|
|
+@c _int_malloc dup @acsfd @acsmem |
|
|
+@c arena_get_retry dup @asulock @aculock @acsfd @acsmem |
|
|
+@c mutex_unlock dup @aculock |
|
|
+@c mem2chunk dup ok |
|
|
+@c chunk_is_mmapped dup ok |
|
|
+@c MALLOC_ZERO ok |
|
|
+@c memset dup ok |
|
|
This function allocates a block long enough to contain a vector of |
|
|
@var{count} elements, each of size @var{eltsize}. Its contents are |
|
|
cleared to zero before @code{calloc} returns. |
|
|
@@ -616,28 +933,89 @@ |
|
|
The address of a block returned by @code{malloc} or @code{realloc} in |
|
|
@gnusystems{} is always a multiple of eight (or sixteen on 64-bit |
|
|
systems). If you need a block whose address is a multiple of a higher |
|
|
-power of two than that, use @code{memalign}, @code{posix_memalign}, or |
|
|
-@code{valloc}. @code{memalign} is declared in @file{malloc.h} and |
|
|
-@code{posix_memalign} is declared in @file{stdlib.h}. |
|
|
- |
|
|
-With @theglibc{}, you can use @code{free} to free the blocks that |
|
|
-@code{memalign}, @code{posix_memalign}, and @code{valloc} return. That |
|
|
-does not work in BSD, however---BSD does not provide any way to free |
|
|
-such blocks. |
|
|
+power of two than that, use @code{aligned_alloc} or @code{posix_memalign}. |
|
|
+@code{aligned_alloc} and @code{posix_memalign} are declared in |
|
|
+@file{stdlib.h}. |
|
|
+ |
|
|
+@comment stdlib.h |
|
|
+@deftypefun {void *} aligned_alloc (size_t @var{alignment}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c Alias to memalign. |
|
|
+The @code{aligned_alloc} function allocates a block of @var{size} bytes whose |
|
|
+address is a multiple of @var{alignment}. The @var{alignment} must be a |
|
|
+power of two and @var{size} must be a multiple of @var{alignment}. |
|
|
+ |
|
|
+The @code{aligned_alloc} function returns a null pointer on error and sets |
|
|
+@code{errno} to one of the following values: |
|
|
+ |
|
|
+@table @code |
|
|
+@item ENOMEM |
|
|
+There was insufficient memory available to satisfy the request. |
|
|
+ |
|
|
+@item EINVAL |
|
|
+@var{alignment} is not a power of two. |
|
|
+ |
|
|
+This function was introduced in @w{ISO C11} and hence may have better |
|
|
+portability to modern non-POSIX systems than @code{posix_memalign}. |
|
|
+@end table |
|
|
+ |
|
|
+@end deftypefun |
|
|
|
|
|
@comment malloc.h |
|
|
@comment BSD |
|
|
@deftypefun {void *} memalign (size_t @var{boundary}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c Same issues as malloc. The padding bytes are safely freed in |
|
|
+@c _int_memalign, with the arena still locked. |
|
|
+ |
|
|
+@c __libc_memalign @asulock @aculock @acsfd @acsmem |
|
|
+@c *__memalign_hook dup unguarded |
|
|
+@c __libc_malloc dup @asulock @aculock @acsfd @acsmem |
|
|
+@c arena_get dup @asulock @aculock @acsfd @acsmem |
|
|
+@c _int_memalign @acsfd @acsmem |
|
|
+@c _int_malloc dup @acsfd @acsmem |
|
|
+@c checked_request2size dup ok |
|
|
+@c mem2chunk dup ok |
|
|
+@c chunksize dup ok |
|
|
+@c chunk_is_mmapped dup ok |
|
|
+@c set_head dup ok |
|
|
+@c chunk2mem dup ok |
|
|
+@c set_inuse_bit_at_offset dup ok |
|
|
+@c set_head_size dup ok |
|
|
+@c _int_free (have_lock) dup @acsfd @acsmem |
|
|
+@c chunk_at_offset dup ok |
|
|
+@c check_inuse_chunk dup ok |
|
|
+@c arena_get_retry dup @asulock @aculock @acsfd @acsmem |
|
|
+@c mutex_unlock dup @aculock |
|
|
The @code{memalign} function allocates a block of @var{size} bytes whose |
|
|
address is a multiple of @var{boundary}. The @var{boundary} must be a |
|
|
power of two! The function @code{memalign} works by allocating a |
|
|
somewhat larger block, and then returning an address within the block |
|
|
that is on the specified boundary. |
|
|
+ |
|
|
+The @code{memalign} function returns a null pointer on error and sets |
|
|
+@code{errno} to one of the following values: |
|
|
+ |
|
|
+@table @code |
|
|
+@item ENOMEM |
|
|
+There was insufficient memory available to satisfy the request. |
|
|
+ |
|
|
+@item EINVAL |
|
|
+@var{alignment} is not a power of two. |
|
|
+ |
|
|
+@end table |
|
|
+ |
|
|
+The @code{memalign} function is obsolete and @code{aligned_alloc} or |
|
|
+@code{posix_memalign} should be used instead. |
|
|
@end deftypefun |
|
|
|
|
|
@comment stdlib.h |
|
|
@comment POSIX |
|
|
@deftypefun int posix_memalign (void **@var{memptr}, size_t @var{alignment}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c Calls memalign unless the requirements are not met (powerof2 macro is |
|
|
+@c safe given an automatic variable as an argument) or there's a |
|
|
+@c memalign hook (accessed unguarded, but safely). |
|
|
The @code{posix_memalign} function is similar to the @code{memalign} |
|
|
function in that it returns a buffer of @var{size} bytes aligned to a |
|
|
multiple of @var{alignment}. But it adds one requirement to the |
|
|
@@ -647,13 +1025,58 @@ |
|
|
If the function succeeds in allocation memory a pointer to the allocated |
|
|
memory is returned in @code{*@var{memptr}} and the return value is zero. |
|
|
Otherwise the function returns an error value indicating the problem. |
|
|
+The possible error values returned are: |
|
|
+ |
|
|
+@table @code |
|
|
+@item ENOMEM |
|
|
+There was insufficient memory available to satisfy the request. |
|
|
|
|
|
-This function was introduced in POSIX 1003.1d. |
|
|
+@item EINVAL |
|
|
+@var{alignment} is not a power of two multiple of @code{sizeof (void *)}. |
|
|
+ |
|
|
+@end table |
|
|
+ |
|
|
+This function was introduced in POSIX 1003.1d. Although this function is |
|
|
+superseded by @code{aligned_alloc}, it is more portable to older POSIX |
|
|
+systems that do not support @w{ISO C11}. |
|
|
@end deftypefun |
|
|
|
|
|
@comment malloc.h stdlib.h |
|
|
@comment BSD |
|
|
@deftypefun {void *} valloc (size_t @var{size}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtuinit{}}@asunsafe{@asuinit{} @asulock{}}@acunsafe{@acuinit{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c __libc_valloc @mtuinit @asuinit @asulock @aculock @acsfd @acsmem |
|
|
+@c ptmalloc_init (once) @mtsenv @asulock @aculock @acsfd @acsmem |
|
|
+@c _dl_addr @asucorrupt? @aculock |
|
|
+@c __rtld_lock_lock_recursive (dl_load_lock) @asucorrupt? @aculock |
|
|
+@c _dl_find_dso_for_object ok, iterates over dl_ns and its _ns_loaded objs |
|
|
+@c the ok above assumes no partial updates on dl_ns and _ns_loaded |
|
|
+@c that could confuse a _dl_addr call in a signal handler |
|
|
+@c _dl_addr_inside_object ok |
|
|
+@c determine_info ok |
|
|
+@c __rtld_lock_unlock_recursive (dl_load_lock) @aculock |
|
|
+@c thread_atfork @asulock @aculock @acsfd @acsmem |
|
|
+@c __register_atfork @asulock @aculock @acsfd @acsmem |
|
|
+@c lll_lock (__fork_lock) @asulock @aculock |
|
|
+@c fork_handler_alloc @asulock @aculock @acsfd @acsmem |
|
|
+@c calloc dup @asulock @aculock @acsfd @acsmem |
|
|
+@c __linkin_atfork ok |
|
|
+@c catomic_compare_and_exchange_bool_acq ok |
|
|
+@c lll_unlock (__fork_lock) @aculock |
|
|
+@c *_environ @mtsenv |
|
|
+@c next_env_entry ok |
|
|
+@c strcspn dup ok |
|
|
+@c __libc_mallopt dup @mtasuconst:mallopt [setting mp_] |
|
|
+@c __malloc_check_init @mtasuconst:malloc_hooks [setting hooks] |
|
|
+@c *__malloc_initialize_hook unguarded, ok |
|
|
+@c *__memalign_hook dup ok, unguarded |
|
|
+@c arena_get dup @asulock @aculock @acsfd @acsmem |
|
|
+@c _int_valloc @acsfd @acsmem |
|
|
+@c malloc_consolidate dup ok |
|
|
+@c _int_memalign dup @acsfd @acsmem |
|
|
+@c arena_get_retry dup @asulock @aculock @acsfd @acsmem |
|
|
+@c _int_memalign dup @acsfd @acsmem |
|
|
+@c mutex_unlock dup @aculock |
|
|
Using @code{valloc} is like using @code{memalign} and passing the page size |
|
|
as the value of the second argument. It is implemented like this: |
|
|
|
|
|
@@ -667,6 +1090,9 @@ |
|
|
|
|
|
@ref{Query Memory Parameters} for more information about the memory |
|
|
subsystem. |
|
|
+ |
|
|
+The @code{valloc} function is obsolete and @code{aligned_alloc} or |
|
|
+@code{posix_memalign} should be used instead. |
|
|
@end deftypefun |
|
|
|
|
|
@node Malloc Tunable Parameters |
|
|
@@ -678,30 +1104,34 @@ |
|
|
@pindex malloc.h |
|
|
|
|
|
@deftypefun int mallopt (int @var{param}, int @var{value}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasuconst{:mallopt}}@asunsafe{@asuinit{} @asulock{}}@acunsafe{@acuinit{} @aculock{}}} |
|
|
+@c __libc_mallopt @mtuinit @mtasuconst:mallopt @asuinit @asulock @aculock |
|
|
+@c ptmalloc_init (once) dup @mtsenv @asulock @aculock @acsfd @acsmem |
|
|
+@c mutex_lock (main_arena->mutex) @asulock @aculock |
|
|
+@c malloc_consolidate dup ok |
|
|
+@c set_max_fast ok |
|
|
+@c mutex_unlock dup @aculock |
|
|
+ |
|
|
When calling @code{mallopt}, the @var{param} argument specifies the |
|
|
parameter to be set, and @var{value} the new value to be set. Possible |
|
|
choices for @var{param}, as defined in @file{malloc.h}, are: |
|
|
|
|
|
@table @code |
|
|
-@item M_TRIM_THRESHOLD |
|
|
-This is the minimum size (in bytes) of the top-most, releasable chunk |
|
|
-that will cause @code{sbrk} to be called with a negative argument in |
|
|
-order to return memory to the system. |
|
|
-@item M_TOP_PAD |
|
|
-This parameter determines the amount of extra memory to obtain from the |
|
|
-system when a call to @code{sbrk} is required. It also specifies the |
|
|
-number of bytes to retain when shrinking the heap by calling @code{sbrk} |
|
|
-with a negative argument. This provides the necessary hysteresis in |
|
|
-heap size such that excessive amounts of system calls can be avoided. |
|
|
+@comment TODO: @item M_ARENA_MAX |
|
|
+@comment - Document ARENA_MAX env var. |
|
|
+@comment TODO: @item M_ARENA_TEST |
|
|
+@comment - Document ARENA_TEST env var. |
|
|
+@comment TODO: @item M_CHECK_ACTION |
|
|
+@item M_MMAP_MAX |
|
|
+The maximum number of chunks to allocate with @code{mmap}. Setting this |
|
|
+to zero disables all use of @code{mmap}. |
|
|
@item M_MMAP_THRESHOLD |
|
|
All chunks larger than this value are allocated outside the normal |
|
|
heap, using the @code{mmap} system call. This way it is guaranteed |
|
|
that the memory for these chunks can be returned to the system on |
|
|
@code{free}. Note that requests smaller than this threshold might still |
|
|
be allocated via @code{mmap}. |
|
|
-@item M_MMAP_MAX |
|
|
-The maximum number of chunks to allocate with @code{mmap}. Setting this |
|
|
-to zero disables all use of @code{mmap}. |
|
|
+@comment TODO: @item M_MXFAST |
|
|
@item M_PERTURB |
|
|
If non-zero, memory blocks are filled with values depending on some |
|
|
low order bits of this parameter when they are allocated (except when |
|
|
@@ -710,6 +1140,16 @@ |
|
|
guarantee that the freed block will have any specific values. It only |
|
|
guarantees that the content the block had before it was freed will be |
|
|
overwritten. |
|
|
+@item M_TOP_PAD |
|
|
+This parameter determines the amount of extra memory to obtain from the |
|
|
+system when a call to @code{sbrk} is required. It also specifies the |
|
|
+number of bytes to retain when shrinking the heap by calling @code{sbrk} |
|
|
+with a negative argument. This provides the necessary hysteresis in |
|
|
+heap size such that excessive amounts of system calls can be avoided. |
|
|
+@item M_TRIM_THRESHOLD |
|
|
+This is the minimum size (in bytes) of the top-most, releasable chunk |
|
|
+that will cause @code{sbrk} to be called with a negative argument in |
|
|
+order to return memory to the system. |
|
|
@end table |
|
|
|
|
|
@end deftypefun |
|
|
@@ -728,6 +1168,17 @@ |
|
|
@comment mcheck.h |
|
|
@comment GNU |
|
|
@deftypefun int mcheck (void (*@var{abortfn}) (enum mcheck_status @var{status})) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:mcheck} @mtasuconst{:malloc_hooks}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
+@c The hooks must be set up before malloc is first used, which sort of |
|
|
+@c implies @mtuinit/@asuinit but since the function is a no-op if malloc |
|
|
+@c was already used, that doesn't pose any safety issues. The actual |
|
|
+@c problem is with the hooks, designed for single-threaded |
|
|
+@c fully-synchronous operation: they manage an unguarded linked list of |
|
|
+@c allocated blocks, and get temporarily overwritten before calling the |
|
|
+@c allocation functions recursively while holding the old hooks. There |
|
|
+@c are no guards for thread safety, and inconsistent hooks may be found |
|
|
+@c within signal handlers or left behind in case of cancellation. |
|
|
+ |
|
|
Calling @code{mcheck} tells @code{malloc} to perform occasional |
|
|
consistency checks. These will catch things such as writing |
|
|
past the end of a block that was allocated with @code{malloc}. |
|
|
@@ -770,6 +1221,18 @@ |
|
|
@end deftypefun |
|
|
|
|
|
@deftypefun {enum mcheck_status} mprobe (void *@var{pointer}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:mcheck} @mtasuconst{:malloc_hooks}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
+@c The linked list of headers may be modified concurrently by other |
|
|
+@c threads, and it may find a partial update if called from a signal |
|
|
+@c handler. It's mostly read only, so cancelling it might be safe, but |
|
|
+@c it will modify global state that, if cancellation hits at just the |
|
|
+@c right spot, may be left behind inconsistent. This path is only taken |
|
|
+@c if checkhdr finds an inconsistency. If the inconsistency could only |
|
|
+@c occur because of earlier undefined behavior, that wouldn't be an |
|
|
+@c additional safety issue problem, but because of the other concurrency |
|
|
+@c issues in the mcheck hooks, the apparent inconsistency could be the |
|
|
+@c result of mcheck's own internal data race. So, AC-Unsafe it is. |
|
|
+ |
|
|
The @code{mprobe} function lets you explicitly check for inconsistencies |
|
|
in a particular allocated block. You must have already called |
|
|
@code{mcheck} at the beginning of the program, to do its occasional |
|
|
@@ -896,16 +1359,18 @@ |
|
|
@comment malloc.h |
|
|
@comment GNU |
|
|
@defvar __memalign_hook |
|
|
-The value of this variable is a pointer to function that @code{memalign} |
|
|
-uses whenever it is called. You should define this function to look |
|
|
-like @code{memalign}; that is, like: |
|
|
+The value of this variable is a pointer to function that @code{aligned_alloc}, |
|
|
+@code{memalign}, @code{posix_memalign} and @code{valloc} use whenever they |
|
|
+are called. You should define this function to look like @code{aligned_alloc}; |
|
|
+that is, like: |
|
|
|
|
|
@smallexample |
|
|
void *@var{function} (size_t @var{alignment}, size_t @var{size}, const void *@var{caller}) |
|
|
@end smallexample |
|
|
|
|
|
The value of @var{caller} is the return address found on the stack when |
|
|
-the @code{memalign} function was called. This value allows you to trace the |
|
|
+the @code{aligned_alloc}, @code{memalign}, @code{posix_memalign} or |
|
|
+@code{valloc} functions are called. This value allows you to trace the |
|
|
memory consumption of the program. |
|
|
@end defvar |
|
|
|
|
|
@@ -1082,6 +1547,24 @@ |
|
|
@comment malloc.h |
|
|
@comment SVID |
|
|
@deftypefun {struct mallinfo} mallinfo (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasuconst{:mallopt}}@asunsafe{@asuinit{} @asulock{}}@acunsafe{@acuinit{} @aculock{}}} |
|
|
+@c Accessing mp_.n_mmaps and mp_.max_mmapped_mem, modified with atomics |
|
|
+@c but non-atomically elsewhere, may get us inconsistent results. We |
|
|
+@c mark the statistics as unsafe, rather than the fast-path functions |
|
|
+@c that collect the possibly inconsistent data. |
|
|
+ |
|
|
+@c __libc_mallinfo @mtuinit @mtasuconst:mallopt @asuinit @asulock @aculock |
|
|
+@c ptmalloc_init (once) dup @mtsenv @asulock @aculock @acsfd @acsmem |
|
|
+@c mutex_lock dup @asulock @aculock |
|
|
+@c int_mallinfo @mtasuconst:mallopt [mp_ access on main_arena] |
|
|
+@c malloc_consolidate dup ok |
|
|
+@c check_malloc_state dup ok/disabled |
|
|
+@c chunksize dup ok |
|
|
+@c fastbin dupo ok |
|
|
+@c bin_at dup ok |
|
|
+@c last dup ok |
|
|
+@c mutex_unlock @aculock |
|
|
+ |
|
|
This function returns information about the current dynamic memory usage |
|
|
in a structure of type @code{struct mallinfo}. |
|
|
@end deftypefun |
|
|
@@ -1112,6 +1595,14 @@ |
|
|
Allocate a block of @var{size} bytes, starting on a page boundary. |
|
|
@xref{Aligned Memory Blocks}. |
|
|
|
|
|
+@item void *aligned_alloc (size_t @var{size}, size_t @var{alignment}) |
|
|
+Allocate a block of @var{size} bytes, starting on an address that is a |
|
|
+multiple of @var{alignment}. @xref{Aligned Memory Blocks}. |
|
|
+ |
|
|
+@item int posix_memalign (void **@var{memptr}, size_t @var{alignment}, size_t @var{size}) |
|
|
+Allocate a block of @var{size} bytes, starting on an address that is a |
|
|
+multiple of @var{alignment}. @xref{Aligned Memory Blocks}. |
|
|
+ |
|
|
@item void *memalign (size_t @var{size}, size_t @var{boundary}) |
|
|
Allocate a block of @var{size} bytes, starting on an address that is a |
|
|
multiple of @var{boundary}. @xref{Aligned Memory Blocks}. |
|
|
@@ -1134,7 +1625,8 @@ |
|
|
A pointer to a function that @code{free} uses whenever it is called. |
|
|
|
|
|
@item void (*__memalign_hook) (size_t @var{size}, size_t @var{alignment}, const void *@var{caller}) |
|
|
-A pointer to a function that @code{memalign} uses whenever it is called. |
|
|
+A pointer to a function that @code{aligned_alloc}, @code{memalign}, |
|
|
+@code{posix_memalign} and @code{valloc} use whenever they are called. |
|
|
|
|
|
@item struct mallinfo mallinfo (void) |
|
|
Return information about the current dynamic memory usage. |
|
|
@@ -1171,6 +1663,20 @@ |
|
|
@comment mcheck.h |
|
|
@comment GNU |
|
|
@deftypefun void mtrace (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtsenv{} @mtasurace{:mtrace} @mtasuconst{:malloc_hooks} @mtuinit{}}@asunsafe{@asuinit{} @ascuheap{} @asucorrupt{} @asulock{}}@acunsafe{@acuinit{} @acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c Like the mcheck hooks, these are not designed with thread safety in |
|
|
+@c mind, because the hook pointers are temporarily modified without |
|
|
+@c regard to other threads, signals or cancellation. |
|
|
+ |
|
|
+@c mtrace @mtuinit @mtasurace:mtrace @mtsenv @asuinit @ascuheap @asucorrupt @acuinit @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c __libc_secure_getenv dup @mtsenv |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c fopen dup @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c fcntl dup ok |
|
|
+@c setvbuf dup @aculock |
|
|
+@c fprintf dup (on newly-created stream) @aculock |
|
|
+@c __cxa_atexit (once) dup @asulock @aculock @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
When the @code{mtrace} function is called it looks for an environment |
|
|
variable named @code{MALLOC_TRACE}. This variable is supposed to |
|
|
contain a valid file name. The user must have write access. If the |
|
|
@@ -1194,6 +1700,11 @@ |
|
|
@comment mcheck.h |
|
|
@comment GNU |
|
|
@deftypefun void muntrace (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:mtrace} @mtasuconst{:malloc_hooks} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{} @aculock{} @acsfd{}}} |
|
|
+ |
|
|
+@c muntrace @mtasurace:mtrace @mtslocale @asucorrupt @ascuheap @acucorrupt @acsmem @aculock @acsfd |
|
|
+@c fprintf (fputs) dup @mtslocale @asucorrupt @ascuheap @acsmem @aculock @acucorrupt |
|
|
+@c fclose dup @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
The @code{muntrace} function can be called after @code{mtrace} was used |
|
|
to enable tracing the @code{malloc} calls. If no (successful) call of |
|
|
@code{mtrace} was made @code{muntrace} does nothing. |
|
|
@@ -1505,6 +2016,20 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun int obstack_init (struct obstack *@var{obstack-ptr}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{@acsmem{}}} |
|
|
+@c obstack_init @mtsrace:obstack-ptr @acsmem |
|
|
+@c _obstack_begin @acsmem |
|
|
+@c chunkfun = obstack_chunk_alloc (suggested malloc) |
|
|
+@c freefun = obstack_chunk_free (suggested free) |
|
|
+@c *chunkfun @acsmem |
|
|
+@c obstack_chunk_alloc user-supplied |
|
|
+@c *obstack_alloc_failed_handler user-supplied |
|
|
+@c -> print_and_abort (default) |
|
|
+@c |
|
|
+@c print_and_abort |
|
|
+@c _ dup @ascuintl |
|
|
+@c fxprintf dup @asucorrupt @aculock @acucorrupt |
|
|
+@c exit @acucorrupt? |
|
|
Initialize obstack @var{obstack-ptr} for allocation of objects. This |
|
|
function calls the obstack's @code{obstack_chunk_alloc} function. If |
|
|
allocation of memory fails, the function pointed to by |
|
|
@@ -1560,6 +2085,10 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun {void *} obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c obstack_alloc @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c obstack_blank dup @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c obstack_finish dup @mtsrace:obstack-ptr @acucorrupt |
|
|
This allocates an uninitialized block of @var{size} bytes in an obstack |
|
|
and returns its address. Here @var{obstack-ptr} specifies which obstack |
|
|
to allocate the block in; it is the address of the @code{struct obstack} |
|
|
@@ -1594,6 +2123,10 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun {void *} obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c obstack_copy @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c obstack_grow dup @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c obstack_finish dup @mtsrace:obstack-ptr @acucorrupt |
|
|
This allocates a block and initializes it by copying @var{size} |
|
|
bytes of data starting at @var{address}. It calls |
|
|
@code{obstack_alloc_failed_handler} if allocation of memory by |
|
|
@@ -1603,6 +2136,10 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun {void *} obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c obstack_copy0 @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c obstack_grow0 dup @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c obstack_finish dup @mtsrace:obstack-ptr @acucorrupt |
|
|
Like @code{obstack_copy}, but appends an extra byte containing a null |
|
|
character. This extra byte is not counted in the argument @var{size}. |
|
|
@end deftypefun |
|
|
@@ -1635,6 +2172,10 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
+@c obstack_free @mtsrace:obstack-ptr @acucorrupt |
|
|
+@c (obstack_free) @mtsrace:obstack-ptr @acucorrupt |
|
|
+@c *freefun dup user-supplied |
|
|
If @var{object} is a null pointer, everything allocated in the obstack |
|
|
is freed. Otherwise, @var{object} must be the address of an object |
|
|
allocated in the obstack. Then @var{object} is freed, along with |
|
|
@@ -1739,6 +2280,13 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c obstack_blank @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c _obstack_newchunk @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c *chunkfun dup @acsmem |
|
|
+@c *obstack_alloc_failed_handler dup user-supplied |
|
|
+@c *freefun |
|
|
+@c obstack_blank_fast dup @mtsrace:obstack-ptr |
|
|
The most basic function for adding to a growing object is |
|
|
@code{obstack_blank}, which adds space without initializing it. |
|
|
@end deftypefun |
|
|
@@ -1746,6 +2294,10 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c obstack_grow @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c memcpy ok |
|
|
To add a block of initialized space, use @code{obstack_grow}, which is |
|
|
the growing-object analogue of @code{obstack_copy}. It adds @var{size} |
|
|
bytes of data to the growing object, copying the contents from |
|
|
@@ -1755,6 +2307,12 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c obstack_grow0 @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c (no sequence point between storing NUL and incrementing next_free) |
|
|
+@c (multiple changes to next_free => @acucorrupt) |
|
|
+@c _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c memcpy ok |
|
|
This is the growing-object analogue of @code{obstack_copy0}. It adds |
|
|
@var{size} bytes copied from @var{data}, followed by an additional null |
|
|
character. |
|
|
@@ -1763,6 +2321,10 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c obstack_1grow @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c obstack_1grow_fast dup @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
To add one character at a time, use the function @code{obstack_1grow}. |
|
|
It adds a single byte containing @var{c} to the growing object. |
|
|
@end deftypefun |
|
|
@@ -1770,6 +2332,10 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun void obstack_ptr_grow (struct obstack *@var{obstack-ptr}, void *@var{data}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c obstack_ptr_grow @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c obstack_ptr_grow_fast dup @mtsrace:obstack-ptr |
|
|
Adding the value of a pointer one can use the function |
|
|
@code{obstack_ptr_grow}. It adds @code{sizeof (void *)} bytes |
|
|
containing the value of @var{data}. |
|
|
@@ -1778,6 +2344,10 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun void obstack_int_grow (struct obstack *@var{obstack-ptr}, int @var{data}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c obstack_int_grow @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c _obstack_newchunk dup @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c obstack_int_grow_fast dup @mtsrace:obstack-ptr |
|
|
A single value of type @code{int} can be added by using the |
|
|
@code{obstack_int_grow} function. It adds @code{sizeof (int)} bytes to |
|
|
the growing object and initializes them with the value of @var{data}. |
|
|
@@ -1786,6 +2356,8 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun {void *} obstack_finish (struct obstack *@var{obstack-ptr}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
+@c obstack_finish @mtsrace:obstack-ptr @acucorrupt |
|
|
When you are finished growing the object, use the function |
|
|
@code{obstack_finish} to close it off and return its final address. |
|
|
|
|
|
@@ -1805,6 +2377,7 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}} |
|
|
This function returns the current size of the growing object, in bytes. |
|
|
Remember to call this function @emph{before} finishing the object. |
|
|
After it is finished, @code{obstack_object_size} will return zero. |
|
|
@@ -1848,6 +2421,7 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun int obstack_room (struct obstack *@var{obstack-ptr}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}} |
|
|
This returns the number of bytes that can be added safely to the current |
|
|
growing object (or to an object about to be started) in obstack |
|
|
@var{obstack} using the fast growth functions. |
|
|
@@ -1859,6 +2433,9 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c obstack_1grow_fast @mtsrace:obstack-ptr @acucorrupt @acsmem |
|
|
+@c (no sequence point between copying c and incrementing next_free) |
|
|
The function @code{obstack_1grow_fast} adds one byte containing the |
|
|
character @var{c} to the growing object in obstack @var{obstack-ptr}. |
|
|
@end deftypefun |
|
|
@@ -1866,6 +2443,8 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun void obstack_ptr_grow_fast (struct obstack *@var{obstack-ptr}, void *@var{data}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}} |
|
|
+@c obstack_ptr_grow_fast @mtsrace:obstack-ptr |
|
|
The function @code{obstack_ptr_grow_fast} adds @code{sizeof (void *)} |
|
|
bytes containing the value of @var{data} to the growing object in |
|
|
obstack @var{obstack-ptr}. |
|
|
@@ -1874,6 +2453,8 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun void obstack_int_grow_fast (struct obstack *@var{obstack-ptr}, int @var{data}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}} |
|
|
+@c obstack_int_grow_fast @mtsrace:obstack-ptr |
|
|
The function @code{obstack_int_grow_fast} adds @code{sizeof (int)} bytes |
|
|
containing the value of @var{data} to the growing object in obstack |
|
|
@var{obstack-ptr}. |
|
|
@@ -1882,6 +2463,8 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}} |
|
|
+@c obstack_blank_fast @mtsrace:obstack-ptr |
|
|
The function @code{obstack_blank_fast} adds @var{size} bytes to the |
|
|
growing object in obstack @var{obstack-ptr} without initializing them. |
|
|
@end deftypefun |
|
|
@@ -1909,7 +2492,7 @@ |
|
|
int room = obstack_room (obstack); |
|
|
if (room == 0) |
|
|
@{ |
|
|
- /* @r{Not enough room. Add one character slowly,} |
|
|
+ /* @r{Not enough room. Add one character slowly,} |
|
|
@r{which may copy to a new chunk and make room.} */ |
|
|
obstack_1grow (obstack, *ptr++); |
|
|
len--; |
|
|
@@ -1940,6 +2523,7 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun {void *} obstack_base (struct obstack *@var{obstack-ptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acsafe{}} |
|
|
This function returns the tentative address of the beginning of the |
|
|
currently growing object in @var{obstack-ptr}. If you finish the object |
|
|
immediately, it will have that address. If you make it larger first, it |
|
|
@@ -1953,6 +2537,7 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun {void *} obstack_next_free (struct obstack *@var{obstack-ptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acsafe{}} |
|
|
This function returns the address of the first free byte in the current |
|
|
chunk of obstack @var{obstack-ptr}. This is the end of the currently |
|
|
growing object. If no object is growing, @code{obstack_next_free} |
|
|
@@ -1962,6 +2547,8 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr}) |
|
|
+@c dup |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack-ptr}}@assafe{}@acsafe{}} |
|
|
This function returns the size in bytes of the currently growing object. |
|
|
This is equivalent to |
|
|
|
|
|
@@ -1986,6 +2573,7 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefn Macro int obstack_alignment_mask (struct obstack *@var{obstack-ptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The value is a bit mask; a bit that is 1 indicates that the corresponding |
|
|
bit in the address of an object should be 0. The mask value should be one |
|
|
less than a power of 2; the effect is that all object addresses are |
|
|
@@ -2053,6 +2641,7 @@ |
|
|
@comment obstack.h |
|
|
@comment GNU |
|
|
@deftypefn Macro int obstack_chunk_size (struct obstack *@var{obstack-ptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This returns the chunk size of the given obstack. |
|
|
@end deftypefn |
|
|
|
|
|
@@ -2172,6 +2761,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU, BSD |
|
|
@deftypefun {void *} alloca (size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The return value of @code{alloca} is the address of a block of @var{size} |
|
|
bytes of memory, allocated in the stack frame of the calling function. |
|
|
@end deftypefun |
|
|
@@ -2354,6 +2944,7 @@ |
|
|
@comment unistd.h |
|
|
@comment BSD |
|
|
@deftypefun int brk (void *@var{addr}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
@code{brk} sets the high end of the calling process' data segment to |
|
|
@var{addr}. |
|
|
@@ -2396,6 +2987,8 @@ |
|
|
@comment unistd.h |
|
|
@comment BSD |
|
|
@deftypefun void *sbrk (ptrdiff_t @var{delta}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+ |
|
|
This function is the same as @code{brk} except that you specify the new |
|
|
end of the data segment as an offset @var{delta} from the current end |
|
|
and on success the return value is the address of the resulting end of |
|
|
@@ -2535,6 +3128,7 @@ |
|
|
@comment sys/mman.h |
|
|
@comment POSIX.1b |
|
|
@deftypefun int mlock (const void *@var{addr}, size_t @var{len}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
@code{mlock} locks a range of the calling process' virtual pages. |
|
|
|
|
|
@@ -2588,6 +3182,7 @@ |
|
|
@comment sys/mman.h |
|
|
@comment POSIX.1b |
|
|
@deftypefun int munlock (const void *@var{addr}, size_t @var{len}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
@code{munlock} unlocks a range of the calling process' virtual pages. |
|
|
|
|
|
@@ -2600,6 +3195,7 @@ |
|
|
@comment sys/mman.h |
|
|
@comment POSIX.1b |
|
|
@deftypefun int mlockall (int @var{flags}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
@code{mlockall} locks all the pages in a process' virtual memory address |
|
|
space, and/or any that are added to it in the future. This includes the |
|
|
@@ -2676,6 +3272,7 @@ |
|
|
@comment sys/mman.h |
|
|
@comment POSIX.1b |
|
|
@deftypefun int munlockall (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
@code{munlockall} unlocks every page in the calling process' virtual |
|
|
address space and turn off @code{MCL_FUTURE} future locking mode. |
|
|
diff -urN glibc-2.17-c758a686/manual/message.texi glibc-2.17-c758a686/manual/message.texi |
|
|
--- glibc-2.17-c758a686/manual/message.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/message.texi 2014-09-12 16:10:06.043792722 -0400 |
|
|
@@ -2,9 +2,9 @@ |
|
|
@c %MENU% How to make the program speak the user's language |
|
|
@chapter Message Translation |
|
|
|
|
|
-The program's interface with the human should be designed in a way to |
|
|
-ease the human the task. One of the possibilities is to use messages in |
|
|
-whatever language the user prefers. |
|
|
+The program's interface with the user should be designed to ease the user's |
|
|
+task. One way to ease the user's task is to use messages in whatever |
|
|
+language the user prefers. |
|
|
|
|
|
Printing messages in different languages can be implemented in different |
|
|
ways. One could add all the different languages in the source code and |
|
|
@@ -40,7 +40,7 @@ |
|
|
@end itemize |
|
|
|
|
|
The two approaches mainly differ in the implementation of this last |
|
|
-step. The design decisions made for this influences the whole rest. |
|
|
+step. Decisions made in the last step influence the rest of the design. |
|
|
|
|
|
@menu |
|
|
* Message catalogs a la X/Open:: The @code{catgets} family of functions. |
|
|
@@ -86,7 +86,32 @@ |
|
|
@comment nl_types.h |
|
|
@comment X/Open |
|
|
@deftypefun nl_catd catopen (const char *@var{cat_name}, int @var{flag}) |
|
|
-The @code{catgets} function tries to locate the message data file names |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c catopen @mtsenv @ascuheap @acsmem |
|
|
+@c strchr ok |
|
|
+@c setlocale(,NULL) ok |
|
|
+@c getenv @mtsenv |
|
|
+@c strlen ok |
|
|
+@c alloca ok |
|
|
+@c stpcpy ok |
|
|
+@c malloc @ascuheap @acsmem |
|
|
+@c __open_catalog @ascuheap @acsmem |
|
|
+@c strchr ok |
|
|
+@c open_not_cancel_2 @acsfd |
|
|
+@c strlen ok |
|
|
+@c ENOUGH ok |
|
|
+@c alloca ok |
|
|
+@c memcpy ok |
|
|
+@c fxstat64 ok |
|
|
+@c __set_errno ok |
|
|
+@c mmap @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c read_not_cancel ok |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c munmap ok |
|
|
+@c close_not_cancel_no_status ok |
|
|
+@c free @ascuheap @acsmem |
|
|
+The @code{catopen} function tries to locate the message data file names |
|
|
@var{cat_name} and loads it when found. The return value is of an |
|
|
opaque type and can be used in calls to the other functions to refer to |
|
|
this loaded catalog. |
|
|
@@ -243,6 +268,7 @@ |
|
|
|
|
|
|
|
|
@deftypefun {char *} catgets (nl_catd @var{catalog_desc}, int @var{set}, int @var{message}, const char *@var{string}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The function @code{catgets} has to be used to access the massage catalog |
|
|
previously opened using the @code{catopen} function. The |
|
|
@var{catalog_desc} parameter must be a value previously returned by |
|
|
@@ -281,6 +307,11 @@ |
|
|
Usage}). |
|
|
|
|
|
@deftypefun int catclose (nl_catd @var{catalog_desc}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c catclose @ascuheap @acucorrupt @acsmem |
|
|
+@c __set_errno ok |
|
|
+@c munmap ok |
|
|
+@c free @ascuheap @acsmem |
|
|
The @code{catclose} function can be used to free the resources |
|
|
associated with a message catalog which previously was opened by a call |
|
|
to @code{catopen}. If the resources can be successfully freed the |
|
|
@@ -803,12 +834,14 @@ |
|
|
@comment libintl.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} gettext (const char *@var{msgid}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c Wrapper for dcgettext. |
|
|
The @code{gettext} function searches the currently selected message |
|
|
catalogs for a string which is equal to @var{msgid}. If there is such a |
|
|
string available it is returned. Otherwise the argument string |
|
|
@var{msgid} is returned. |
|
|
|
|
|
-Please note that all though the return value is @code{char *} the |
|
|
+Please note that although the return value is @code{char *} the |
|
|
returned string must not be changed. This broken type results from the |
|
|
history of the function and does not reflect the way the function should |
|
|
be used. |
|
|
@@ -850,6 +883,8 @@ |
|
|
@comment libintl.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} dgettext (const char *@var{domainname}, const char *@var{msgid}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c Wrapper for dcgettext. |
|
|
The @code{dgettext} functions acts just like the @code{gettext} |
|
|
function. It only takes an additional first argument @var{domainname} |
|
|
which guides the selection of the message catalogs which are searched |
|
|
@@ -864,6 +899,102 @@ |
|
|
@comment libintl.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} dcgettext (const char *@var{domainname}, const char *@var{msgid}, int @var{category}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c dcgettext @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c dcigettext @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_rwlock_rdlock @asulock @aculock |
|
|
+@c current_locale_name ok [protected from @mtslocale] |
|
|
+@c tfind ok |
|
|
+@c libc_rwlock_unlock ok |
|
|
+@c plural_lookup ok |
|
|
+@c plural_eval ok |
|
|
+@c rawmemchr ok |
|
|
+@c DETERMINE_SECURE ok, nothing |
|
|
+@c strcmp ok |
|
|
+@c strlen ok |
|
|
+@c getcwd @ascuheap @acsmem @acsfd |
|
|
+@c strchr ok |
|
|
+@c stpcpy ok |
|
|
+@c category_to_name ok |
|
|
+@c guess_category_value @mtsenv |
|
|
+@c getenv @mtsenv |
|
|
+@c current_locale_name dup ok [protected from @mtslocale by dcigettext] |
|
|
+@c strcmp ok |
|
|
+@c ENABLE_SECURE ok |
|
|
+@c _nl_find_domain @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_rwlock_rdlock dup @asulock @aculock |
|
|
+@c _nl_make_l10nflist dup @ascuheap @acsmem |
|
|
+@c libc_rwlock_unlock dup ok |
|
|
+@c _nl_load_domain @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock_recursive @aculock |
|
|
+@c libc_lock_unlock_recursive @aculock |
|
|
+@c open->open_not_cancel_2 @acsfd |
|
|
+@c fstat ok |
|
|
+@c mmap dup @acsmem |
|
|
+@c close->close_not_cancel_no_status @acsfd |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c read->read_not_cancel ok |
|
|
+@c munmap dup @acsmem |
|
|
+@c W dup ok |
|
|
+@c strlen dup ok |
|
|
+@c get_sysdep_segment_value ok |
|
|
+@c memcpy dup ok |
|
|
+@c hash_string dup ok |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_rwlock_init ok |
|
|
+@c _nl_find_msg dup @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_rwlock_fini ok |
|
|
+@c EXTRACT_PLURAL_EXPRESSION @ascuheap @acsmem |
|
|
+@c strstr dup ok |
|
|
+@c isspace ok |
|
|
+@c strtoul ok |
|
|
+@c PLURAL_PARSE @ascuheap @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c INIT_GERMANIC_PLURAL ok, nothing |
|
|
+@c the pre-C99 variant is @acucorrupt [protected from @mtuinit by dcigettext] |
|
|
+@c _nl_expand_alias dup @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c _nl_explode_name dup @ascuheap @acsmem |
|
|
+@c libc_rwlock_wrlock dup @asulock @aculock |
|
|
+@c free dup @asulock @aculock @acsfd @acsmem |
|
|
+@c _nl_find_msg @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c _nl_load_domain dup @mtsenv @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c strlen ok |
|
|
+@c hash_string ok |
|
|
+@c W ok |
|
|
+@c SWAP ok |
|
|
+@c bswap_32 ok |
|
|
+@c strcmp ok |
|
|
+@c get_output_charset @mtsenv @ascuheap @acsmem |
|
|
+@c getenv dup @mtsenv |
|
|
+@c strlen dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c memcpy dup ok |
|
|
+@c libc_rwlock_rdlock dup @asulock @aculock |
|
|
+@c libc_rwlock_unlock dup ok |
|
|
+@c libc_rwlock_wrlock dup @asulock @aculock |
|
|
+@c realloc @ascuheap @acsmem |
|
|
+@c strdup @ascuheap @acsmem |
|
|
+@c strstr ok |
|
|
+@c strcspn ok |
|
|
+@c mempcpy dup ok |
|
|
+@c norm_add_slashes dup ok |
|
|
+@c gconv_open @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c [protected from @mtslocale by dcigettext locale lock] |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c calloc @ascuheap @acsmem |
|
|
+@c gconv dup @acucorrupt [protected from @mtsrace and @asucorrupt by lock] |
|
|
+@c libc_lock_unlock ok |
|
|
+@c malloc @ascuheap @acsmem |
|
|
+@c mempcpy ok |
|
|
+@c memcpy ok |
|
|
+@c strcpy ok |
|
|
+@c libc_rwlock_wrlock @asulock @aculock |
|
|
+@c tsearch @ascuheap @acucorrupt @acsmem [protected from @mtsrace and @asucorrupt] |
|
|
+@c transcmp ok |
|
|
+@c strmp dup ok |
|
|
+@c free @ascuheap @acsmem |
|
|
The @code{dcgettext} adds another argument to those which |
|
|
@code{dgettext} takes. This argument @var{category} specifies the last |
|
|
piece of information needed to localize the message catalog. I.e., the |
|
|
@@ -967,7 +1098,7 @@ |
|
|
second best choice to fall back on the language of the developer and |
|
|
simply not translate any message. Instead a user might be better able |
|
|
to read the messages in another language and so the user of the program |
|
|
-should be able to define an precedence order of languages. |
|
|
+should be able to define a precedence order of languages. |
|
|
@end itemize |
|
|
|
|
|
We can divide the configuration actions in two parts: the one is |
|
|
@@ -988,6 +1119,13 @@ |
|
|
@comment libintl.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} textdomain (const char *@var{domainname}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
+@c textdomain @asulock @ascuheap @aculock @acsmem |
|
|
+@c libc_rwlock_wrlock @asulock @aculock |
|
|
+@c strcmp ok |
|
|
+@c strdup @ascuheap @acsmem |
|
|
+@c free @ascuheap @acsmem |
|
|
+@c libc_rwlock_unlock ok |
|
|
The @code{textdomain} function sets the default domain, which is used in |
|
|
all future @code{gettext} calls, to @var{domainname}. Please note that |
|
|
@code{dgettext} and @code{dcgettext} calls are not influenced if the |
|
|
@@ -1019,6 +1157,14 @@ |
|
|
@comment libintl.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} bindtextdomain (const char *@var{domainname}, const char *@var{dirname}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c bindtextdomain @ascuheap @acsmem |
|
|
+@c set_binding_values @ascuheap @acsmem |
|
|
+@c libc_rwlock_wrlock dup @asulock @aculock |
|
|
+@c strcmp dup ok |
|
|
+@c strdup dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
The @code{bindtextdomain} function can be used to specify the directory |
|
|
which contains the message catalogs for domain @var{domainname} for the |
|
|
different languages. To be correct, this is the directory where the |
|
|
@@ -1114,7 +1260,7 @@ |
|
|
extended @code{gettext} interface should be used. |
|
|
|
|
|
These extra functions are taking instead of the one key string two |
|
|
-strings and an numerical argument. The idea behind this is that using |
|
|
+strings and a numerical argument. The idea behind this is that using |
|
|
the numerical argument and the first string as a key, the implementation |
|
|
can select using rules specified by the translator the right plural |
|
|
form. The two string arguments then will be used to provide a return |
|
|
@@ -1134,6 +1280,8 @@ |
|
|
@comment libintl.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} ngettext (const char *@var{msgid1}, const char *@var{msgid2}, unsigned long int @var{n}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c Wrapper for dcngettext. |
|
|
The @code{ngettext} function is similar to the @code{gettext} function |
|
|
as it finds the message catalogs in the same way. But it takes two |
|
|
extra arguments. The @var{msgid1} parameter must contain the singular |
|
|
@@ -1157,6 +1305,8 @@ |
|
|
@comment libintl.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} dngettext (const char *@var{domain}, const char *@var{msgid1}, const char *@var{msgid2}, unsigned long int @var{n}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c Wrapper for dcngettext. |
|
|
The @code{dngettext} is similar to the @code{dgettext} function in the |
|
|
way the message catalog is selected. The difference is that it takes |
|
|
two extra parameter to provide the correct plural form. These two |
|
|
@@ -1166,6 +1316,8 @@ |
|
|
@comment libintl.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} dcngettext (const char *@var{domain}, const char *@var{msgid1}, const char *@var{msgid2}, unsigned long int @var{n}, int @var{category}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c Wrapper for dcigettext. |
|
|
The @code{dcngettext} is similar to the @code{dcgettext} function in the |
|
|
way the message catalog is selected. The difference is that it takes |
|
|
two extra parameter to provide the correct plural form. These two |
|
|
@@ -1422,6 +1574,9 @@ |
|
|
@comment libintl.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} bind_textdomain_codeset (const char *@var{domainname}, const char *@var{codeset}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c bind_textdomain_codeset @ascuheap @acsmem |
|
|
+@c set_binding_values dup @ascuheap @acsmem |
|
|
The @code{bind_textdomain_codeset} function can be used to specify the |
|
|
output character set for message catalogs for domain @var{domainname}. |
|
|
The @var{codeset} argument must be a valid codeset name which can be used |
|
|
@@ -1429,7 +1584,7 @@ |
|
|
|
|
|
If the @var{codeset} parameter is the null pointer, |
|
|
@code{bind_textdomain_codeset} returns the currently selected codeset |
|
|
-for the domain with the name @var{domainname}. It returns @code{NULL} if |
|
|
+for the domain with the name @var{domainname}. It returns @code{NULL} if |
|
|
no codeset has yet been selected. |
|
|
|
|
|
The @code{bind_textdomain_codeset} function can be used several times. |
|
|
@@ -1441,7 +1596,8 @@ |
|
|
allocated internally in the function and must not be changed by the |
|
|
user. If the system went out of core during the execution of |
|
|
@code{bind_textdomain_codeset}, the return value is @code{NULL} and the |
|
|
-global variable @var{errno} is set accordingly. @end deftypefun |
|
|
+global variable @var{errno} is set accordingly. |
|
|
+@end deftypefun |
|
|
|
|
|
|
|
|
@node GUI program problems |
|
|
diff -urN glibc-2.17-c758a686/manual/nss.texi glibc-2.17-c758a686/manual/nss.texi |
|
|
--- glibc-2.17-c758a686/manual/nss.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/nss.texi 2014-09-12 16:10:25.996741462 -0400 |
|
|
@@ -10,7 +10,7 @@ |
|
|
using files (e.g., @file{/etc/passwd}), but other nameservices (like the |
|
|
Network Information Service (NIS) and the Domain Name Service (DNS)) |
|
|
became popular, and were hacked into the C library, usually with a fixed |
|
|
-search order (@pxref{frobnicate, , ,jargon, The Jargon File}). |
|
|
+search order. |
|
|
|
|
|
@Theglibc{} contains a cleaner solution of this problem. It is |
|
|
designed after a method used by Sun Microsystems in the C library of |
|
|
diff -urN glibc-2.17-c758a686/manual/pattern.texi glibc-2.17-c758a686/manual/pattern.texi |
|
|
--- glibc-2.17-c758a686/manual/pattern.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/pattern.texi 2014-09-12 16:10:06.045792717 -0400 |
|
|
@@ -28,6 +28,38 @@ |
|
|
@comment fnmatch.h |
|
|
@comment POSIX.2 |
|
|
@deftypefun int fnmatch (const char *@var{pattern}, const char *@var{string}, int @var{flags}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c fnmatch @mtsenv @mtslocale @ascuheap @acsmem |
|
|
+@c strnlen dup ok |
|
|
+@c mbsrtowcs |
|
|
+@c memset dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c mbsinit dup ok |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c FCT = internal_fnwmatch @mtsenv @mtslocale @ascuheap @acsmem |
|
|
+@c FOLD @mtslocale |
|
|
+@c towlower @mtslocale |
|
|
+@c EXT @mtsenv @mtslocale @ascuheap @acsmem |
|
|
+@c STRLEN = wcslen dup ok |
|
|
+@c getenv @mtsenv |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c MEMPCPY = wmempcpy dup ok |
|
|
+@c FCT dup @mtsenv @mtslocale @ascuheap @acsmem |
|
|
+@c STRCAT = wcscat dup ok |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c END @mtsenv |
|
|
+@c getenv @mtsenv |
|
|
+@c MEMCHR = wmemchr dup ok |
|
|
+@c getenv @mtsenv |
|
|
+@c IS_CHAR_CLASS = is_char_class @mtslocale |
|
|
+@c wctype @mtslocale |
|
|
+@c BTOWC ok |
|
|
+@c ISWCTYPE ok |
|
|
+@c auto findidx dup ok |
|
|
+@c elem_hash dup ok |
|
|
+@c memcmp dup ok |
|
|
+@c collseq_table_lookup dup ok |
|
|
+@c NO_LEADING_PERIOD ok |
|
|
This function tests whether the string @var{string} matches the pattern |
|
|
@var{pattern}. It returns @code{0} if they do match; otherwise, it |
|
|
returns the nonzero value @code{FNM_NOMATCH}. The arguments |
|
|
@@ -36,11 +68,8 @@ |
|
|
The argument @var{flags} is a combination of flag bits that alter the |
|
|
details of matching. See below for a list of the defined flags. |
|
|
|
|
|
-In @theglibc{}, @code{fnmatch} cannot experience an ``error''---it |
|
|
-always returns an answer for whether the match succeeds. However, other |
|
|
-implementations of @code{fnmatch} might sometimes report ``errors''. |
|
|
-They would do so by returning nonzero values that are not equal to |
|
|
-@code{FNM_NOMATCH}. |
|
|
+In @theglibc{}, @code{fnmatch} might sometimes report ``errors'' by |
|
|
+returning nonzero values that are not equal to @code{FNM_NOMATCH}. |
|
|
@end deftypefun |
|
|
|
|
|
These are the available flags for the @var{flags} argument: |
|
|
@@ -234,6 +263,12 @@ |
|
|
(*) (const char *,} @w{struct stat *)}}. |
|
|
|
|
|
This is a GNU extension. |
|
|
+ |
|
|
+@item gl_flags |
|
|
+The flags used when @code{glob} was called. In addition, @code{GLOB_MAGCHAR} |
|
|
+might be set. See @ref{Flags for Globbing} for more details. |
|
|
+ |
|
|
+This is a GNU extension. |
|
|
@end table |
|
|
@end deftp |
|
|
|
|
|
@@ -312,12 +347,75 @@ |
|
|
(*) (const char *,} @w{struct stat64 *)}}. |
|
|
|
|
|
This is a GNU extension. |
|
|
+ |
|
|
+@item gl_flags |
|
|
+The flags used when @code{glob} was called. In addition, @code{GLOB_MAGCHAR} |
|
|
+might be set. See @ref{Flags for Globbing} for more details. |
|
|
+ |
|
|
+This is a GNU extension. |
|
|
@end table |
|
|
@end deftp |
|
|
|
|
|
@comment glob.h |
|
|
@comment POSIX.2 |
|
|
@deftypefun int glob (const char *@var{pattern}, int @var{flags}, int (*@var{errfunc}) (const char *@var{filename}, int @var{error-code}), glob_t *@var{vector-ptr}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtsenv{} @mtascusig{:ALRM} @mtascutimer{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c glob @mtasurace:utent @mtsenv @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c strlen dup ok |
|
|
+@c strchr dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c mempcpy dup ok |
|
|
+@c next_brace_sub ok |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c globfree dup @asucorrupt @ascuheap @acucorrupt @acsmem |
|
|
+@c glob_pattern_p ok |
|
|
+@c glob_pattern_type dup ok |
|
|
+@c getenv dup @mtsenv |
|
|
+@c GET_LOGIN_NAME_MAX ok |
|
|
+@c getlogin_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c GETPW_R_SIZE_MAX ok |
|
|
+@c getpwnam_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c memcpy dup ok |
|
|
+@c memchr dup ok |
|
|
+@c *pglob->gl_stat user-supplied |
|
|
+@c stat64 dup ok |
|
|
+@c S_ISDIR dup ok |
|
|
+@c strdup dup @ascuheap @acsmem |
|
|
+@c glob_pattern_type ok |
|
|
+@c glob_in_dir @mtsenv @mtslocale @asucorrupt @ascuheap @acucorrupt @acsfd @acsmem |
|
|
+@c strlen dup ok |
|
|
+@c glob_pattern_type dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c mempcpy dup ok |
|
|
+@c *pglob->gl_stat user-supplied |
|
|
+@c stat64 dup ok |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c *pglob->gl_opendir user-supplied |
|
|
+@c opendir dup @ascuheap @acsmem @acsfd |
|
|
+@c dirfd dup ok |
|
|
+@c *pglob->gl_readdir user-supplied |
|
|
+@c CONVERT_DIRENT_DIRENT64 ok |
|
|
+@c readdir64 ok [protected by exclusive use of the stream] |
|
|
+@c REAL_DIR_ENTRY ok |
|
|
+@c DIRENT_MIGHT_BE_DIR ok |
|
|
+@c fnmatch dup @mtsenv @mtslocale @ascuheap @acsmem |
|
|
+@c DIRENT_MIGHT_BE_SYMLINK ok |
|
|
+@c link_exists_p ok |
|
|
+@c link_exists2_p ok |
|
|
+@c strlen dup ok |
|
|
+@c mempcpy dup ok |
|
|
+@c *pglob->gl_stat user-supplied |
|
|
+@c fxstatat64 dup ok |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c pglob->gl_closedir user-supplied |
|
|
+@c closedir @ascuheap @acsmem @acsfd |
|
|
+@c prefix_array dup @asucorrupt @ascuheap @acucorrupt @acsmem |
|
|
+@c strlen dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c mempcpy dup ok |
|
|
+@c strcpy dup ok |
|
|
The function @code{glob} does globbing using the pattern @var{pattern} |
|
|
in the current directory. It puts the result in a newly allocated |
|
|
vector, and stores the size and address of this vector into |
|
|
@@ -389,6 +487,8 @@ |
|
|
@comment glob.h |
|
|
@comment GNU |
|
|
@deftypefun int glob64 (const char *@var{pattern}, int @var{flags}, int (*@var{errfunc}) (const char *@var{filename}, int @var{error-code}), glob64_t *@var{vector-ptr}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtsenv{} @mtascusig{:ALRM} @mtascutimer{} @mtslocale{}}@asunsafe{@ascudlopen{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c Same code as glob, but with glob64_t #defined as glob_t. |
|
|
The @code{glob64} function was added as part of the Large File Summit |
|
|
extensions but is not part of the original LFS proposal. The reason for |
|
|
this is simple: it is not necessary. The necessity for a @code{glob64} |
|
|
@@ -408,10 +508,12 @@ |
|
|
@node Flags for Globbing |
|
|
@subsection Flags for Globbing |
|
|
|
|
|
-This section describes the flags that you can specify in the |
|
|
+This section describes the standard flags that you can specify in the |
|
|
@var{flags} argument to @code{glob}. Choose the flags you want, |
|
|
and combine them with the C bitwise OR operator @code{|}. |
|
|
|
|
|
+Note that there are @ref{More Flags for Globbing} available as GNU extensions. |
|
|
+ |
|
|
@vtable @code |
|
|
@comment glob.h |
|
|
@comment POSIX.2 |
|
|
@@ -481,13 +583,6 @@ |
|
|
|
|
|
@comment glob.h |
|
|
@comment POSIX.2 |
|
|
-@item GLOB_NOSORT |
|
|
-Don't sort the file names; return them in no particular order. |
|
|
-(In practice, the order will depend on the order of the entries in |
|
|
-the directory.) The only reason @emph{not} to sort is to save time. |
|
|
- |
|
|
-@comment glob.h |
|
|
-@comment POSIX.2 |
|
|
@item GLOB_NOESCAPE |
|
|
Don't treat the @samp{\} character specially in patterns. Normally, |
|
|
@samp{\} quotes the following character, turning off its special meaning |
|
|
@@ -500,6 +595,13 @@ |
|
|
@code{glob} does its work by calling the function @code{fnmatch} |
|
|
repeatedly. It handles the flag @code{GLOB_NOESCAPE} by turning on the |
|
|
@code{FNM_NOESCAPE} flag in calls to @code{fnmatch}. |
|
|
+ |
|
|
+@comment glob.h |
|
|
+@comment POSIX.2 |
|
|
+@item GLOB_NOSORT |
|
|
+Don't sort the file names; return them in no particular order. |
|
|
+(In practice, the order will depend on the order of the entries in |
|
|
+the directory.) The only reason @emph{not} to sort is to save time. |
|
|
@end vtable |
|
|
|
|
|
@node More Flags for Globbing |
|
|
@@ -651,6 +753,9 @@ |
|
|
@comment glob.h |
|
|
@comment POSIX.2 |
|
|
@deftypefun void globfree (glob_t *@var{pglob}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c globfree dup @asucorrupt @ascuheap @acucorrupt @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
The @code{globfree} function frees all resources allocated by previous |
|
|
calls to @code{glob} associated with the object pointed to by |
|
|
@var{pglob}. This function should be called whenever the currently used |
|
|
@@ -660,6 +765,7 @@ |
|
|
@comment glob.h |
|
|
@comment GNU |
|
|
@deftypefun void globfree64 (glob64_t *@var{pglob}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
This function is equivalent to @code{globfree} but it frees records of |
|
|
type @code{glob64_t} which were allocated by @code{glob64}. |
|
|
@end deftypefun |
|
|
@@ -722,6 +828,250 @@ |
|
|
@comment regex.h |
|
|
@comment POSIX.2 |
|
|
@deftypefun int regcomp (regex_t *restrict @var{compiled}, const char *restrict @var{pattern}, int @var{cflags}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c All of the issues have to do with memory allocation and multi-byte |
|
|
+@c character handling present in the input string, or implied by ranges |
|
|
+@c or inverted character classes. |
|
|
+@c (re_)malloc @ascuheap @acsmem |
|
|
+@c re_compile_internal @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c (re_)realloc @ascuheap @acsmem [no @asucorrupt @acucorrupt for we zero the buffer] |
|
|
+@c init_dfa @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c (re_)malloc @ascuheap @acsmem |
|
|
+@c calloc @ascuheap @acsmem |
|
|
+@c _NL_CURRENT ok |
|
|
+@c _NL_CURRENT_WORD ok |
|
|
+@c btowc @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c libc_lock_init ok |
|
|
+@c re_string_construct @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c re_string_construct_common ok |
|
|
+@c re_string_realloc_buffers @ascuheap @acsmem |
|
|
+@c (re_)realloc dup @ascuheap @acsmem |
|
|
+@c build_wcs_upper_buffer @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c isascii ok |
|
|
+@c mbsinit ok |
|
|
+@c toupper ok |
|
|
+@c mbrtowc dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c iswlower @mtslocale |
|
|
+@c towupper @mtslocale |
|
|
+@c wcrtomb dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c (re_)malloc dup @ascuheap @acsmem |
|
|
+@c build_upper_buffer ok (@mtslocale but optimized) |
|
|
+@c islower ok |
|
|
+@c toupper ok |
|
|
+@c build_wcs_buffer @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c mbrtowc dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c re_string_translate_buffer ok |
|
|
+@c parse @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c fetch_token @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c peek_token @mtslocale |
|
|
+@c re_string_eoi ok |
|
|
+@c re_string_peek_byte ok |
|
|
+@c re_string_cur_idx ok |
|
|
+@c re_string_length ok |
|
|
+@c re_string_peek_byte_case @mtslocale |
|
|
+@c re_string_peek_byte dup ok |
|
|
+@c re_string_is_single_byte_char ok |
|
|
+@c isascii ok |
|
|
+@c re_string_peek_byte dup ok |
|
|
+@c re_string_wchar_at ok |
|
|
+@c re_string_skip_bytes ok |
|
|
+@c re_string_skip_bytes dup ok |
|
|
+@c parse_reg_exp @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c parse_branch @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c parse_expression @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c create_token_tree dup @ascuheap @acsmem |
|
|
+@c re_string_eoi dup ok |
|
|
+@c re_string_first_byte ok |
|
|
+@c fetch_token dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c create_tree dup @ascuheap @acsmem |
|
|
+@c parse_sub_exp @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c fetch_token dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c parse_reg_exp dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c postorder() @ascuheap @acsmem |
|
|
+@c free_tree @ascuheap @acsmem |
|
|
+@c free_token dup @ascuheap @acsmem |
|
|
+@c create_tree dup @ascuheap @acsmem |
|
|
+@c parse_bracket_exp @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c _NL_CURRENT dup ok |
|
|
+@c _NL_CURRENT_WORD dup ok |
|
|
+@c calloc dup @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c peek_token_bracket ok |
|
|
+@c re_string_eoi dup ok |
|
|
+@c re_string_peek_byte dup ok |
|
|
+@c re_string_first_byte dup ok |
|
|
+@c re_string_cur_idx dup ok |
|
|
+@c re_string_length dup ok |
|
|
+@c re_string_skip_bytes dup ok |
|
|
+@c bitset_set ok |
|
|
+@c re_string_skip_bytes ok |
|
|
+@c parse_bracket_element @mtslocale |
|
|
+@c re_string_char_size_at ok |
|
|
+@c re_string_wchar_at dup ok |
|
|
+@c re_string_skip_bytes dup ok |
|
|
+@c parse_bracket_symbol @mtslocale |
|
|
+@c re_string_eoi dup ok |
|
|
+@c re_string_fetch_byte_case @mtslocale |
|
|
+@c re_string_fetch_byte ok |
|
|
+@c re_string_first_byte dup ok |
|
|
+@c isascii ok |
|
|
+@c re_string_char_size_at dup ok |
|
|
+@c re_string_skip_bytes dup ok |
|
|
+@c re_string_fetch_byte dup ok |
|
|
+@c re_string_peek_byte dup ok |
|
|
+@c re_string_skip_bytes dup ok |
|
|
+@c peek_token_bracket dup ok |
|
|
+@c auto build_range_exp @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c auto lookup_collation_sequence_value @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c btowc dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c collseq_table_lookup ok |
|
|
+@c auto seek_collating_symbol_entry dup ok |
|
|
+@c (re_)realloc dup @ascuheap @acsmem |
|
|
+@c collseq_table_lookup dup ok |
|
|
+@c bitset_set dup ok |
|
|
+@c (re_)realloc dup @ascuheap @acsmem |
|
|
+@c build_equiv_class @mtslocale @ascuheap @acsmem |
|
|
+@c _NL_CURRENT ok |
|
|
+@c auto findidx ok |
|
|
+@c bitset_set dup ok |
|
|
+@c (re_)realloc dup @ascuheap @acsmem |
|
|
+@c auto build_collating_symbol @ascuheap @acsmem |
|
|
+@c auto seek_collating_symbol_entry ok |
|
|
+@c bitset_set dup ok |
|
|
+@c (re_)realloc dup @ascuheap @acsmem |
|
|
+@c build_charclass @mtslocale @ascuheap @acsmem |
|
|
+@c (re_)realloc dup @ascuheap @acsmem |
|
|
+@c bitset_set dup ok |
|
|
+@c isalnum ok |
|
|
+@c iscntrl ok |
|
|
+@c isspace ok |
|
|
+@c isalpha ok |
|
|
+@c isdigit ok |
|
|
+@c isprint ok |
|
|
+@c isupper ok |
|
|
+@c isblank ok |
|
|
+@c isgraph ok |
|
|
+@c ispunct ok |
|
|
+@c isxdigit ok |
|
|
+@c bitset_not ok |
|
|
+@c bitset_mask ok |
|
|
+@c create_token_tree dup @ascuheap @acsmem |
|
|
+@c create_tree dup @ascuheap @acsmem |
|
|
+@c free_charset dup @ascuheap @acsmem |
|
|
+@c init_word_char @mtslocale |
|
|
+@c isalnum ok |
|
|
+@c build_charclass_op @mtslocale @ascuheap @acsmem |
|
|
+@c calloc dup @ascuheap @acsmem |
|
|
+@c build_charclass dup @mtslocale @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c free_charset dup @ascuheap @acsmem |
|
|
+@c bitset_set dup ok |
|
|
+@c bitset_not dup ok |
|
|
+@c bitset_mask dup ok |
|
|
+@c create_token_tree dup @ascuheap @acsmem |
|
|
+@c create_tree dup @ascuheap @acsmem |
|
|
+@c parse_dup_op @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c re_string_cur_idx dup ok |
|
|
+@c fetch_number @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c fetch_token dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c re_string_set_index ok |
|
|
+@c postorder() @ascuheap @acsmem |
|
|
+@c free_tree dup @ascuheap @acsmem |
|
|
+@c mark_opt_subexp ok |
|
|
+@c duplicate_tree @ascuheap @acsmem |
|
|
+@c create_token_tree dup @ascuheap @acsmem |
|
|
+@c create_tree dup @ascuheap @acsmem |
|
|
+@c postorder() @ascuheap @acsmem |
|
|
+@c free_tree dup @ascuheap @acsmem |
|
|
+@c fetch_token dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c parse_branch dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c create_tree dup @ascuheap @acsmem |
|
|
+@c create_tree @ascuheap @acsmem |
|
|
+@c create_token_tree @ascuheap @acsmem |
|
|
+@c (re_)malloc dup @ascuheap @acsmem |
|
|
+@c analyze @ascuheap @acsmem |
|
|
+@c (re_)malloc dup @ascuheap @acsmem |
|
|
+@c preorder() @ascuheap @acsmem |
|
|
+@c optimize_subexps ok |
|
|
+@c calc_next ok |
|
|
+@c link_nfa_nodes @ascuheap @acsmem |
|
|
+@c re_node_set_init_1 @ascuheap @acsmem |
|
|
+@c (re_)malloc dup @ascuheap @acsmem |
|
|
+@c re_node_set_init_2 @ascuheap @acsmem |
|
|
+@c (re_)malloc dup @ascuheap @acsmem |
|
|
+@c postorder() @ascuheap @acsmem |
|
|
+@c lower_subexps @ascuheap @acsmem |
|
|
+@c lower_subexp @ascuheap @acsmem |
|
|
+@c create_tree dup @ascuheap @acsmem |
|
|
+@c calc_first @ascuheap @acsmem |
|
|
+@c re_dfa_add_node @ascuheap @acsmem |
|
|
+@c (re_)realloc dup @ascuheap @acsmem |
|
|
+@c re_node_set_init_empty ok |
|
|
+@c calc_eclosure @ascuheap @acsmem |
|
|
+@c calc_eclosure_iter @ascuheap @acsmem |
|
|
+@c re_node_set_alloc @ascuheap @acsmem |
|
|
+@c (re_)malloc dup @ascuheap @acsmem |
|
|
+@c duplicate_node_closure @ascuheap @acsmem |
|
|
+@c re_node_set_empty ok |
|
|
+@c duplicate_node @ascuheap @acsmem |
|
|
+@c re_dfa_add_node dup @ascuheap @acsmem |
|
|
+@c re_node_set_insert @ascuheap @acsmem |
|
|
+@c (re_)realloc dup @ascuheap @acsmem |
|
|
+@c search_duplicated_node ok |
|
|
+@c re_node_set_merge @ascuheap @acsmem |
|
|
+@c (re_)realloc dup @ascuheap @acsmem |
|
|
+@c re_node_set_free @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c re_node_set_insert dup @ascuheap @acsmem |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c calc_inveclosure @ascuheap @acsmem |
|
|
+@c re_node_set_init_empty dup ok |
|
|
+@c re_node_set_insert_last @ascuheap @acsmem |
|
|
+@c (re_)realloc dup @ascuheap @acsmem |
|
|
+@c optimize_utf8 ok |
|
|
+@c create_initial_state @ascuheap @acsmem |
|
|
+@c re_node_set_init_copy @ascuheap @acsmem |
|
|
+@c (re_)malloc dup @ascuheap @acsmem |
|
|
+@c re_node_set_init_empty dup ok |
|
|
+@c re_node_set_contains ok |
|
|
+@c re_node_set_merge dup @ascuheap @acsmem |
|
|
+@c re_acquire_state_context @ascuheap @acsmem |
|
|
+@c calc_state_hash ok |
|
|
+@c re_node_set_compare ok |
|
|
+@c create_cd_newstate @ascuheap @acsmem |
|
|
+@c calloc dup @ascuheap @acsmem |
|
|
+@c re_node_set_init_copy dup @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c free_state @ascuheap @acsmem |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c NOT_SATISFY_PREV_CONSTRAINT ok |
|
|
+@c re_node_set_remove_at ok |
|
|
+@c register_state @ascuheap @acsmem |
|
|
+@c re_node_set_alloc dup @ascuheap @acsmem |
|
|
+@c re_node_set_insert_last dup @ascuheap @acsmem |
|
|
+@c (re_)realloc dup @ascuheap @acsmem |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c free_workarea_compile @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c re_string_destruct @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c free_dfa_content @ascuheap @acsmem |
|
|
+@c free_token @ascuheap @acsmem |
|
|
+@c free_charset @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c re_compile_fastmap @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c re_compile_fastmap_iter @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c re_set_fastmap ok |
|
|
+@c tolower ok |
|
|
+@c mbrtowc dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c wcrtomb dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c towlower @mtslocale |
|
|
+@c _NL_CURRENT ok |
|
|
+@c (re_)free @ascuheap @acsmem |
|
|
The function @code{regcomp} ``compiles'' a regular expression into a |
|
|
data structure that you can use with @code{regexec} to match against a |
|
|
string. The compiled regular expression format is designed for |
|
|
@@ -871,6 +1221,247 @@ |
|
|
@comment regex.h |
|
|
@comment POSIX.2 |
|
|
@deftypefun int regexec (const regex_t *restrict @var{compiled}, const char *restrict @var{string}, size_t @var{nmatch}, regmatch_t @var{matchptr}[restrict], int @var{eflags}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c re_search_internal @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c re_string_allocate @ascuheap @acsmem |
|
|
+@c re_string_construct_common dup ok |
|
|
+@c re_string_realloc_buffers dup @ascuheap @acsmem |
|
|
+@c match_ctx_init @ascuheap @acsmem |
|
|
+@c (re_)malloc dup @ascuheap @acsmem |
|
|
+@c re_string_byte_at ok |
|
|
+@c re_string_first_byte dup ok |
|
|
+@c check_matching @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c re_string_cur_idx dup ok |
|
|
+@c acquire_init_state_context dup @ascuheap @acsmem |
|
|
+@c re_string_context_at ok |
|
|
+@c re_string_byte_at dup ok |
|
|
+@c bitset_contain ok |
|
|
+@c re_acquire_state_context dup @ascuheap @acsmem |
|
|
+@c check_subexp_matching_top @ascuheap @acsmem |
|
|
+@c match_ctx_add_subtop @ascuheap @acsmem |
|
|
+@c (re_)realloc dup @ascuheap @acsmem |
|
|
+@c calloc dup @ascuheap @acsmem |
|
|
+@c transit_state_bkref @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c re_string_cur_idx dup ok |
|
|
+@c re_string_context_at dup ok |
|
|
+@c NOT_SATISFY_NEXT_CONSTRAINT ok |
|
|
+@c get_subexp @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c re_string_get_buffer ok |
|
|
+@c search_cur_bkref_entry ok |
|
|
+@c clean_state_log_if_needed @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c extend_buffers @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c re_string_realloc_buffers dup @ascuheap @acsmem |
|
|
+@c (re_)realloc dup @ascuheap @acsmem |
|
|
+@c build_wcs_upper_buffer dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c build_upper_buffer dup ok (@mtslocale but optimized) |
|
|
+@c build_wcs_buffer dup @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c re_string_translate_buffer dup ok |
|
|
+@c get_subexp_sub @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c check_arrival @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c (re_)realloc dup @ascuheap @acsmem |
|
|
+@c re_string_context_at dup ok |
|
|
+@c re_node_set_init_1 dup @ascuheap @acsmem |
|
|
+@c check_arrival_expand_ecl @ascuheap @acsmem |
|
|
+@c re_node_set_alloc dup @ascuheap @acsmem |
|
|
+@c find_subexp_node ok |
|
|
+@c re_node_set_merge dup @ascuheap @acsmem |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c check_arrival_expand_ecl_sub @ascuheap @acsmem |
|
|
+@c re_node_set_contains dup ok |
|
|
+@c re_node_set_insert dup @ascuheap @acsmem |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c re_node_set_init_copy dup @ascuheap @acsmem |
|
|
+@c re_node_set_init_empty dup ok |
|
|
+@c expand_bkref_cache @ascuheap @acsmem |
|
|
+@c search_cur_bkref_entry dup ok |
|
|
+@c re_node_set_contains dup ok |
|
|
+@c re_node_set_init_1 dup @ascuheap @acsmem |
|
|
+@c check_arrival_expand_ecl dup @ascuheap @acsmem |
|
|
+@c re_node_set_merge dup @ascuheap @acsmem |
|
|
+@c re_node_set_init_copy dup @ascuheap @acsmem |
|
|
+@c re_node_set_insert dup @ascuheap @acsmem |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c re_acquire_state @ascuheap @acsmem |
|
|
+@c calc_state_hash dup ok |
|
|
+@c re_node_set_compare dup ok |
|
|
+@c create_ci_newstate @ascuheap @acsmem |
|
|
+@c calloc dup @ascuheap @acsmem |
|
|
+@c re_node_set_init_copy dup @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c register_state dup @ascuheap @acsmem |
|
|
+@c free_state dup @ascuheap @acsmem |
|
|
+@c re_acquire_state_context dup @ascuheap @acsmem |
|
|
+@c re_node_set_merge dup @ascuheap @acsmem |
|
|
+@c check_arrival_add_next_nodes @mtslocale @ascuheap @acsmem |
|
|
+@c re_node_set_init_empty dup ok |
|
|
+@c check_node_accept_bytes @mtslocale @ascuheap @acsmem |
|
|
+@c re_string_byte_at dup ok |
|
|
+@c re_string_char_size_at dup ok |
|
|
+@c re_string_elem_size_at @mtslocale |
|
|
+@c _NL_CURRENT_WORD dup ok |
|
|
+@c _NL_CURRENT dup ok |
|
|
+@c auto findidx dup ok |
|
|
+@c _NL_CURRENT_WORD dup ok |
|
|
+@c _NL_CURRENT dup ok |
|
|
+@c collseq_table_lookup dup ok |
|
|
+@c find_collation_sequence_value @mtslocale |
|
|
+@c _NL_CURRENT_WORD dup ok |
|
|
+@c _NL_CURRENT dup ok |
|
|
+@c auto findidx dup ok |
|
|
+@c wcscoll @mtslocale @ascuheap @acsmem |
|
|
+@c re_node_set_empty dup ok |
|
|
+@c re_node_set_merge dup @ascuheap @acsmem |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c re_node_set_insert dup @ascuheap @acsmem |
|
|
+@c re_acquire_state dup @ascuheap @acsmem |
|
|
+@c check_node_accept ok |
|
|
+@c re_string_byte_at dup ok |
|
|
+@c bitset_contain dup ok |
|
|
+@c re_string_context_at dup ok |
|
|
+@c NOT_SATISFY_NEXT_CONSTRAINT dup ok |
|
|
+@c match_ctx_add_entry @ascuheap @acsmem |
|
|
+@c (re_)realloc dup @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c clean_state_log_if_needed dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c extend_buffers dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c find_subexp_node dup ok |
|
|
+@c calloc dup @ascuheap @acsmem |
|
|
+@c check_arrival dup *** |
|
|
+@c match_ctx_add_sublast @ascuheap @acsmem |
|
|
+@c (re_)realloc dup @ascuheap @acsmem |
|
|
+@c re_acquire_state_context dup @ascuheap @acsmem |
|
|
+@c re_node_set_init_union @ascuheap @acsmem |
|
|
+@c (re_)malloc dup @ascuheap @acsmem |
|
|
+@c re_node_set_init_copy dup @ascuheap @acsmem |
|
|
+@c re_node_set_init_empty dup ok |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c check_subexp_matching_top dup @ascuheap @acsmem |
|
|
+@c check_halt_state_context ok |
|
|
+@c re_string_context_at dup ok |
|
|
+@c check_halt_node_context ok |
|
|
+@c NOT_SATISFY_NEXT_CONSTRAINT dup ok |
|
|
+@c re_string_eoi dup ok |
|
|
+@c extend_buffers dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c transit_state @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c transit_state_mb @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c re_string_context_at dup ok |
|
|
+@c NOT_SATISFY_NEXT_CONSTRAINT dup ok |
|
|
+@c check_node_accept_bytes dup @mtslocale @ascuheap @acsmem |
|
|
+@c re_string_cur_idx dup ok |
|
|
+@c clean_state_log_if_needed @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c re_node_set_init_union dup @ascuheap @acsmem |
|
|
+@c re_acquire_state_context dup @ascuheap @acsmem |
|
|
+@c re_string_fetch_byte dup ok |
|
|
+@c re_string_context_at dup ok |
|
|
+@c build_trtable @ascuheap @acsmem |
|
|
+@c (re_)malloc dup @ascuheap @acsmem |
|
|
+@c group_nodes_into_DFAstates @ascuheap @acsmem |
|
|
+@c bitset_empty dup ok |
|
|
+@c bitset_set dup ok |
|
|
+@c bitset_merge dup ok |
|
|
+@c bitset_set_all ok |
|
|
+@c bitset_clear ok |
|
|
+@c bitset_contain dup ok |
|
|
+@c bitset_copy ok |
|
|
+@c re_node_set_init_copy dup @ascuheap @acsmem |
|
|
+@c re_node_set_insert dup @ascuheap @acsmem |
|
|
+@c re_node_set_init_1 dup @ascuheap @acsmem |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c re_node_set_alloc dup @ascuheap @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c bitset_empty ok |
|
|
+@c re_node_set_empty dup ok |
|
|
+@c re_node_set_merge dup @ascuheap @acsmem |
|
|
+@c re_acquire_state_context dup @ascuheap @acsmem |
|
|
+@c bitset_merge ok |
|
|
+@c calloc dup @ascuheap @acsmem |
|
|
+@c bitset_contain dup ok |
|
|
+@c merge_state_with_log @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c re_string_cur_idx dup ok |
|
|
+@c re_node_set_init_union dup @ascuheap @acsmem |
|
|
+@c re_string_context_at dup ok |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c check_subexp_matching_top @ascuheap @acsmem |
|
|
+@c match_ctx_add_subtop dup @ascuheap @acsmem |
|
|
+@c transit_state_bkref dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c find_recover_state |
|
|
+@c re_string_cur_idx dup ok |
|
|
+@c re_string_skip_bytes dup ok |
|
|
+@c merge_state_with_log dup @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c check_halt_state_context dup ok |
|
|
+@c prune_impossible_nodes @mtslocale @ascuheap @acsmem |
|
|
+@c (re_)malloc dup @ascuheap @acsmem |
|
|
+@c sift_ctx_init ok |
|
|
+@c re_node_set_init_empty dup ok |
|
|
+@c sift_states_backward @mtslocale @ascuheap @acsmem |
|
|
+@c re_node_set_init_1 dup @ascuheap @acsmem |
|
|
+@c update_cur_sifted_state @mtslocale @ascuheap @acsmem |
|
|
+@c add_epsilon_src_nodes @ascuheap @acsmem |
|
|
+@c re_acquire_state dup @ascuheap @acsmem |
|
|
+@c re_node_set_alloc dup @ascuheap @acsmem |
|
|
+@c re_node_set_merge dup @ascuheap @acsmem |
|
|
+@c re_node_set_add_intersect @ascuheap @acsmem |
|
|
+@c (re_)realloc dup @ascuheap @acsmem |
|
|
+@c check_subexp_limits @ascuheap @acsmem |
|
|
+@c sub_epsilon_src_nodes @ascuheap @acsmem |
|
|
+@c re_node_set_init_empty dup ok |
|
|
+@c re_node_set_contains dup ok |
|
|
+@c re_node_set_add_intersect dup @ascuheap @acsmem |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c re_node_set_remove_at dup ok |
|
|
+@c re_node_set_contains dup ok |
|
|
+@c re_acquire_state dup @ascuheap @acsmem |
|
|
+@c sift_states_bkref @mtslocale @ascuheap @acsmem |
|
|
+@c search_cur_bkref_entry dup ok |
|
|
+@c check_dst_limits ok |
|
|
+@c search_cur_bkref_entry dup ok |
|
|
+@c check_dst_limits_calc_pos ok |
|
|
+@c check_dst_limits_calc_pos_1 ok |
|
|
+@c re_node_set_init_copy dup @ascuheap @acsmem |
|
|
+@c re_node_set_insert dup @ascuheap @acsmem |
|
|
+@c sift_states_backward dup @mtslocale @ascuheap @acsmem |
|
|
+@c merge_state_array dup @ascuheap @acsmem |
|
|
+@c re_node_set_remove ok |
|
|
+@c re_node_set_contains dup ok |
|
|
+@c re_node_set_remove_at dup ok |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c re_node_set_empty dup ok |
|
|
+@c build_sifted_states @mtslocale @ascuheap @acsmem |
|
|
+@c sift_states_iter_mb @mtslocale @ascuheap @acsmem |
|
|
+@c check_node_accept_bytes dup @mtslocale @ascuheap @acsmem |
|
|
+@c check_node_accept dup ok |
|
|
+@c check_dst_limits dup ok |
|
|
+@c re_node_set_insert dup @ascuheap @acsmem |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c check_halt_state_context dup ok |
|
|
+@c merge_state_array @ascuheap @acsmem |
|
|
+@c re_node_set_init_union dup @ascuheap @acsmem |
|
|
+@c re_acquire_state dup @ascuheap @acsmem |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c set_regs @ascuheap @acsmem |
|
|
+@c (re_)malloc dup @ascuheap @acsmem |
|
|
+@c re_node_set_init_empty dup ok |
|
|
+@c free_fail_stack_return @ascuheap @acsmem |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c update_regs ok |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c pop_fail_stack @ascuheap @acsmem |
|
|
+@c re_node_set_free dup @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c match_ctx_free @ascuheap @acsmem |
|
|
+@c match_ctx_clean @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c re_string_destruct dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock @aculock |
|
|
This function tries to match the compiled regular expression |
|
|
@code{*@var{compiled}} against @var{string}. |
|
|
|
|
|
@@ -1033,6 +1624,9 @@ |
|
|
@comment regex.h |
|
|
@comment POSIX.2 |
|
|
@deftypefun void regfree (regex_t *@var{compiled}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c (re_)free dup @ascuheap @acsmem |
|
|
+@c free_dfa_content dup @ascuheap @acsmem |
|
|
Calling @code{regfree} frees all the storage that @code{*@var{compiled}} |
|
|
points to. This includes various internal fields of the @code{regex_t} |
|
|
structure that aren't documented in this manual. |
|
|
@@ -1050,6 +1644,8 @@ |
|
|
@comment regex.h |
|
|
@comment POSIX.2 |
|
|
@deftypefun size_t regerror (int @var{errcode}, const regex_t *restrict @var{compiled}, char *restrict @var{buffer}, size_t @var{length}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c regerror calls gettext, strcmp and mempcpy or memcpy. |
|
|
This function produces an error message string for the error code |
|
|
@var{errcode}, and stores the string in @var{length} bytes of memory |
|
|
starting at @var{buffer}. For the @var{compiled} argument, supply the |
|
|
@@ -1215,6 +1811,145 @@ |
|
|
@comment wordexp.h |
|
|
@comment POSIX.2 |
|
|
@deftypefun int wordexp (const char *@var{words}, wordexp_t *@var{word-vector-ptr}, int @var{flags}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtasuconst{:@mtsenv{}} @mtsenv{} @mtascusig{:ALRM} @mtascutimer{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuintl{} @ascuheap{} @asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c wordexp @mtasurace:utent @mtasuconst:@mtsenv @mtsenv @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuintl @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c w_newword ok |
|
|
+@c wordfree dup @asucorrupt @ascuheap @acucorrupt @acsmem |
|
|
+@c calloc dup @ascuheap @acsmem |
|
|
+@c getenv dup @mtsenv |
|
|
+@c strcpy dup ok |
|
|
+@c parse_backslash @ascuheap @acsmem |
|
|
+@c w_addchar dup @ascuheap @acsmem |
|
|
+@c parse_dollars @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c w_addchar dup @ascuheap @acsmem |
|
|
+@c parse_arith @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c w_newword dup ok |
|
|
+@c parse_dollars dup @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c parse_backtick dup @ascuplugin @ascuheap @aculock @acsfd @acsmem |
|
|
+@c parse_qtd_backslash dup @ascuheap @acsmem |
|
|
+@c eval_expr @mtslocale |
|
|
+@c eval_expr_multidiv @mtslocale |
|
|
+@c eval_expr_val @mtslocale |
|
|
+@c isspace dup @mtslocale |
|
|
+@c eval_expr dup @mtslocale |
|
|
+@c isspace dup @mtslocale |
|
|
+@c isspace dup @mtslocale |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c w_addchar dup @ascuheap @acsmem |
|
|
+@c w_addstr dup @ascuheap @acsmem |
|
|
+@c itoa_word dup ok |
|
|
+@c parse_comm @ascuplugin @ascuheap @aculock @acsfd @acsmem |
|
|
+@c w_newword dup ok |
|
|
+@c pthread_setcancelstate @ascuplugin @ascuheap @acsmem |
|
|
+@c (disable cancellation around exec_comm; it may do_cancel the |
|
|
+@c second time, if async cancel is enabled) |
|
|
+@c THREAD_ATOMIC_CMPXCHG_VAL dup ok |
|
|
+@c CANCEL_ENABLED_AND_CANCELED_AND_ASYNCHRONOUS dup ok |
|
|
+@c do_cancel @ascuplugin @ascuheap @acsmem |
|
|
+@c THREAD_ATOMIC_BIT_SET dup ok |
|
|
+@c pthread_unwind @ascuplugin @ascuheap @acsmem |
|
|
+@c Unwind_ForcedUnwind if available @ascuplugin @ascuheap @acsmem |
|
|
+@c libc_unwind_longjmp otherwise |
|
|
+@c cleanups |
|
|
+@c exec_comm @ascuplugin @ascuheap @aculock @acsfd @acsmem |
|
|
+@c pipe2 dup ok |
|
|
+@c pipe dup ok |
|
|
+@c fork dup @ascuplugin @aculock |
|
|
+@c close dup @acsfd |
|
|
+@c on child: exec_comm_child -> exec or abort |
|
|
+@c waitpid dup ok |
|
|
+@c read dup ok |
|
|
+@c w_addmem dup @ascuheap @acsmem |
|
|
+@c strchr dup ok |
|
|
+@c w_addword dup @ascuheap @acsmem |
|
|
+@c w_newword dup ok |
|
|
+@c w_addchar dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c kill dup ok |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c parse_param @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c reads from __libc_argc and __libc_argv without guards |
|
|
+@c w_newword dup ok |
|
|
+@c isalpha dup @mtslocale^^ |
|
|
+@c w_addchar dup @ascuheap @acsmem |
|
|
+@c isalnum dup @mtslocale^^ |
|
|
+@c isdigit dup @mtslocale^^ |
|
|
+@c strchr dup ok |
|
|
+@c itoa_word dup ok |
|
|
+@c atoi dup @mtslocale |
|
|
+@c getpid dup ok |
|
|
+@c w_addstr dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c strlen dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c stpcpy dup ok |
|
|
+@c w_addword dup @ascuheap @acsmem |
|
|
+@c strdup dup @ascuheap @acsmem |
|
|
+@c getenv dup @mtsenv |
|
|
+@c parse_dollars dup @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c parse_tilde dup @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c fnmatch dup @mtsenv @mtslocale @ascuheap @acsmem |
|
|
+@c mempcpy dup ok |
|
|
+@c _ dup @ascuintl |
|
|
+@c fxprintf dup @aculock |
|
|
+@c setenv dup @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem |
|
|
+@c strspn dup ok |
|
|
+@c strcspn dup ok |
|
|
+@c parse_backtick @ascuplugin @ascuheap @aculock @acsfd @acsmem |
|
|
+@c w_newword dup ok |
|
|
+@c exec_comm dup @ascuplugin @ascuheap @aculock @acsfd @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c parse_qtd_backslash dup @ascuheap @acsmem |
|
|
+@c parse_backslash dup @ascuheap @acsmem |
|
|
+@c w_addchar dup @ascuheap @acsmem |
|
|
+@c parse_dquote @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c parse_dollars dup @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c parse_backtick dup @ascuplugin @ascuheap @aculock @acsfd @acsmem |
|
|
+@c parse_qtd_backslash dup @ascuheap @acsmem |
|
|
+@c w_addchar dup @ascuheap @acsmem |
|
|
+@c w_addword dup @ascuheap @acsmem |
|
|
+@c strdup dup @ascuheap @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c parse_squote dup @ascuheap @acsmem |
|
|
+@c w_addchar dup @ascuheap @acsmem |
|
|
+@c parse_tilde @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c strchr dup ok |
|
|
+@c w_addchar dup @ascuheap @acsmem |
|
|
+@c getenv dup @mtsenv |
|
|
+@c w_addstr dup @ascuheap @acsmem |
|
|
+@c strlen dup ok |
|
|
+@c w_addmem dup @ascuheap @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c mempcpy dup ok |
|
|
+@c getuid dup ok |
|
|
+@c getpwuid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c getpwnam_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c parse_glob @mtasurace:utent @mtasuconst:@mtsenv @mtsenv @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c strchr dup ok |
|
|
+@c parse_dollars dup @mtasuconst:@mtsenv @mtslocale @mtsenv @ascudlopen @ascuplugin @ascuintl @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c parse_qtd_backslash @ascuheap @acsmem |
|
|
+@c w_addchar dup @ascuheap @acsmem |
|
|
+@c parse_backslash dup @ascuheap @acsmem |
|
|
+@c w_addchar dup @ascuheap @acsmem |
|
|
+@c w_addword dup @ascuheap @acsmem |
|
|
+@c w_newword dup ok |
|
|
+@c do_parse_glob @mtasurace:utent @mtsenv @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @aculock @acsfd @acsmem |
|
|
+@c glob dup @mtasurace:utent @mtsenv @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @aculock @acsfd @acsmem [auto glob_t avoids @asucorrupt @acucorrupt] |
|
|
+@c w_addstr dup @ascuheap @acsmem |
|
|
+@c w_addchar dup @ascuheap @acsmem |
|
|
+@c globfree dup @ascuheap @acsmem [auto glob_t avoids @asucorrupt @acucorrupt] |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c w_newword dup ok |
|
|
+@c strdup dup @ascuheap @acsmem |
|
|
+@c w_addword dup @ascuheap @acsmem |
|
|
+@c wordfree dup @asucorrupt @ascuheap @acucorrupt @acsmem |
|
|
+@c strchr dup ok |
|
|
+@c w_addchar dup @ascuheap @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
Perform word expansion on the string @var{words}, putting the result in |
|
|
a newly allocated vector, and store the size and address of this vector |
|
|
into @code{*@var{word-vector-ptr}}. The argument @var{flags} is a |
|
|
@@ -1278,6 +2013,9 @@ |
|
|
@comment wordexp.h |
|
|
@comment POSIX.2 |
|
|
@deftypefun void wordfree (wordexp_t *@var{word-vector-ptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c wordfree dup @asucorrupt @ascuheap @acucorrupt @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
Free the storage used for the word-strings and vector that |
|
|
@code{*@var{word-vector-ptr}} points to. This does not free the |
|
|
structure @code{*@var{word-vector-ptr}} itself---only the other |
|
|
diff -urN glibc-2.17-c758a686/manual/pipe.texi glibc-2.17-c758a686/manual/pipe.texi |
|
|
--- glibc-2.17-c758a686/manual/pipe.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/pipe.texi 2014-09-12 16:10:06.048792709 -0400 |
|
|
@@ -56,6 +56,8 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int pipe (int @var{filedes}@t{[2]}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}} |
|
|
+@c On Linux, syscall pipe2. On HURD, call socketpair. |
|
|
The @code{pipe} function creates a pipe and puts the file descriptors |
|
|
for the reading and writing ends of the pipe (respectively) into |
|
|
@code{@var{filedes}[0]} and @code{@var{filedes}[1]}. |
|
|
@@ -108,6 +110,41 @@ |
|
|
@comment stdio.h |
|
|
@comment POSIX.2, SVID, BSD |
|
|
@deftypefun {FILE *} popen (const char *@var{command}, const char *@var{mode}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c popen @ascuheap @asucorrupt @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c _IO_init ok |
|
|
+@c _IO_no_init ok |
|
|
+@c _IO_old_init ok |
|
|
+@c _IO_lock_init ok |
|
|
+@c _IO_new_file_init @asucorrupt @acucorrupt @aculock @acsfd |
|
|
+@c _IO_link_in @asucorrupt @acucorrupt @aculock @acsfd |
|
|
+@c the linked list is guarded by a recursive lock; |
|
|
+@c it may get corrupted with async signals and cancellation |
|
|
+@c _IO_lock_lock dup @aculock |
|
|
+@c _IO_flockfile dup @aculock |
|
|
+@c _IO_funlockfile dup @aculock |
|
|
+@c _IO_lock_unlock dup @aculock |
|
|
+@c _IO_new_proc_open @asucorrupt @acucorrupt @aculock @acsfd |
|
|
+@c the linked list is guarded by a recursive lock; |
|
|
+ @c it may get corrupted with async signals and cancellation |
|
|
+@c _IO_file_is_open ok |
|
|
+@c pipe2 dup @acsfd |
|
|
+@c pipe dup @acsfd |
|
|
+@c _IO_fork=fork @aculock |
|
|
+@c _IO_close=close_not_cancel dup @acsfd |
|
|
+@c fcntl dup ok |
|
|
+@c _IO_lock_lock @aculock |
|
|
+@c _IO_lock_unlock @aculock |
|
|
+@c _IO_mask_flags ok [no @mtasurace:stream, nearly but sufficiently exclusive access] |
|
|
+@c _IO_un_link @asucorrupt @acucorrupt @aculock @acsfd |
|
|
+@c the linked list is guarded by a recursive lock; |
|
|
+@c it may get corrupted with async signals and cancellation |
|
|
+@c _IO_lock_lock dup @aculock |
|
|
+@c _IO_flockfile dup @aculock |
|
|
+@c _IO_funlockfile dup @aculock |
|
|
+@c _IO_lock_unlock dup @aculock |
|
|
+@c free dup @ascuheap @acsmem |
|
|
The @code{popen} function is closely related to the @code{system} |
|
|
function; see @ref{Running a Command}. It executes the shell command |
|
|
@var{command} as a subprocess. However, instead of waiting for the |
|
|
@@ -131,6 +168,77 @@ |
|
|
@comment stdio.h |
|
|
@comment POSIX.2, SVID, BSD |
|
|
@deftypefun int pclose (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @ascuplugin{} @asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c Although the stream cannot be used after the call, even in case of |
|
|
+@c async cancellation, because the stream must not be used after pclose |
|
|
+@c is called, other stdio linked lists and their locks may be left in |
|
|
+@c corrupt states; that's where the corrupt and lock annotations come |
|
|
+@c from. |
|
|
+@c |
|
|
+@c pclose @ascuheap @ascuplugin @asucorrupt @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c _IO_new_fclose @ascuheap @ascuplugin @asucorrupt @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c _IO_un_link dup @asucorrupt @acucorrupt @aculock @acsfd |
|
|
+@c _IO_acquire_lock dup @aculock |
|
|
+@c _IO_flockfile dup @aculock |
|
|
+@c _IO_file_close_it @ascuheap @ascuplugin @asucorrupt @aculock @acucorrupt @acsfd @acsmem |
|
|
+@c _IO_file_is_open dup ok |
|
|
+@c _IO_do_flush @asucorrupt @ascuplugin @acucorrupt |
|
|
+@c _IO_do_write @asucorrupt @acucorrupt |
|
|
+@c new_do_write @asucorrupt @acucorrupt |
|
|
+@c _IO_SYSSEEK ok |
|
|
+@c lseek64 dup ok |
|
|
+@c _IO_SYSWRITE ok |
|
|
+@c write_not_cancel dup ok |
|
|
+@c write dup ok |
|
|
+@c _IO_adjust_column ok |
|
|
+@c _IO_setg dup @asucorrupt @acucorrupt [no @mtasurace:stream, locked] |
|
|
+@c _IO_wdo_write @asucorrupt @ascuplugin @acucorrupt |
|
|
+@c _IO_new_do_write=_IO_do_write dup @asucorrupt @acucorrupt |
|
|
+@c *cc->__codecvt_do_out @ascuplugin |
|
|
+@c _IO_wsetg dup @asucorrupt @acucorrupt [no @mtasurace:stream, locked] |
|
|
+@c _IO_unsave_markers @ascuheap @asucorrupt @acucorrupt @acsmem |
|
|
+@c _IO_have_backup dup ok |
|
|
+@c _IO_free_backup_area dup @ascuheap @asucorrupt @acucorrupt @acsmem |
|
|
+@c _IO_SYSCLOSE @aculock @acucorrupt @acsfd |
|
|
+@c _IO_lock_lock dup @aculock |
|
|
+@c _IO_close=close_not_cancel dup @acsfd |
|
|
+@c _IO_lock_unlock dup @aculock |
|
|
+@c _IO_waitpid=waitpid_not_cancel dup ok |
|
|
+@c _IO_have_wbackup ok |
|
|
+@c _IO_free_wbackup_area @ascuheap @asucorrupt @acucorrupt @acsmem |
|
|
+@c _IO_in_backup dup ok |
|
|
+@c _IO_switch_to_main_wget_area @asucorrupt @acucorrupt |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c _IO_wsetb @asucorrupt @acucorrupt [no @mtasurace:stream, locked] |
|
|
+@c _IO_wsetg @asucorrupt @acucorrupt [no @mtasurace:stream, locked] |
|
|
+@c _IO_wsetp @asucorrupt @acucorrupt [no @mtasurace:stream, locked] |
|
|
+@c _IO_setb @asucorrupt @acucorrupt [no @mtasurace:stream, locked] |
|
|
+@c _IO_setg @asucorrupt @acucorrupt [no @mtasurace:stream, locked] |
|
|
+@c _IO_setp @asucorrupt @acucorrupt [no @mtasurace:stream, locked] |
|
|
+@c _IO_un_link dup @asucorrupt @acucorrupt @aculock @acsfd |
|
|
+@c _IO_release_lock dup @aculock |
|
|
+@c _IO_funlockfile dup @aculock |
|
|
+@c _IO_FINISH @ascuheap @ascuplugin @asucorrupt @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c _IO_new_file_finish @ascuheap @ascuplugin @asucorrupt @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c _IO_file_is_open dup ok |
|
|
+@c _IO_do_flush dup @ascuplugin @asucorrupt @acucorrupt |
|
|
+@c _IO_SYSCLOSE dup @aculock @acucorrupt @acsfd |
|
|
+@c _IO_default_finish @ascuheap @asucorrupt @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c FREE_BUF @acsmem |
|
|
+@c munmap dup @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c _IO_un_link dup @asucorrupt @acucorrupt @aculock @acsfd |
|
|
+@c _IO_lock_fini ok |
|
|
+@c libc_lock_fini_recursive ok |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c gconv_release_step ok |
|
|
+@c libc_lock_unlock dup @asulock @aculock |
|
|
+@c _IO_have_backup ok |
|
|
+@c _IO_free_backup_area @ascuheap @asucorrupt @acucorrupt @acsmem |
|
|
+@c _IO_in_backup ok |
|
|
+@c _IO_switch_to_main_get_area @asucorrupt @acucorrupt |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
The @code{pclose} function is used to close a stream created by @code{popen}. |
|
|
It waits for the child process to terminate and returns its status value, |
|
|
as for the @code{system} function. |
|
|
@@ -168,6 +276,8 @@ |
|
|
@comment sys/stat.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int mkfifo (const char *@var{filename}, mode_t @var{mode}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c On generic Posix, calls xmknod. |
|
|
The @code{mkfifo} function makes a FIFO special file with name |
|
|
@var{filename}. The @var{mode} argument is used to set the file's |
|
|
permissions; see @ref{Setting Permissions}. |
|
|
diff -urN glibc-2.17-c758a686/manual/platform.texi glibc-2.17-c758a686/manual/platform.texi |
|
|
--- glibc-2.17-c758a686/manual/platform.texi 2014-09-12 16:08:17.865070640 -0400 |
|
|
+++ glibc-2.17-c758a686/manual/platform.texi 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -15,6 +15,7 @@ |
|
|
operating system are declared in @file{sys/platform/ppc.h}. |
|
|
|
|
|
@deftypefun {uint64_t} __ppc_get_timebase (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Read the current value of the Time Base Register. |
|
|
|
|
|
The @dfn{Time Base Register} is a 64-bit register that stores a monotonically |
|
|
@@ -28,6 +29,17 @@ |
|
|
@end deftypefun |
|
|
|
|
|
@deftypefun {uint64_t} __ppc_get_timebase_freq (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtuinit{}}@asunsafe{@asucorrupt{:init}}@acunsafe{@acucorrupt{:init}}} |
|
|
+@c __ppc_get_timebase_freq=__get_timebase_freq @mtuinit @acsfd |
|
|
+@c __get_clockfreq @mtuinit @asucorrupt:init @acucorrupt:init @acsfd |
|
|
+@c the initialization of the static timebase_freq is not exactly |
|
|
+@c safe, because hp_timing_t cannot be atomically set up. |
|
|
+@c syscall:get_tbfreq ok |
|
|
+@c open dup @acsfd |
|
|
+@c read dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c memmem dup ok |
|
|
+@c close dup @acsfd |
|
|
Read the current frequency at which the Time Base Register is updated. |
|
|
|
|
|
This frequency is not related to the processor clock or the bus clock. |
|
|
@@ -42,17 +54,20 @@ |
|
|
Section 3.2}. |
|
|
|
|
|
@deftypefun {void} __ppc_yield (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Provide a hint that performance will probably be improved if shared resources |
|
|
dedicated to the executing processor are released for use by other processors. |
|
|
@end deftypefun |
|
|
|
|
|
@deftypefun {void} __ppc_mdoio (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Provide a hint that performance will probably be improved if shared resources |
|
|
dedicated to the executing processor are released until all outstanding storage |
|
|
accesses to caching-inhibited storage have been completed. |
|
|
@end deftypefun |
|
|
|
|
|
@deftypefun {void} __ppc_mdoom (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Provide a hint that performance will probably be improved if shared resources |
|
|
dedicated to the executing processor are released until all outstanding storage |
|
|
accesses to cacheable storage for which the data is not in the cache have been |
|
|
@@ -60,6 +75,7 @@ |
|
|
@end deftypefun |
|
|
|
|
|
@deftypefun {void} __ppc_set_ppr_med (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Set the Program Priority Register to medium value (default). |
|
|
|
|
|
The @dfn{Program Priority Register} (PPR) is a 64-bit register that controls |
|
|
@@ -73,9 +89,11 @@ |
|
|
@end deftypefun |
|
|
|
|
|
@deftypefun {void} __ppc_set_ppr_low (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Set the Program Priority Register to low value. |
|
|
@end deftypefun |
|
|
|
|
|
@deftypefun {void} __ppc_set_ppr_med_low (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Set the Program Priority Register to medium low value. |
|
|
@end deftypefun |
|
|
diff -urN glibc-2.17-c758a686/manual/process.texi glibc-2.17-c758a686/manual/process.texi |
|
|
--- glibc-2.17-c758a686/manual/process.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/process.texi 2014-09-12 16:10:06.044792719 -0400 |
|
|
@@ -1,4 +1,4 @@ |
|
|
-@node Processes, Job Control, Program Basics, Top |
|
|
+@node Processes, Inter-Process Communication, Program Basics, Top |
|
|
@c %MENU% How to create processes and run other programs |
|
|
@chapter Processes |
|
|
|
|
|
@@ -55,6 +55,43 @@ |
|
|
@comment ISO |
|
|
@deftypefun int system (const char *@var{command}) |
|
|
@pindex sh |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
+@c system @ascuplugin @ascuheap @asulock @aculock @acsmem |
|
|
+@c do_system @ascuplugin @ascuheap @asulock @aculock @acsmem |
|
|
+@c sigemptyset dup ok |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c ADD_REF ok |
|
|
+@c sigaction dup ok |
|
|
+@c SUB_REF ok |
|
|
+@c libc_lock_unlock @aculock |
|
|
+@c sigaddset dup ok |
|
|
+@c sigprocmask dup ok |
|
|
+@c CLEANUP_HANDLER @ascuplugin @ascuheap @acsmem |
|
|
+@c libc_cleanup_region_start @ascuplugin @ascuheap @acsmem |
|
|
+@c pthread_cleanup_push_defer @ascuplugin @ascuheap @acsmem |
|
|
+@c CANCELLATION_P @ascuplugin @ascuheap @acsmem |
|
|
+@c CANCEL_ENABLED_AND_CANCELED ok |
|
|
+@c do_cancel @ascuplugin @ascuheap @acsmem |
|
|
+@c cancel_handler ok |
|
|
+@c kill syscall ok |
|
|
+@c waitpid dup ok |
|
|
+@c libc_lock_lock ok |
|
|
+@c sigaction dup ok |
|
|
+@c libc_lock_unlock ok |
|
|
+@c FORK ok |
|
|
+@c clone syscall ok |
|
|
+@c waitpid dup ok |
|
|
+@c CLEANUP_RESET ok |
|
|
+@c libc_cleanup_region_end ok |
|
|
+@c pthread_cleanup_pop_restore ok |
|
|
+@c SINGLE_THREAD_P ok |
|
|
+@c LIBC_CANCEL_ASYNC @ascuplugin @ascuheap @acsmem |
|
|
+@c libc_enable_asynccancel @ascuplugin @ascuheap @acsmem |
|
|
+@c CANCEL_ENABLED_AND_CANCELED_AND_ASYNCHRONOUS dup ok |
|
|
+@c do_cancel dup @ascuplugin @ascuheap @acsmem |
|
|
+@c LIBC_CANCEL_RESET ok |
|
|
+@c libc_disable_asynccancel ok |
|
|
+@c lll_futex_wait dup ok |
|
|
This function executes @var{command} as a shell command. In @theglibc{}, |
|
|
it always uses the default shell @code{sh} to run the command. |
|
|
In particular, it searches the directories in @code{PATH} to find |
|
|
@@ -157,12 +194,14 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun pid_t getpid (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{getpid} function returns the process ID of the current process. |
|
|
@end deftypefun |
|
|
|
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun pid_t getppid (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{getppid} function returns the process ID of the parent of the |
|
|
current process. |
|
|
@end deftypefun |
|
|
@@ -177,6 +216,19 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun pid_t fork (void) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{}}@acunsafe{@aculock{}}} |
|
|
+@c The nptl/.../linux implementation safely collects fork_handlers into |
|
|
+@c an alloca()ed linked list and increments ref counters; it uses atomic |
|
|
+@c ops and retries, avoiding locking altogether. It then takes the |
|
|
+@c IO_list lock, resets the thread-local pid, and runs fork. The parent |
|
|
+@c restores the thread-local pid, releases the lock, and runs parent |
|
|
+@c handlers, decrementing the ref count and signaling futex wait if |
|
|
+@c requested by unregister_atfork. The child bumps the fork generation, |
|
|
+@c sets the thread-local pid, resets cpu clocks, initializes the robust |
|
|
+@c mutex list, the stream locks, the IO_list lock, the dynamic loader |
|
|
+@c lock, runs the child handlers, reseting ref counters to 1, and |
|
|
+@c initializes the fork lock. These are all safe, unless atfork |
|
|
+@c handlers themselves are unsafe. |
|
|
The @code{fork} function creates a new process. |
|
|
|
|
|
If the operation is successful, there are then both parent and child |
|
|
@@ -242,6 +294,9 @@ |
|
|
@comment unistd.h |
|
|
@comment BSD |
|
|
@deftypefun pid_t vfork (void) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{}}@acunsafe{@aculock{}}} |
|
|
+@c The vfork implementation proper is a safe syscall, but it may fall |
|
|
+@c back to fork if the vfork syscall is not available. |
|
|
The @code{vfork} function is similar to @code{fork} but on some systems |
|
|
it is more efficient; however, there are restrictions you must follow to |
|
|
use it safely. |
|
|
@@ -287,6 +342,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int execv (const char *@var{filename}, char *const @var{argv}@t{[]}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{execv} function executes the file named by @var{filename} as a |
|
|
new process image. |
|
|
|
|
|
@@ -305,6 +361,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int execl (const char *@var{filename}, const char *@var{arg0}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This is similar to @code{execv}, but the @var{argv} strings are |
|
|
specified individually instead of as an array. A null pointer must be |
|
|
passed as the last such argument. |
|
|
@@ -313,6 +370,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int execve (const char *@var{filename}, char *const @var{argv}@t{[]}, char *const @var{env}@t{[]}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This is similar to @code{execv}, but permits you to specify the environment |
|
|
for the new program explicitly as the @var{env} argument. This should |
|
|
be an array of strings in the same format as for the @code{environ} |
|
|
@@ -322,6 +380,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int execle (const char *@var{filename}, const char *@var{arg0}, @dots{}, char *const @var{env}@t{[]}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This is similar to @code{execl}, but permits you to specify the |
|
|
environment for the new program explicitly. The environment argument is |
|
|
passed following the null pointer that marks the last @var{argv} |
|
|
@@ -332,6 +391,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int execvp (const char *@var{filename}, char *const @var{argv}@t{[]}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
The @code{execvp} function is similar to @code{execv}, except that it |
|
|
searches the directories listed in the @code{PATH} environment variable |
|
|
(@pxref{Standard Environment}) to find the full file name of a |
|
|
@@ -345,6 +405,7 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int execlp (const char *@var{filename}, const char *@var{arg0}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This function is like @code{execl}, except that it performs the same |
|
|
file name searching as the @code{execvp} function. |
|
|
@end deftypefun |
|
|
@@ -462,6 +523,7 @@ |
|
|
@comment sys/wait.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun pid_t waitpid (pid_t @var{pid}, int *@var{status-ptr}, int @var{options}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{waitpid} function is used to request status information from a |
|
|
child process whose process ID is @var{pid}. Normally, the calling |
|
|
process is suspended until the child process makes status information |
|
|
@@ -565,6 +627,7 @@ |
|
|
@comment sys/wait.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun pid_t wait (int *@var{status-ptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This is a simplified version of @code{waitpid}, and is used to wait |
|
|
until any one child process terminates. The call: |
|
|
|
|
|
@@ -591,6 +654,7 @@ |
|
|
@comment sys/wait.h |
|
|
@comment BSD |
|
|
@deftypefun pid_t wait4 (pid_t @var{pid}, int *@var{status-ptr}, int @var{options}, struct rusage *@var{usage}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
If @var{usage} is a null pointer, @code{wait4} is equivalent to |
|
|
@code{waitpid (@var{pid}, @var{status-ptr}, @var{options})}. |
|
|
|
|
|
@@ -643,6 +707,7 @@ |
|
|
@comment sys/wait.h |
|
|
@comment POSIX.1 |
|
|
@deftypefn Macro int WIFEXITED (int @var{status}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro returns a nonzero value if the child process terminated |
|
|
normally with @code{exit} or @code{_exit}. |
|
|
@end deftypefn |
|
|
@@ -650,6 +715,7 @@ |
|
|
@comment sys/wait.h |
|
|
@comment POSIX.1 |
|
|
@deftypefn Macro int WEXITSTATUS (int @var{status}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
If @code{WIFEXITED} is true of @var{status}, this macro returns the |
|
|
low-order 8 bits of the exit status value from the child process. |
|
|
@xref{Exit Status}. |
|
|
@@ -658,6 +724,7 @@ |
|
|
@comment sys/wait.h |
|
|
@comment POSIX.1 |
|
|
@deftypefn Macro int WIFSIGNALED (int @var{status}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro returns a nonzero value if the child process terminated |
|
|
because it received a signal that was not handled. |
|
|
@xref{Signal Handling}. |
|
|
@@ -666,6 +733,7 @@ |
|
|
@comment sys/wait.h |
|
|
@comment POSIX.1 |
|
|
@deftypefn Macro int WTERMSIG (int @var{status}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
If @code{WIFSIGNALED} is true of @var{status}, this macro returns the |
|
|
signal number of the signal that terminated the child process. |
|
|
@end deftypefn |
|
|
@@ -673,6 +741,7 @@ |
|
|
@comment sys/wait.h |
|
|
@comment BSD |
|
|
@deftypefn Macro int WCOREDUMP (int @var{status}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro returns a nonzero value if the child process terminated |
|
|
and produced a core dump. |
|
|
@end deftypefn |
|
|
@@ -680,12 +749,14 @@ |
|
|
@comment sys/wait.h |
|
|
@comment POSIX.1 |
|
|
@deftypefn Macro int WIFSTOPPED (int @var{status}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro returns a nonzero value if the child process is stopped. |
|
|
@end deftypefn |
|
|
|
|
|
@comment sys/wait.h |
|
|
@comment POSIX.1 |
|
|
@deftypefn Macro int WSTOPSIG (int @var{status}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
If @code{WIFSTOPPED} is true of @var{status}, this macro returns the |
|
|
signal number of the signal that caused the child process to stop. |
|
|
@end deftypefn |
|
|
@@ -739,6 +810,7 @@ |
|
|
@comment sys/wait.h |
|
|
@comment BSD |
|
|
@deftypefun pid_t wait3 (union wait *@var{status-ptr}, int @var{options}, struct rusage *@var{usage}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
If @var{usage} is a null pointer, @code{wait3} is equivalent to |
|
|
@code{waitpid (-1, @var{status-ptr}, @var{options})}. |
|
|
|
|
|
diff -urN glibc-2.17-c758a686/manual/resource.texi glibc-2.17-c758a686/manual/resource.texi |
|
|
--- glibc-2.17-c758a686/manual/resource.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/resource.texi 2014-09-12 16:10:06.044792719 -0400 |
|
|
@@ -25,6 +25,8 @@ |
|
|
@comment sys/resource.h |
|
|
@comment BSD |
|
|
@deftypefun int getrusage (int @var{processes}, struct rusage *@var{rusage}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c On HURD, this calls task_info 3 times. On UNIX, it's a syscall. |
|
|
This function reports resource usage totals for processes specified by |
|
|
@var{processes}, storing the information in @code{*@var{rusage}}. |
|
|
|
|
|
@@ -129,9 +131,11 @@ |
|
|
@code{vtimes} and its @code{vtimes} data structure are declared in |
|
|
@file{sys/vtimes.h}. |
|
|
@pindex sys/vtimes.h |
|
|
-@comment vtimes.h |
|
|
|
|
|
-@deftypefun int vtimes (struct vtimes @var{current}, struct vtimes @var{child}) |
|
|
+@comment sys/vtimes.h |
|
|
+@deftypefun int vtimes (struct vtimes *@var{current}, struct vtimes *@var{child}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Calls getrusage twice. |
|
|
|
|
|
@code{vtimes} reports resource usage totals for a process. |
|
|
|
|
|
@@ -223,6 +227,8 @@ |
|
|
@comment sys/resource.h |
|
|
@comment BSD |
|
|
@deftypefun int getrlimit (int @var{resource}, struct rlimit *@var{rlp}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall on most systems. |
|
|
Read the current and maximum limits for the resource @var{resource} |
|
|
and store them in @code{*@var{rlp}}. |
|
|
|
|
|
@@ -237,6 +243,8 @@ |
|
|
@comment sys/resource.h |
|
|
@comment Unix98 |
|
|
@deftypefun int getrlimit64 (int @var{resource}, struct rlimit64 *@var{rlp}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall on most systems, wrapper to getrlimit otherwise. |
|
|
This function is similar to @code{getrlimit} but its second parameter is |
|
|
a pointer to a variable of type @code{struct rlimit64}, which allows it |
|
|
to read values which wouldn't fit in the member of a @code{struct |
|
|
@@ -250,6 +258,8 @@ |
|
|
@comment sys/resource.h |
|
|
@comment BSD |
|
|
@deftypefun int setrlimit (int @var{resource}, const struct rlimit *@var{rlp}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall on most systems; lock-taking critical section on HURD. |
|
|
Store the current and maximum limits for the resource @var{resource} |
|
|
in @code{*@var{rlp}}. |
|
|
|
|
|
@@ -275,6 +285,8 @@ |
|
|
@comment sys/resource.h |
|
|
@comment Unix98 |
|
|
@deftypefun int setrlimit64 (int @var{resource}, const struct rlimit64 *@var{rlp}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Wrapper for setrlimit or direct syscall. |
|
|
This function is similar to @code{setrlimit} but its second parameter is |
|
|
a pointer to a variable of type @code{struct rlimit64} which allows it |
|
|
to set values which wouldn't fit in the member of a @code{struct |
|
|
@@ -419,7 +431,7 @@ |
|
|
|
|
|
@comment sys/resource.h |
|
|
@comment BSD |
|
|
-@deftypevr Constant int RLIM_INFINITY |
|
|
+@deftypevr Constant rlim_t RLIM_INFINITY |
|
|
This constant stands for a value of ``infinity'' when supplied as |
|
|
the limit value in @code{setrlimit}. |
|
|
@end deftypevr |
|
|
@@ -433,7 +445,10 @@ |
|
|
|
|
|
@comment ulimit.h |
|
|
@comment BSD |
|
|
-@deftypefun int ulimit (int @var{cmd}, @dots{}) |
|
|
+@deftypefun {long int} ulimit (int @var{cmd}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Wrapper for getrlimit, setrlimit or |
|
|
+@c sysconf(_SC_OPEN_MAX)->getdtablesize->getrlimit. |
|
|
|
|
|
@code{ulimit} gets the current limit or sets the current and maximum |
|
|
limit for a particular resource for the calling process according to the |
|
|
@@ -480,6 +495,10 @@ |
|
|
@comment sys/vlimit.h |
|
|
@comment BSD |
|
|
@deftypefun int vlimit (int @var{resource}, int @var{limit}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:setrlimit}}@asunsafe{}@acsafe{}} |
|
|
+@c It calls getrlimit and modifies the rlim_cur field before calling |
|
|
+@c setrlimit. There's a window for a concurrent call to setrlimit that |
|
|
+@c modifies e.g. rlim_max, which will be lost if running as super-user. |
|
|
|
|
|
@code{vlimit} sets the current limit for a resource for a process. |
|
|
|
|
|
@@ -778,6 +797,8 @@ |
|
|
@comment sched.h |
|
|
@comment POSIX |
|
|
@deftypefun int sched_setscheduler (pid_t @var{pid}, int @var{policy}, const struct sched_param *@var{param}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall, Linux only. |
|
|
|
|
|
This function sets both the absolute priority and the scheduling policy |
|
|
for a process. |
|
|
@@ -848,6 +869,8 @@ |
|
|
@comment sched.h |
|
|
@comment POSIX |
|
|
@deftypefun int sched_getscheduler (pid_t @var{pid}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall, Linux only. |
|
|
|
|
|
This function returns the scheduling policy assigned to the process with |
|
|
Process ID (pid) @var{pid}, or the calling process if @var{pid} is zero. |
|
|
@@ -881,6 +904,8 @@ |
|
|
@comment sched.h |
|
|
@comment POSIX |
|
|
@deftypefun int sched_setparam (pid_t @var{pid}, const struct sched_param *@var{param}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall, Linux only. |
|
|
|
|
|
This function sets a process' absolute priority. |
|
|
|
|
|
@@ -893,7 +918,9 @@ |
|
|
|
|
|
@comment sched.h |
|
|
@comment POSIX |
|
|
-@deftypefun int sched_getparam (pid_t @var{pid}, const struct sched_param *@var{param}) |
|
|
+@deftypefun int sched_getparam (pid_t @var{pid}, struct sched_param *@var{param}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall, Linux only. |
|
|
|
|
|
This function returns a process' absolute priority. |
|
|
|
|
|
@@ -922,7 +949,9 @@ |
|
|
|
|
|
@comment sched.h |
|
|
@comment POSIX |
|
|
-@deftypefun int sched_get_priority_min (int *@var{policy}) |
|
|
+@deftypefun int sched_get_priority_min (int @var{policy}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall, Linux only. |
|
|
|
|
|
This function returns the lowest absolute priority value that is |
|
|
allowable for a process with scheduling policy @var{policy}. |
|
|
@@ -942,7 +971,9 @@ |
|
|
|
|
|
@comment sched.h |
|
|
@comment POSIX |
|
|
-@deftypefun int sched_get_priority_max (int *@var{policy}) |
|
|
+@deftypefun int sched_get_priority_max (int @var{policy}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall, Linux only. |
|
|
|
|
|
This function returns the highest absolute priority value that is |
|
|
allowable for a process that with scheduling policy @var{policy}. |
|
|
@@ -963,6 +994,8 @@ |
|
|
@comment sched.h |
|
|
@comment POSIX |
|
|
@deftypefun int sched_rr_get_interval (pid_t @var{pid}, struct timespec *@var{interval}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall, Linux only. |
|
|
|
|
|
This function returns the length of the quantum (time slice) used with |
|
|
the Round Robin scheduling policy, if it is used, for the process with |
|
|
@@ -987,6 +1020,8 @@ |
|
|
@comment sched.h |
|
|
@comment POSIX |
|
|
@deftypefun int sched_yield (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall on Linux; alias to swtch on HURD. |
|
|
|
|
|
This function voluntarily gives up the process' claim on the CPU. |
|
|
|
|
|
@@ -1045,7 +1080,7 @@ |
|
|
about. |
|
|
|
|
|
But just to be clear about the scope of this scheduling: Any time a |
|
|
-process with a absolute priority of 0 and a process with an absolute |
|
|
+process with an absolute priority of 0 and a process with an absolute |
|
|
priority higher than 0 are ready to run at the same time, the one with |
|
|
absolute priority 0 does not run. If it's already running when the |
|
|
higher priority ready-to-run process comes into existence, it stops |
|
|
@@ -1138,6 +1173,8 @@ |
|
|
@comment sys/resource.h |
|
|
@comment BSD,POSIX |
|
|
@deftypefun int getpriority (int @var{class}, int @var{id}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall on UNIX. On HURD, calls _hurd_priority_which_map. |
|
|
Return the nice value of a set of processes; @var{class} and @var{id} |
|
|
specify which ones (see below). If the processes specified do not all |
|
|
have the same nice value, this returns the lowest value that any of them |
|
|
@@ -1165,6 +1202,8 @@ |
|
|
@comment sys/resource.h |
|
|
@comment BSD,POSIX |
|
|
@deftypefun int setpriority (int @var{class}, int @var{id}, int @var{niceval}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall on UNIX. On HURD, calls _hurd_priority_which_map. |
|
|
Set the nice value of a set of processes to @var{niceval}; @var{class} |
|
|
and @var{id} specify which ones (see below). |
|
|
|
|
|
@@ -1222,6 +1261,11 @@ |
|
|
@comment unistd.h |
|
|
@comment BSD |
|
|
@deftypefun int nice (int @var{increment}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:setpriority}}@asunsafe{}@acsafe{}} |
|
|
+@c Calls getpriority before and after setpriority, using the result of |
|
|
+@c the first call to compute the argument for setpriority. This creates |
|
|
+@c a window for a concurrent setpriority (or nice) call to be lost or |
|
|
+@c exhibit surprising behavior. |
|
|
Increment the nice value of the calling process by @var{increment}. |
|
|
The return value is the new nice value on success, and @code{-1} on |
|
|
failure. In the case of failure, @code{errno} will be set to the |
|
|
@@ -1319,6 +1363,10 @@ |
|
|
@comment sched.h |
|
|
@comment GNU |
|
|
@deftypefn Macro void CPU_ZERO (cpu_set_t *@var{set}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c CPU_ZERO ok |
|
|
+@c __CPU_ZERO_S ok |
|
|
+@c memset dup ok |
|
|
This macro initializes the CPU set @var{set} to be the empty set. |
|
|
|
|
|
This macro is a GNU extension and is defined in @file{sched.h}. |
|
|
@@ -1327,6 +1375,11 @@ |
|
|
@comment sched.h |
|
|
@comment GNU |
|
|
@deftypefn Macro void CPU_SET (int @var{cpu}, cpu_set_t *@var{set}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c CPU_SET ok |
|
|
+@c __CPU_SET_S ok |
|
|
+@c __CPUELT ok |
|
|
+@c __CPUMASK ok |
|
|
This macro adds @var{cpu} to the CPU set @var{set}. |
|
|
|
|
|
The @var{cpu} parameter must not have side effects since it is |
|
|
@@ -1338,6 +1391,11 @@ |
|
|
@comment sched.h |
|
|
@comment GNU |
|
|
@deftypefn Macro void CPU_CLR (int @var{cpu}, cpu_set_t *@var{set}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c CPU_CLR ok |
|
|
+@c __CPU_CLR_S ok |
|
|
+@c __CPUELT dup ok |
|
|
+@c __CPUMASK dup ok |
|
|
This macro removes @var{cpu} from the CPU set @var{set}. |
|
|
|
|
|
The @var{cpu} parameter must not have side effects since it is |
|
|
@@ -1349,6 +1407,11 @@ |
|
|
@comment sched.h |
|
|
@comment GNU |
|
|
@deftypefn Macro int CPU_ISSET (int @var{cpu}, const cpu_set_t *@var{set}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c CPU_ISSET ok |
|
|
+@c __CPU_ISSET_S ok |
|
|
+@c __CPUELT dup ok |
|
|
+@c __CPUMASK dup ok |
|
|
This macro returns a nonzero value (true) if @var{cpu} is a member |
|
|
of the CPU set @var{set}, and zero (false) otherwise. |
|
|
|
|
|
@@ -1365,6 +1428,9 @@ |
|
|
@comment sched.h |
|
|
@comment GNU |
|
|
@deftypefun int sched_getaffinity (pid_t @var{pid}, size_t @var{cpusetsize}, cpu_set_t *@var{cpuset}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Wrapped syscall to zero out past the kernel cpu set size; Linux |
|
|
+@c only. |
|
|
|
|
|
This functions stores the CPU affinity mask for the process or thread |
|
|
with the ID @var{pid} in the @var{cpusetsize} bytes long bitmap |
|
|
@@ -1393,6 +1459,9 @@ |
|
|
@comment sched.h |
|
|
@comment GNU |
|
|
@deftypefun int sched_setaffinity (pid_t @var{pid}, size_t @var{cpusetsize}, const cpu_set_t *@var{cpuset}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Wrapped syscall to detect attempts to set bits past the kernel cpu |
|
|
+@c set size; Linux only. |
|
|
|
|
|
This function installs the @var{cpusetsize} bytes long affinity mask |
|
|
pointed to by @var{cpuset} for the process or thread with the ID @var{pid}. |
|
|
@@ -1516,6 +1585,9 @@ |
|
|
@comment unistd.h |
|
|
@comment BSD |
|
|
@deftypefun int getpagesize (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Obtained from the aux vec at program startup time. GNU/Linux/m68k is |
|
|
+@c the exception, with the possibility of a syscall. |
|
|
The @code{getpagesize} function returns the page size of the process. |
|
|
This value is fixed for the runtime of the process but can vary in |
|
|
different runs of the application. |
|
|
@@ -1559,6 +1631,8 @@ |
|
|
@comment sys/sysinfo.h |
|
|
@comment GNU |
|
|
@deftypefun {long int} get_phys_pages (void) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c This fopens a /proc file and scans it for the requested information. |
|
|
The @code{get_phys_pages} function returns the total number of pages of |
|
|
physical the system has. To get the amount of memory this number has to |
|
|
be multiplied by the page size. |
|
|
@@ -1569,7 +1643,8 @@ |
|
|
@comment sys/sysinfo.h |
|
|
@comment GNU |
|
|
@deftypefun {long int} get_avphys_pages (void) |
|
|
-The @code{get_phys_pages} function returns the number of available pages of |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+The @code{get_avphys_pages} function returns the number of available pages of |
|
|
physical the system has. To get the amount of memory this number has to |
|
|
be multiplied by the page size. |
|
|
|
|
|
@@ -1614,6 +1689,9 @@ |
|
|
@comment sys/sysinfo.h |
|
|
@comment GNU |
|
|
@deftypefun int get_nprocs_conf (void) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c This function reads from from /sys using dir streams (single user, so |
|
|
+@c no @mtasurace issue), and on some arches, from /proc using streams. |
|
|
The @code{get_nprocs_conf} function returns the number of processors the |
|
|
operating system configured. |
|
|
|
|
|
@@ -1623,6 +1701,8 @@ |
|
|
@comment sys/sysinfo.h |
|
|
@comment GNU |
|
|
@deftypefun int get_nprocs (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}} |
|
|
+@c This function reads from /proc using file descriptor I/O. |
|
|
The @code{get_nprocs} function returns the number of available processors. |
|
|
|
|
|
This function is a GNU extension. |
|
|
@@ -1638,8 +1718,12 @@ |
|
|
@comment stdlib.h |
|
|
@comment BSD |
|
|
@deftypefun int getloadavg (double @var{loadavg}[], int @var{nelem}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}} |
|
|
+@c Calls host_info on HURD; on Linux, opens /proc/loadavg, reads from |
|
|
+@c it, closes it, without cancellation point, and calls strtod_l with |
|
|
+@c the C locale to convert the strings to doubles. |
|
|
This function gets the 1, 5 and 15 minute load averages of the |
|
|
-system. The values are placed in @var{loadavg}. @code{getloadavg} will |
|
|
+system. The values are placed in @var{loadavg}. @code{getloadavg} will |
|
|
place at most @var{nelem} elements into the array but never more than |
|
|
three elements. The return value is the number of elements written to |
|
|
@var{loadavg}, or -1 on error. |
|
|
diff -urN glibc-2.17-c758a686/manual/search.texi glibc-2.17-c758a686/manual/search.texi |
|
|
--- glibc-2.17-c758a686/manual/search.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/search.texi 2014-09-12 16:10:06.043792722 -0400 |
|
|
@@ -71,7 +71,8 @@ |
|
|
|
|
|
@comment search.h |
|
|
@comment SVID |
|
|
-@deftypefun {void *} lfind (const void *@var{key}, void *@var{base}, size_t *@var{nmemb}, size_t @var{size}, comparison_fn_t @var{compar}) |
|
|
+@deftypefun {void *} lfind (const void *@var{key}, const void *@var{base}, size_t *@var{nmemb}, size_t @var{size}, comparison_fn_t @var{compar}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{lfind} function searches in the array with @code{*@var{nmemb}} |
|
|
elements of @var{size} bytes pointed to by @var{base} for an element |
|
|
which matches the one pointed to by @var{key}. The function pointed to |
|
|
@@ -90,6 +91,21 @@ |
|
|
@comment search.h |
|
|
@comment SVID |
|
|
@deftypefun {void *} lsearch (const void *@var{key}, void *@var{base}, size_t *@var{nmemb}, size_t @var{size}, comparison_fn_t @var{compar}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c A signal handler that interrupted an insertion and performed an |
|
|
+@c insertion itself would leave the array in a corrupt state (e.g. one |
|
|
+@c new element initialized twice, with parts of both initializations |
|
|
+@c prevailing, and another uninitialized element), but this is just a |
|
|
+@c special case of races on user-controlled objects, that have to be |
|
|
+@c avoided by users. |
|
|
+ |
|
|
+@c In case of cancellation, we know the array won't be left in a corrupt |
|
|
+@c state; the new element is initialized before the element count is |
|
|
+@c incremented, and the compiler can't reorder these operations because |
|
|
+@c it can't know that they don't alias. So, we'll either cancel after |
|
|
+@c the increment and the initialization are both complete, or the |
|
|
+@c increment won't have taken place, and so how far the initialization |
|
|
+@c got doesn't matter. |
|
|
The @code{lsearch} function is similar to the @code{lfind} function. It |
|
|
searches the given array for an element and returns it if found. The |
|
|
difference is that if no matching element is found the @code{lsearch} |
|
|
@@ -113,6 +129,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun {void *} bsearch (const void *@var{key}, const void *@var{array}, size_t @var{count}, size_t @var{size}, comparison_fn_t @var{compare}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{bsearch} function searches the sorted array @var{array} for an object |
|
|
that is equivalent to @var{key}. The array contains @var{count} elements, |
|
|
each of which is of size @var{size} bytes. |
|
|
@@ -146,6 +163,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun void qsort (void *@var{array}, size_t @var{count}, size_t @var{size}, comparison_fn_t @var{compare}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@acucorrupt{}}} |
|
|
The @var{qsort} function sorts the array @var{array}. The array contains |
|
|
@var{count} elements, each of which is of size @var{size}. |
|
|
|
|
|
@@ -256,6 +274,9 @@ |
|
|
@comment search.h |
|
|
@comment SVID |
|
|
@deftypefun int hcreate (size_t @var{nel}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:hsearch}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c hcreate @mtasurace:hsearch @ascuheap @acucorrupt @acsmem |
|
|
+@c hcreate_r dup @mtsrace:htab @ascuheap @acucorrupt @acsmem |
|
|
The @code{hcreate} function creates a hashing table which can contain at |
|
|
least @var{nel} elements. There is no possibility to grow this table so |
|
|
it is necessary to choose the value for @var{nel} wisely. The method |
|
|
@@ -270,7 +291,7 @@ |
|
|
The weakest aspect of this function is that there can be at most one |
|
|
hashing table used through the whole program. The table is allocated |
|
|
in local memory out of control of the programmer. As an extension @theglibc{} |
|
|
-provides an additional set of functions with an reentrant |
|
|
+provides an additional set of functions with a reentrant |
|
|
interface which provide a similar interface but which allow to keep |
|
|
arbitrarily many hashing tables. |
|
|
|
|
|
@@ -285,6 +306,9 @@ |
|
|
@comment search.h |
|
|
@comment SVID |
|
|
@deftypefun void hdestroy (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:hsearch}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c hdestroy @mtasurace:hsearch @ascuheap @acucorrupt @acsmem |
|
|
+@c hdestroy_r dup @mtsrace:htab @ascuheap @acucorrupt @acsmem |
|
|
The @code{hdestroy} function can be used to free all the resources |
|
|
allocated in a previous call of @code{hcreate}. After a call to this |
|
|
function it is again possible to call @code{hcreate} and allocate a new |
|
|
@@ -328,6 +352,9 @@ |
|
|
@comment search.h |
|
|
@comment SVID |
|
|
@deftypefun {ENTRY *} hsearch (ENTRY @var{item}, ACTION @var{action}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:hsearch}}@asunsafe{}@acunsafe{@acucorrupt{/action==ENTER}}} |
|
|
+@c hsearch @mtasurace:hsearch @acucorrupt/action==ENTER |
|
|
+@c hsearch_r dup @mtsrace:htab @acucorrupt/action==ENTER |
|
|
To search in a hashing table created using @code{hcreate} the |
|
|
@code{hsearch} function must be used. This function can perform simple |
|
|
search for an element (if @var{action} has the @code{FIND}) or it can |
|
|
@@ -358,6 +385,24 @@ |
|
|
@comment search.h |
|
|
@comment GNU |
|
|
@deftypefun int hcreate_r (size_t @var{nel}, struct hsearch_data *@var{htab}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:htab}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c Unlike the lsearch array, the htab is (at least in part) opaque, so |
|
|
+@c let's make it absolutely clear that ensuring exclusive access is a |
|
|
+@c caller responsibility. |
|
|
+ |
|
|
+@c Cancellation is unlikely to leave the htab in a corrupt state: the |
|
|
+@c last field to be initialized is the one that tells whether the entire |
|
|
+@c data structure was initialized, and there's a function call (calloc) |
|
|
+@c in between that will often ensure all other fields are written before |
|
|
+@c the table. However, should this call be inlined (say with LTO), this |
|
|
+@c assumption may not hold. The calloc call doesn't cross our library |
|
|
+@c interface barrier, so let's consider this could happen and mark this |
|
|
+@c with @acucorrupt. It's no safety loss, since we already have |
|
|
+@c @ascuheap anyway... |
|
|
+ |
|
|
+@c hcreate_r @mtsrace:htab @ascuheap @acucorrupt @acsmem |
|
|
+@c isprime ok |
|
|
+@c calloc dup @ascuheap @acsmem |
|
|
The @code{hcreate_r} function initializes the object pointed to by |
|
|
@var{htab} to contain a hashing table with at least @var{nel} elements. |
|
|
So this function is equivalent to the @code{hcreate} function except |
|
|
@@ -376,6 +421,16 @@ |
|
|
@comment search.h |
|
|
@comment GNU |
|
|
@deftypefun void hdestroy_r (struct hsearch_data *@var{htab}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:htab}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c The table is released while the table pointer still points to it. |
|
|
+@c Async cancellation is thus unsafe, but it already was because we call |
|
|
+@c free(). Using the table in a handler while it's being released would |
|
|
+@c also be dangerous, but calling free() already makes it unsafe, and |
|
|
+@c the requirement on the caller to ensure exclusive access already |
|
|
+@c guarantees this doesn't happen, so we don't get @asucorrupt. |
|
|
+ |
|
|
+@c hdestroy_r @mtsrace:htab @ascuheap @acucorrupt @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
The @code{hdestroy_r} function frees all resources allocated by the |
|
|
@code{hcreate_r} function for this very same object @var{htab}. As for |
|
|
@code{hdestroy} it is the programs responsibility to free the strings |
|
|
@@ -385,6 +440,13 @@ |
|
|
@comment search.h |
|
|
@comment GNU |
|
|
@deftypefun int hsearch_r (ENTRY @var{item}, ACTION @var{action}, ENTRY **@var{retval}, struct hsearch_data *@var{htab}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:htab}}@assafe{}@acunsafe{@acucorrupt{/action==ENTER}}} |
|
|
+@c Callers have to ensure mutual exclusion; insertion, if cancelled, |
|
|
+@c leaves the table in a corrupt state. |
|
|
+ |
|
|
+@c hsearch_r @mtsrace:htab @acucorrupt/action==ENTER |
|
|
+@c strlen dup ok |
|
|
+@c strcmp dup ok |
|
|
The @code{hsearch_r} function is equivalent to @code{hsearch}. The |
|
|
meaning of the first two arguments is identical. But instead of |
|
|
operating on a single global hashing table the function works on the |
|
|
@@ -401,7 +463,7 @@ |
|
|
|
|
|
@table @code |
|
|
@item ENOMEM |
|
|
-The table is filled and @code{hsearch_r} was called with an so far |
|
|
+The table is filled and @code{hsearch_r} was called with a so far |
|
|
unknown key and @var{action} set to @code{ENTER}. |
|
|
@item ESRCH |
|
|
The @var{action} parameter is @code{FIND} and no corresponding element |
|
|
@@ -436,6 +498,12 @@ |
|
|
@comment search.h |
|
|
@comment SVID |
|
|
@deftypefun {void *} tsearch (const void *@var{key}, void **@var{rootp}, comparison_fn_t @var{compar}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:rootp}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c The tree is not modified in a thread-safe manner, and rotations may |
|
|
+@c leave the tree in an inconsistent state that could be observed in an |
|
|
+@c asynchronous signal handler (except for the caller-synchronization |
|
|
+@c requirement) or after asynchronous cancellation of the thread |
|
|
+@c performing the rotation or the insertion. |
|
|
The @code{tsearch} function searches in the tree pointed to by |
|
|
@code{*@var{rootp}} for an element matching @var{key}. The function |
|
|
pointed to by @var{compar} is used to determine whether two elements |
|
|
@@ -465,6 +533,7 @@ |
|
|
@comment search.h |
|
|
@comment SVID |
|
|
@deftypefun {void *} tfind (const void *@var{key}, void *const *@var{rootp}, comparison_fn_t @var{compar}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:rootp}}@assafe{}@acsafe{}} |
|
|
The @code{tfind} function is similar to the @code{tsearch} function. It |
|
|
locates an element matching the one pointed to by @var{key} and returns |
|
|
a pointer to this element. But if no matching element is available no |
|
|
@@ -479,6 +548,7 @@ |
|
|
@comment search.h |
|
|
@comment SVID |
|
|
@deftypefun {void *} tdelete (const void *@var{key}, void **@var{rootp}, comparison_fn_t @var{compar}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:rootp}}@asunsafe{@ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
To remove a specific element matching @var{key} from the tree |
|
|
@code{tdelete} can be used. It locates the matching element using the |
|
|
same method as @code{tfind}. The corresponding element is then removed |
|
|
@@ -492,6 +562,7 @@ |
|
|
@comment search.h |
|
|
@comment GNU |
|
|
@deftypefun void tdestroy (void *@var{vroot}, __free_fn_t @var{freefct}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
If the complete search tree has to be removed one can use |
|
|
@code{tdestroy}. It frees all resources allocated by the @code{tsearch} |
|
|
function to generate the tree pointed to by @var{vroot}. |
|
|
@@ -546,6 +617,7 @@ |
|
|
@comment search.h |
|
|
@comment SVID |
|
|
@deftypefun void twalk (const void *@var{root}, __action_fn_t @var{action}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:root}}@assafe{}@acsafe{}} |
|
|
For each node in the tree with a node pointed to by @var{root}, the |
|
|
@code{twalk} function calls the function provided by the parameter |
|
|
@var{action}. For leaf nodes the function is called exactly once with |
|
|
diff -urN glibc-2.17-c758a686/manual/setjmp.texi glibc-2.17-c758a686/manual/setjmp.texi |
|
|
--- glibc-2.17-c758a686/manual/setjmp.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/setjmp.texi 2014-09-12 16:10:06.043792722 -0400 |
|
|
@@ -107,6 +107,10 @@ |
|
|
@comment setjmp.h |
|
|
@comment ISO |
|
|
@deftypefn Macro int setjmp (jmp_buf @var{state}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c _setjmp ok |
|
|
+@c __sigsetjmp(!savemask) ok |
|
|
+@c __sigjmp_save(!savemask) ok, does not call sigprocmask |
|
|
When called normally, @code{setjmp} stores information about the |
|
|
execution state of the program in @var{state} and returns zero. If |
|
|
@code{longjmp} is later used to perform a non-local exit to this |
|
|
@@ -116,6 +120,20 @@ |
|
|
@comment setjmp.h |
|
|
@comment ISO |
|
|
@deftypefun void longjmp (jmp_buf @var{state}, int @var{value}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{} @asucorrupt{} @asulock{/hurd}}@acunsafe{@acucorrupt{} @aculock{/hurd}}} |
|
|
+@c __libc_siglongjmp @ascuplugin @asucorrupt @asulock/hurd @acucorrupt @aculock/hurd |
|
|
+@c _longjmp_unwind @ascuplugin @asucorrupt @acucorrupt |
|
|
+@c __pthread_cleanup_upto @ascuplugin @asucorrupt @acucorrupt |
|
|
+@c plugins may be unsafe themselves, but even if they weren't, this |
|
|
+@c function isn't robust WRT async signals and cancellation: |
|
|
+@c cleanups aren't taken off the stack right away, only after all |
|
|
+@c cleanups have been run. This means that async-cancelling |
|
|
+@c longjmp, or interrupting longjmp with an async signal handler |
|
|
+@c that calls longjmp may run the same cleanups multiple times. |
|
|
+@c _JMPBUF_UNWINDS_ADJ ok |
|
|
+@c *cleanup_buf->__routine @ascuplugin |
|
|
+@c sigprocmask(SIG_SETMASK) dup @asulock/hurd @aculock/hurd |
|
|
+@c __longjmp ok |
|
|
This function restores current execution to the state saved in |
|
|
@var{state}, and continues execution from the call to @code{setjmp} that |
|
|
established that return point. Returning from @code{setjmp} by means of |
|
|
@@ -141,7 +159,7 @@ |
|
|
statement (such as @samp{if}, @samp{switch}, or @samp{while}). |
|
|
|
|
|
@item |
|
|
-As one operand of a equality or comparison operator that appears as the |
|
|
+As one operand of an equality or comparison operator that appears as the |
|
|
test expression of a selection or iteration statement. The other |
|
|
operand must be an integer constant expression. |
|
|
|
|
|
@@ -199,6 +217,11 @@ |
|
|
@comment setjmp.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int sigsetjmp (sigjmp_buf @var{state}, int @var{savesigs}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}} |
|
|
+@c sigsetjmp @asulock/hurd @aculock/hurd |
|
|
+@c __sigsetjmp(savemask) @asulock/hurd @aculock/hurd |
|
|
+@c __sigjmp_save(savemask) @asulock/hurd @aculock/hurd |
|
|
+@c sigprocmask(SIG_BLOCK probe) dup @asulock/hurd @aculock/hurd |
|
|
This is similar to @code{setjmp}. If @var{savesigs} is nonzero, the set |
|
|
of blocked signals is saved in @var{state} and will be restored if a |
|
|
@code{siglongjmp} is later performed with this @var{state}. |
|
|
@@ -207,6 +230,8 @@ |
|
|
@comment setjmp.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun void siglongjmp (sigjmp_buf @var{state}, int @var{value}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{} @asucorrupt{} @asulock{/hurd}}@acunsafe{@acucorrupt{} @aculock{/hurd}}} |
|
|
+@c Alias to longjmp. |
|
|
This is similar to @code{longjmp} except for the type of its @var{state} |
|
|
argument. If the @code{sigsetjmp} call that set this @var{state} used a |
|
|
nonzero @var{savesigs} flag, @code{siglongjmp} also restores the set of |
|
|
@@ -237,7 +262,7 @@ |
|
|
@comment SVID |
|
|
@deftp {Data Type} ucontext_t |
|
|
|
|
|
-The @code{ucontext_t} type is defined as a structure with as least the |
|
|
+The @code{ucontext_t} type is defined as a structure with at least the |
|
|
following elements: |
|
|
|
|
|
@table @code |
|
|
@@ -267,6 +292,10 @@ |
|
|
@comment ucontext.h |
|
|
@comment SVID |
|
|
@deftypefun int getcontext (ucontext_t *@var{ucp}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:ucp}}@assafe{}@acsafe{}} |
|
|
+@c Linux-only implementations in assembly, including sigprocmask |
|
|
+@c syscall. A few cases call the sigprocmask function, but that's safe |
|
|
+@c too. The ppc case is implemented in terms of a swapcontext syscall. |
|
|
The @code{getcontext} function initializes the variable pointed to by |
|
|
@var{ucp} with the context of the calling thread. The context contains |
|
|
the content of the registers, the signal mask, and the current stack. |
|
|
@@ -278,25 +307,26 @@ |
|
|
@end deftypefun |
|
|
|
|
|
The @code{getcontext} function is similar to @code{setjmp} but it does |
|
|
-not provide an indication of whether the function returns for the first |
|
|
-time or whether the initialized context was used and the execution is |
|
|
-resumed at just that point. If this is necessary the user has to take |
|
|
-determine this herself. This must be done carefully since the context |
|
|
-contains registers which might contain register variables. This is a |
|
|
-good situation to define variables with @code{volatile}. |
|
|
+not provide an indication of whether @code{getcontext} is returning for |
|
|
+the first time or whether an initialized context has just been restored. |
|
|
+If this is necessary the user has to determine this herself. This must |
|
|
+be done carefully since the context contains registers which might contain |
|
|
+register variables. This is a good situation to define variables with |
|
|
+@code{volatile}. |
|
|
|
|
|
Once the context variable is initialized it can be used as is or it can |
|
|
-be modified. The latter is normally done to implement co-routines or |
|
|
-similar constructs. The @code{makecontext} function is what has to be |
|
|
-used to do that. |
|
|
+be modified using the @code{makecontext} function. The latter is normally |
|
|
+done when implementing co-routines or similar constructs. |
|
|
|
|
|
@comment ucontext.h |
|
|
@comment SVID |
|
|
@deftypefun void makecontext (ucontext_t *@var{ucp}, void (*@var{func}) (void), int @var{argc}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:ucp}}@assafe{}@acsafe{}} |
|
|
+@c Linux-only implementations mostly in assembly, nothing unsafe. |
|
|
|
|
|
-The @var{ucp} parameter passed to the @code{makecontext} shall be |
|
|
+The @var{ucp} parameter passed to @code{makecontext} shall be |
|
|
initialized by a call to @code{getcontext}. The context will be |
|
|
-modified to in a way so that if the context is resumed it will start by |
|
|
+modified in a way such that if the context is resumed it will start by |
|
|
calling the function @code{func} which gets @var{argc} integer arguments |
|
|
passed. The integer arguments which are to be passed should follow the |
|
|
@var{argc} parameter in the call to @code{makecontext}. |
|
|
@@ -316,7 +346,7 @@ |
|
|
While allocating the memory for the stack one has to be careful. Most |
|
|
modern processors keep track of whether a certain memory region is |
|
|
allowed to contain code which is executed or not. Data segments and |
|
|
-heap memory is normally not tagged to allow this. The result is that |
|
|
+heap memory are normally not tagged to allow this. The result is that |
|
|
programs would fail. Examples for such code include the calling |
|
|
sequences the GNU C compiler generates for calls to nested functions. |
|
|
Safe ways to allocate stacks correctly include using memory on the |
|
|
@@ -332,13 +362,22 @@ |
|
|
allocated for the stack and the size of the memory region is stored in |
|
|
@code{ss_size}. There are implements out there which require |
|
|
@code{ss_sp} to be set to the value the stack pointer will have (which |
|
|
-can depending on the direction the stack grows be different). This |
|
|
+can, depending on the direction the stack grows, be different). This |
|
|
difference makes the @code{makecontext} function hard to use and it |
|
|
requires detection of the platform at compile time. |
|
|
|
|
|
@comment ucontext.h |
|
|
@comment SVID |
|
|
@deftypefun int setcontext (const ucontext_t *@var{ucp}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:ucp}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
+@c Linux-only implementations mostly in assembly. Some ports use |
|
|
+@c sigreturn or swapcontext syscalls; others restore the signal mask |
|
|
+@c first and then proceed restore other registers in userland, which |
|
|
+@c leaves a window for cancellation or async signals with misaligned or |
|
|
+@c otherwise corrupt stack. ??? Switching to a different stack, or even |
|
|
+@c to an earlier state on the same stack, may conflict with pthread |
|
|
+@c cleanups. This is not quite MT-Unsafe, it's a different kind of |
|
|
+@c safety issue. |
|
|
|
|
|
The @code{setcontext} function restores the context described by |
|
|
@var{ucp}. The context is not modified and can be reused as often as |
|
|
@@ -357,6 +396,9 @@ |
|
|
terminates normally with an exit status value of @code{EXIT_SUCCESS} |
|
|
(@pxref{Program Termination}). |
|
|
|
|
|
+If the context was created by a call to a signal handler or from any |
|
|
+other source then the behaviour of @code{setcontext} is unspecified. |
|
|
+ |
|
|
Since the context contains information about the stack no two threads |
|
|
should use the same context at the same time. The result in most cases |
|
|
would be disastrous. |
|
|
@@ -372,6 +414,10 @@ |
|
|
@comment ucontext.h |
|
|
@comment SVID |
|
|
@deftypefun int swapcontext (ucontext_t *restrict @var{oucp}, const ucontext_t *restrict @var{ucp}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:oucp} @mtsrace{:ucp}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
+@c Linux-only implementations mostly in assembly. Some ports call or |
|
|
+@c inline getcontext and/or setcontext, adjusting the saved context in |
|
|
+@c between, so we inherit the potential issues of both. |
|
|
|
|
|
The @code{swapcontext} function is similar to @code{setcontext} but |
|
|
instead of just replacing the current context the latter is first saved |
|
|
@@ -385,15 +431,15 @@ |
|
|
If @code{swapcontext} succeeds the function does not return unless the |
|
|
context @var{oucp} is used without prior modification by |
|
|
@code{makecontext}. The return value in this case is @code{0}. If the |
|
|
-function fails it returns @code{-1} and set @var{errno} accordingly. |
|
|
+function fails it returns @code{-1} and sets @var{errno} accordingly. |
|
|
@end deftypefun |
|
|
|
|
|
@heading Example for SVID Context Handling |
|
|
|
|
|
The easiest way to use the context handling functions is as a |
|
|
replacement for @code{setjmp} and @code{longjmp}. The context contains |
|
|
-on most platforms more information which might lead to less surprises |
|
|
-but this also means using these functions is more expensive (beside |
|
|
+on most platforms more information which may lead to fewer surprises |
|
|
+but this also means using these functions is more expensive (besides |
|
|
being less portable). |
|
|
|
|
|
@smallexample |
|
|
@@ -440,11 +486,11 @@ |
|
|
This an example how the context functions can be used to implement |
|
|
co-routines or cooperative multi-threading. All that has to be done is |
|
|
to call every once in a while @code{swapcontext} to continue running a |
|
|
-different context. It is not allowed to do the context switching from |
|
|
-the signal handler directly since neither @code{setcontext} nor |
|
|
-@code{swapcontext} are functions which can be called from a signal |
|
|
-handler. But setting a variable in the signal handler and checking it |
|
|
-in the body of the functions which are executed. Since |
|
|
-@code{swapcontext} is saving the current context it is possible to have |
|
|
-multiple different scheduling points in the code. Execution will always |
|
|
-resume where it was left. |
|
|
+different context. It is not recommended to do the context switching from |
|
|
+the signal handler directly since leaving the signal handler via |
|
|
+@code{setcontext} if the signal was delivered during code that was not |
|
|
+asynchronous signal safe could lead to problems. Setting a variable in |
|
|
+the signal handler and checking it in the body of the functions which |
|
|
+are executed is a safer approach. Since @code{swapcontext} is saving the |
|
|
+current context it is possible to have multiple different scheduling points |
|
|
+in the code. Execution will always resume where it was left. |
|
|
diff -urN glibc-2.17-c758a686/manual/signal.texi glibc-2.17-c758a686/manual/signal.texi |
|
|
--- glibc-2.17-c758a686/manual/signal.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/signal.texi 2014-09-12 16:10:06.045792717 -0400 |
|
|
@@ -889,6 +889,20 @@ |
|
|
@comment string.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} strsignal (int @var{signum}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:strsignal} @mtslocale{}}@asunsafe{@asuinit{} @ascuintl{} @asucorrupt{} @ascuheap{}}@acunsafe{@acuinit{} @acucorrupt{} @acsmem{}}} |
|
|
+@c strsignal @mtasurace:strsignal @mtslocale @asuinit @ascuintl @asucorrupt @ascuheap @acucorrupt @acsmem |
|
|
+@c uses a static buffer if tsd key creation fails |
|
|
+@c [once] init |
|
|
+@c libc_key_create ok |
|
|
+@c pthread_key_create dup ok |
|
|
+@c getbuffer @asucorrupt @ascuheap @acsmem |
|
|
+@c libc_getspecific ok |
|
|
+@c pthread_getspecific dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c libc_setspecific @asucorrupt @ascuheap @acucorrupt @acsmem |
|
|
+@c pthread_setspecific dup @asucorrupt @ascuheap @acucorrupt @acsmem |
|
|
+@c snprintf dup @mtslocale @ascuheap @acsmem |
|
|
+@c _ @ascuintl |
|
|
This function returns a pointer to a statically-allocated string |
|
|
containing a message describing the signal @var{signum}. You |
|
|
should not modify the contents of this string; and, since it can be |
|
|
@@ -903,6 +917,12 @@ |
|
|
@comment signal.h |
|
|
@comment BSD |
|
|
@deftypefun void psignal (int @var{signum}, const char *@var{message}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuintl{} @ascuheap{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{}}} |
|
|
+@c psignal @mtslocale @asucorrupt @ascuintl @ascuheap @aculock @acucorrupt @acsmem |
|
|
+@c _ @ascuintl |
|
|
+@c fxprintf @asucorrupt @aculock @acucorrupt |
|
|
+@c asprintf @mtslocale @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
This function prints a message describing the signal @var{signum} to the |
|
|
standard error output stream @code{stderr}; see @ref{Standard Streams}. |
|
|
|
|
|
@@ -972,6 +992,12 @@ |
|
|
@comment signal.h |
|
|
@comment ISO |
|
|
@deftypefun sighandler_t signal (int @var{signum}, sighandler_t @var{action}) |
|
|
+@safety{@prelim{}@mtsafe{@mtssigintr{}}@assafe{}@acsafe{}} |
|
|
+@c signal ok |
|
|
+@c sigemptyset dup ok |
|
|
+@c sigaddset dup ok |
|
|
+@c sigismember dup ok |
|
|
+@c sigaction dup ok |
|
|
The @code{signal} function establishes @var{action} as the action for |
|
|
the signal @var{signum}. |
|
|
|
|
|
@@ -1094,6 +1120,10 @@ |
|
|
@comment signal.h |
|
|
@comment GNU |
|
|
@deftypefun sighandler_t sysv_signal (int @var{signum}, sighandler_t @var{action}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c sysv_signal ok |
|
|
+@c sigemptyset dup ok |
|
|
+@c sigaction dup ok |
|
|
The @code{sysv_signal} implements the behavior of the standard |
|
|
@code{signal} function as found on SVID systems. The difference to BSD |
|
|
systems is that the handler is deinstalled after a delivery of a signal. |
|
|
@@ -1106,6 +1136,8 @@ |
|
|
@comment signal.h |
|
|
@comment SVID |
|
|
@deftypefun sighandler_t ssignal (int @var{signum}, sighandler_t @var{action}) |
|
|
+@safety{@prelim{}@mtsafe{@mtssigintr{}}@assafe{}@acsafe{}} |
|
|
+@c Aliases signal and bsd_signal. |
|
|
The @code{ssignal} function does the same thing as @code{signal}; it is |
|
|
provided only for compatibility with SVID. |
|
|
@end deftypefun |
|
|
@@ -1172,6 +1204,7 @@ |
|
|
@comment signal.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int sigaction (int @var{signum}, const struct sigaction *restrict @var{action}, struct sigaction *restrict @var{old-action}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @var{action} argument is used to set up a new action for the signal |
|
|
@var{signum}, while the @var{old-action} argument is used to return |
|
|
information about the action previously associated with this symbol. |
|
|
@@ -2168,6 +2194,14 @@ |
|
|
@comment signal.h |
|
|
@comment ISO |
|
|
@deftypefun int raise (int @var{signum}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c raise ok |
|
|
+@c [posix] |
|
|
+@c getpid dup ok |
|
|
+@c kill dup ok |
|
|
+@c [linux] |
|
|
+@c syscall(gettid) ok |
|
|
+@c syscall(tgkill) ok |
|
|
The @code{raise} function sends the signal @var{signum} to the calling |
|
|
process. It returns zero if successful and a nonzero value if it fails. |
|
|
About the only reason for failure would be if the value of @var{signum} |
|
|
@@ -2177,6 +2211,8 @@ |
|
|
@comment signal.h |
|
|
@comment SVID |
|
|
@deftypefun int gsignal (int @var{signum}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Aliases raise. |
|
|
The @code{gsignal} function does the same thing as @code{raise}; it is |
|
|
provided only for compatibility with SVID. |
|
|
@end deftypefun |
|
|
@@ -2269,6 +2305,11 @@ |
|
|
@comment signal.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int kill (pid_t @var{pid}, int @var{signum}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c The hurd implementation is not a critical section, so it's not |
|
|
+@c immediately obvious that, in case of cancellation, it won't leak |
|
|
+@c ports or the memory allocated by proc_getpgrppids when pid <= 0. |
|
|
+@c Since none of these make it AC-Unsafe, I'm leaving them out. |
|
|
The @code{kill} function sends the signal @var{signum} to the process |
|
|
or process group specified by @var{pid}. Besides the signals listed in |
|
|
@ref{Standard Signals}, @var{signum} can also have a value of zero to |
|
|
@@ -2325,6 +2366,8 @@ |
|
|
@comment signal.h |
|
|
@comment BSD |
|
|
@deftypefun int killpg (int @var{pgid}, int @var{signum}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Calls kill with -pgid. |
|
|
This is similar to @code{kill}, but sends signal @var{signum} to the |
|
|
process group @var{pgid}. This function is provided for compatibility |
|
|
with BSD; using @code{kill} to do this is more portable. |
|
|
@@ -2497,6 +2540,8 @@ |
|
|
@comment signal.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int sigemptyset (sigset_t *@var{set}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Just memsets all of set to zero. |
|
|
This function initializes the signal set @var{set} to exclude all of the |
|
|
defined signals. It always returns @code{0}. |
|
|
@end deftypefun |
|
|
@@ -2504,6 +2549,7 @@ |
|
|
@comment signal.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int sigfillset (sigset_t *@var{set}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function initializes the signal set @var{set} to include |
|
|
all of the defined signals. Again, the return value is @code{0}. |
|
|
@end deftypefun |
|
|
@@ -2511,6 +2557,7 @@ |
|
|
@comment signal.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int sigaddset (sigset_t *@var{set}, int @var{signum}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function adds the signal @var{signum} to the signal set @var{set}. |
|
|
All @code{sigaddset} does is modify @var{set}; it does not block or |
|
|
unblock any signals. |
|
|
@@ -2527,6 +2574,7 @@ |
|
|
@comment signal.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int sigdelset (sigset_t *@var{set}, int @var{signum}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function removes the signal @var{signum} from the signal set |
|
|
@var{set}. All @code{sigdelset} does is modify @var{set}; it does not |
|
|
block or unblock any signals. The return value and error conditions are |
|
|
@@ -2538,6 +2586,7 @@ |
|
|
@comment signal.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int sigismember (const sigset_t *@var{set}, int @var{signum}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{sigismember} function tests whether the signal @var{signum} is |
|
|
a member of the signal set @var{set}. It returns @code{1} if the signal |
|
|
is in the set, @code{0} if not, and @code{-1} if there is an error. |
|
|
@@ -2566,7 +2615,7 @@ |
|
|
|
|
|
Note that you must not use @code{sigprocmask} in multi-threaded processes, |
|
|
because each thread has its own signal mask and there is no single process |
|
|
-signal mask. According to POSIX, the behavior of @code{sigprocmask} in a |
|
|
+signal mask. According to POSIX, the behavior of @code{sigprocmask} in a |
|
|
multi-threaded process is ``unspecified''. |
|
|
Instead, use @code{pthread_sigmask}. |
|
|
@ifset linuxthreads |
|
|
@@ -2576,6 +2625,10 @@ |
|
|
@comment signal.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int sigprocmask (int @var{how}, const sigset_t *restrict @var{set}, sigset_t *restrict @var{oldset}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:sigprocmask/bsd(SIG_UNBLOCK)}}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}} |
|
|
+@c This takes the hurd_self_sigstate-returned object's lock on HURD. On |
|
|
+@c BSD, SIG_UNBLOCK is emulated with two sigblock calls, which |
|
|
+@c introduces a race window. |
|
|
The @code{sigprocmask} function is used to examine or change the calling |
|
|
process's signal mask. The @var{how} argument determines how the signal |
|
|
mask is changed, and must be one of the following values: |
|
|
@@ -2759,6 +2812,10 @@ |
|
|
@comment signal.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int sigpending (sigset_t *@var{set}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}} |
|
|
+@c Direct rt_sigpending syscall on most systems. On hurd, calls |
|
|
+@c hurd_self_sigstate, it copies the sigstate's pending while holding |
|
|
+@c its lock. |
|
|
The @code{sigpending} function stores information about pending signals |
|
|
in @var{set}. If there is a pending signal that is blocked from |
|
|
delivery, then that signal is a member of the returned set. (You can |
|
|
@@ -2921,7 +2978,18 @@ |
|
|
|
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
-@deftypefun int pause () |
|
|
+@deftypefun int pause (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:sigprocmask/!bsd!linux}}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}} |
|
|
+@c The signal mask read by sigprocmask may be overridden by another |
|
|
+@c thread or by a signal handler before we call sigsuspend. Is this a |
|
|
+@c safety issue? Probably not. |
|
|
+@c pause @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd |
|
|
+@c [ports/linux/generic] |
|
|
+@c syscall_pause ok |
|
|
+@c [posix] |
|
|
+@c sigemptyset dup ok |
|
|
+@c sigprocmask(SIG_BLOCK) dup @asulock/hurd @aculock/hurd [no @mtasurace:sigprocmask/bsd(SIG_UNBLOCK)] |
|
|
+@c sigsuspend dup @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd |
|
|
The @code{pause} function suspends program execution until a signal |
|
|
arrives whose action is either to execute a handler function, or to |
|
|
terminate the process. |
|
|
@@ -3017,6 +3085,18 @@ |
|
|
@comment signal.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int sigsuspend (const sigset_t *@var{set}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:sigprocmask/!bsd!linux}}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}} |
|
|
+@c sigsuspend @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd |
|
|
+@c [posix] @mtasurace:sigprocmask/!bsd!linux |
|
|
+@c saving and restoring the procmask is racy |
|
|
+@c sigprocmask(SIG_SETMASK) dup @asulock/hurd @aculock/hurd [no @mtasurace:sigprocmask/bsd(SIG_UNBLOCK)] |
|
|
+@c pause @asulock/hurd @aculock/hurd |
|
|
+@c [bsd] |
|
|
+@c sigismember dup ok |
|
|
+@c sigmask dup ok |
|
|
+@c sigpause dup ok [no @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd] |
|
|
+@c [linux] |
|
|
+@c do_sigsuspend ok |
|
|
This function replaces the process's signal mask with @var{set} and then |
|
|
suspends the process until a signal is delivered whose action is either |
|
|
to terminate the process or invoke a signal handling function. In other |
|
|
@@ -3150,6 +3230,9 @@ |
|
|
@comment signal.h |
|
|
@comment XPG |
|
|
@deftypefun int sigaltstack (const stack_t *restrict @var{stack}, stack_t *restrict @var{oldstack}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}} |
|
|
+@c Syscall on Linux and BSD; the HURD implementation takes a lock on |
|
|
+@c the hurd_self_sigstate-returned struct. |
|
|
The @code{sigaltstack} function specifies an alternate stack for use |
|
|
during signal handling. When a signal is received by the process and |
|
|
its action indicates that the signal stack is used, the system arranges |
|
|
@@ -3195,7 +3278,9 @@ |
|
|
|
|
|
@comment signal.h |
|
|
@comment BSD |
|
|
-@deftypefun int sigstack (const struct sigstack *@var{stack}, struct sigstack *@var{oldstack}) |
|
|
+@deftypefun int sigstack (struct sigstack *@var{stack}, struct sigstack *@var{oldstack}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}} |
|
|
+@c Lossy and dangerous (no size limit) wrapper for sigaltstack. |
|
|
The @code{sigstack} function specifies an alternate stack for use during |
|
|
signal handling. When a signal is received by the process and its |
|
|
action indicates that the signal stack is used, the system arranges a |
|
|
@@ -3301,6 +3386,13 @@ |
|
|
@comment signal.h |
|
|
@comment BSD |
|
|
@deftypefun int sigvec (int @var{signum}, const struct sigvec *@var{action}, struct sigvec *@var{old-action}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c This is mostly a safe wrapper for sigaction. The exception are |
|
|
+@c systems that lack SA_RESETHAND, in which a signal handler wrapper is |
|
|
+@c used that calls sigaction to reset the handler before calling the |
|
|
+@c user-supplied handler; it's unlikely that this emulation is used |
|
|
+@c anywhere, for user-supplied flags and mask don't seem to be used |
|
|
+@c the way one would expect. |
|
|
This function is the equivalent of @code{sigaction} (@pxref{Advanced Signal |
|
|
Handling}); it installs the action @var{action} for the signal @var{signum}, |
|
|
returning information about the previous action in effect for that signal |
|
|
@@ -3310,6 +3402,14 @@ |
|
|
@comment signal.h |
|
|
@comment BSD |
|
|
@deftypefun int siginterrupt (int @var{signum}, int @var{failflag}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtssigintr{}}}@asunsafe{}@acunsafe{@acucorrupt{}}} |
|
|
+@c This calls sigaction twice, once to get the current sigaction for the |
|
|
+@c specified signal, another to apply the flags change. This could |
|
|
+@c override the effects of a concurrent sigaction call. It also |
|
|
+@c modifies without any guards the global _sigintr variable, that |
|
|
+@c bsd_signal reads from, and it may leave _sigintr modified without |
|
|
+@c overriding the active handler if cancelled between the two |
|
|
+@c operations. |
|
|
This function specifies which approach to use when certain primitives |
|
|
are interrupted by handling signal @var{signum}. If @var{failflag} is |
|
|
false, signal @var{signum} restarts primitives. If @var{failflag} is |
|
|
@@ -3323,6 +3423,8 @@ |
|
|
@comment signal.h |
|
|
@comment BSD |
|
|
@deftypefn Macro int sigmask (int @var{signum}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c This just shifts signum. |
|
|
This macro returns a signal mask that has the bit for signal @var{signum} |
|
|
set. You can bitwise-OR the results of several calls to @code{sigmask} |
|
|
together to specify more than one signal. For example, |
|
|
@@ -3339,6 +3441,11 @@ |
|
|
@comment signal.h |
|
|
@comment BSD |
|
|
@deftypefun int sigblock (int @var{mask}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}} |
|
|
+@c On most POSIX systems, this is a wrapper for sigprocmask(SIG_BLOCK). |
|
|
+@c The exception are BSD systems other than 4.4, where it is a syscall. |
|
|
+@c sigblock @asulock/hurd @aculock/hurd |
|
|
+@c sigprocmask(SIG_BLOCK) dup @asulock/hurd @aculock/hurd [no @mtasurace:sigprocmask/bsd(SIG_UNBLOCK)] |
|
|
This function is equivalent to @code{sigprocmask} (@pxref{Process Signal |
|
|
Mask}) with a @var{how} argument of @code{SIG_BLOCK}: it adds the |
|
|
signals specified by @var{mask} to the calling process's set of blocked |
|
|
@@ -3348,6 +3455,11 @@ |
|
|
@comment signal.h |
|
|
@comment BSD |
|
|
@deftypefun int sigsetmask (int @var{mask}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}} |
|
|
+@c On most POSIX systems, this is a wrapper for sigprocmask(SIG_SETMASK). |
|
|
+@c The exception are BSD systems other than 4.4, where it is a syscall. |
|
|
+@c sigsetmask @asulock/hurd @aculock/hurd |
|
|
+@c sigprocmask(SIG_SETMASK) dup @asulock/hurd @aculock/hurd [no @mtasurace:sigprocmask/bsd(SIG_UNBLOCK)] |
|
|
This function equivalent to @code{sigprocmask} (@pxref{Process |
|
|
Signal Mask}) with a @var{how} argument of @code{SIG_SETMASK}: it sets |
|
|
the calling process's signal mask to @var{mask}. The return value is |
|
|
@@ -3357,6 +3469,15 @@ |
|
|
@comment signal.h |
|
|
@comment BSD |
|
|
@deftypefun int sigpause (int @var{mask}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:sigprocmask/!bsd!linux}}@asunsafe{@asulock{/hurd}}@acunsafe{@aculock{/hurd}}} |
|
|
+@c sigpause @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd |
|
|
+@c [posix] |
|
|
+@c __sigpause @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd |
|
|
+@c do_sigpause @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd |
|
|
+@c sigprocmask(0) dup @asulock/hurd @aculock/hurd [no @mtasurace:sigprocmask/bsd(SIG_UNBLOCK)] |
|
|
+@c sigdelset dup ok |
|
|
+@c sigset_set_old_mask dup ok |
|
|
+@c sigsuspend dup @mtasurace:sigprocmask/!bsd!linux @asulock/hurd @aculock/hurd |
|
|
This function is the equivalent of @code{sigsuspend} (@pxref{Waiting |
|
|
for a Signal}): it sets the calling process's signal mask to @var{mask}, |
|
|
and waits for a signal to arrive. On return the previous set of blocked |
|
|
diff -urN glibc-2.17-c758a686/manual/socket.texi glibc-2.17-c758a686/manual/socket.texi |
|
|
--- glibc-2.17-c758a686/manual/socket.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/socket.texi 2014-09-12 16:10:06.046792714 -0400 |
|
|
@@ -394,6 +394,8 @@ |
|
|
@comment sys/socket.h |
|
|
@comment BSD |
|
|
@deftypefun int bind (int @var{socket}, struct sockaddr *@var{addr}, socklen_t @var{length}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall, except on Hurd. |
|
|
The @code{bind} function assigns an address to the socket |
|
|
@var{socket}. The @var{addr} and @var{length} arguments specify the |
|
|
address; the detailed format of the address depends on the namespace. |
|
|
@@ -442,6 +444,9 @@ |
|
|
@comment sys/socket.h |
|
|
@comment BSD |
|
|
@deftypefun int getsockname (int @var{socket}, struct sockaddr *@var{addr}, socklen_t *@var{length-ptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsmem{/hurd}}} |
|
|
+@c Direct syscall, except on Hurd, where it seems like it might leak |
|
|
+@c VM if cancelled. |
|
|
The @code{getsockname} function returns information about the |
|
|
address of the socket @var{socket} in the locations specified by the |
|
|
@var{addr} and @var{length-ptr} arguments. Note that the |
|
|
@@ -501,6 +506,14 @@ |
|
|
@comment net/if.h |
|
|
@comment IPv6 basic API |
|
|
@deftypefun {unsigned int} if_nametoindex (const char *@var{ifname}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}} |
|
|
+@c It opens a socket to use ioctl on the fd to get the index. |
|
|
+@c opensock may call socket and access multiple times until it finds a |
|
|
+@c socket family that works. The Linux implementation has a potential |
|
|
+@c concurrency issue WRT last_type and last_family not being updated |
|
|
+@c atomically, but it is harmless; the generic implementation, OTOH, |
|
|
+@c takes a lock, which makes all callers AS- and AC-Unsafe. |
|
|
+@c opensock @asulock @aculock @acsfd |
|
|
This function yields the interface index corresponding to a particular |
|
|
name. If no interface exists with the name given, it returns 0. |
|
|
@end deftypefun |
|
|
@@ -508,6 +521,9 @@ |
|
|
@comment net/if.h |
|
|
@comment IPv6 basic API |
|
|
@deftypefun {char *} if_indextoname (unsigned int @var{ifindex}, char *@var{ifname}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}} |
|
|
+@c It opens a socket with opensock to use ioctl on the fd to get the |
|
|
+@c name from the index. |
|
|
This function maps an interface index to its corresponding name. The |
|
|
returned name is placed in the buffer pointed to by @code{ifname}, which |
|
|
must be at least @code{IFNAMSIZ} bytes in length. If the index was |
|
|
@@ -534,6 +550,39 @@ |
|
|
@comment net/if.h |
|
|
@comment IPv6 basic API |
|
|
@deftypefun {struct if_nameindex *} if_nameindex (void) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{/hurd}}@acunsafe{@aculock{/hurd} @acsfd{} @acsmem{}}} |
|
|
+@c if_nameindex @ascuheap @asulock/hurd @aculock/hurd @acsfd @acsmem |
|
|
+@c [linux] |
|
|
+@c netlink_open @acsfd @acsmem/hurd |
|
|
+@c socket dup @acsfd |
|
|
+@c memset dup ok |
|
|
+@c bind dup ok |
|
|
+@c netlink_close dup @acsfd |
|
|
+@c getsockname dup @acsmem/hurd |
|
|
+@c netlink_request @ascuheap @acsmem |
|
|
+@c getpagesize dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c netlink_sendreq ok |
|
|
+@c memset dup ok |
|
|
+@c sendto dup ok |
|
|
+@c recvmsg dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c netlink_free_handle @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c netlink_close @acsfd |
|
|
+@c close dup @acsfd |
|
|
+@c malloc dup @asuheap @acsmem |
|
|
+@c strndup @ascuheap @acsmem |
|
|
+@c if_freenameindex @ascuheap @acsmem |
|
|
+@c [hurd] |
|
|
+@c opensock dup @asulock @aculock @acsfd |
|
|
+@c hurd_socket_server ok |
|
|
+@c pfinet_siocgifconf ok |
|
|
+@c malloc @ascuheap @acsmem |
|
|
+@c strdup @ascuheap @acsmem |
|
|
+@c ioctl dup ok |
|
|
+@c free @ascuheap @acsmem |
|
|
This function returns an array of @code{if_nameindex} structures, one |
|
|
for every interface that is present. The end of the list is indicated |
|
|
by a structure with an interface of 0 and a null name pointer. If an |
|
|
@@ -546,6 +595,9 @@ |
|
|
@comment net/if.h |
|
|
@comment IPv6 basic API |
|
|
@deftypefun void if_freenameindex (struct if_nameindex *@var{ptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c if_freenameindex @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
This function frees the structure returned by an earlier call to |
|
|
@code{if_nameindex}. |
|
|
@end deftypefun |
|
|
@@ -660,6 +712,7 @@ |
|
|
@comment sys/un.h |
|
|
@comment BSD |
|
|
@deftypefn {Macro} int SUN_LEN (@emph{struct sockaddr_un *} @var{ptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The macro computes the length of socket address in the local namespace. |
|
|
@end deftypefn |
|
|
|
|
|
@@ -689,7 +742,7 @@ |
|
|
To create a socket in the IPv4 Internet namespace, use the symbolic name |
|
|
@code{PF_INET} of this namespace as the @var{namespace} argument to |
|
|
@code{socket} or @code{socketpair}. For IPv6 addresses you need the |
|
|
-macro @code{PF_INET6}. These macros are defined in @file{sys/socket.h}. |
|
|
+macro @code{PF_INET6}. These macros are defined in @file{sys/socket.h}. |
|
|
@pindex sys/socket.h |
|
|
|
|
|
@comment sys/socket.h |
|
|
@@ -726,12 +779,12 @@ |
|
|
* Internet Address Formats:: How socket addresses are specified in the |
|
|
Internet namespace. |
|
|
* Host Addresses:: All about host addresses of Internet host. |
|
|
-* Protocols Database:: Referring to protocols by name. |
|
|
* Ports:: Internet port numbers. |
|
|
* Services Database:: Ports may have symbolic names. |
|
|
* Byte Order:: Different hosts may use different byte |
|
|
ordering conventions; you need to |
|
|
canonicalize host address and port number. |
|
|
+* Protocols Database:: Referring to protocols by name. |
|
|
* Inet Example:: Putting it all together. |
|
|
@end menu |
|
|
|
|
|
@@ -1035,6 +1088,13 @@ |
|
|
@comment arpa/inet.h |
|
|
@comment BSD |
|
|
@deftypefun int inet_aton (const char *@var{name}, struct in_addr *@var{addr}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c inet_aton @mtslocale |
|
|
+@c isdigit dup @mtslocale |
|
|
+@c strtoul dup @mtslocale |
|
|
+@c isascii dup @mtslocale |
|
|
+@c isspace dup @mtslocale |
|
|
+@c htonl dup ok |
|
|
This function converts the IPv4 Internet host address @var{name} |
|
|
from the standard numbers-and-dots notation into binary data and stores |
|
|
it in the @code{struct in_addr} that @var{addr} points to. |
|
|
@@ -1044,10 +1104,13 @@ |
|
|
@comment arpa/inet.h |
|
|
@comment BSD |
|
|
@deftypefun {uint32_t} inet_addr (const char *@var{name}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c inet_addr @mtslocale |
|
|
+@c inet_aton dup @mtslocale |
|
|
This function converts the IPv4 Internet host address @var{name} from the |
|
|
standard numbers-and-dots notation into binary data. If the input is |
|
|
not valid, @code{inet_addr} returns @code{INADDR_NONE}. This is an |
|
|
-obsolete interface to @code{inet_aton}, described immediately above. It |
|
|
+obsolete interface to @code{inet_aton}, described immediately above. It |
|
|
is obsolete because @code{INADDR_NONE} is a valid address |
|
|
(255.255.255.255), and @code{inet_aton} provides a cleaner way to |
|
|
indicate error return. |
|
|
@@ -1056,9 +1119,15 @@ |
|
|
@comment arpa/inet.h |
|
|
@comment BSD |
|
|
@deftypefun {uint32_t} inet_network (const char *@var{name}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c inet_network @mtslocale |
|
|
+@c isdigit dup @mtslocale |
|
|
+@c isxdigit dup @mtslocale |
|
|
+@c tolower dup @mtslocale |
|
|
+@c isspace dup @mtslocale |
|
|
This function extracts the network number from the address @var{name}, |
|
|
-given in the standard numbers-and-dots notation. The returned address is |
|
|
-in host order. If the input is not valid, @code{inet_network} returns |
|
|
+given in the standard numbers-and-dots notation. The returned address is |
|
|
+in host order. If the input is not valid, @code{inet_network} returns |
|
|
@code{-1}. |
|
|
|
|
|
The function works only with traditional IPv4 class A, B and C network |
|
|
@@ -1069,6 +1138,10 @@ |
|
|
@comment arpa/inet.h |
|
|
@comment BSD |
|
|
@deftypefun {char *} inet_ntoa (struct in_addr @var{addr}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asurace{}}@acsafe{}} |
|
|
+@c inet_ntoa @mtslocale @asurace |
|
|
+@c writes to a thread-local static buffer |
|
|
+@c snprintf @mtslocale [no @ascuheap or @acsmem] |
|
|
This function converts the IPv4 Internet host address @var{addr} to a |
|
|
string in the standard numbers-and-dots notation. The return value is |
|
|
a pointer into a statically-allocated buffer. Subsequent calls will |
|
|
@@ -1087,6 +1160,9 @@ |
|
|
@comment arpa/inet.h |
|
|
@comment BSD |
|
|
@deftypefun {struct in_addr} inet_makeaddr (uint32_t @var{net}, uint32_t @var{local}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c inet_makeaddr ok |
|
|
+@c htonl dup ok |
|
|
This function makes an IPv4 Internet host address by combining the network |
|
|
number @var{net} with the local-address-within-network number |
|
|
@var{local}. |
|
|
@@ -1095,6 +1171,11 @@ |
|
|
@comment arpa/inet.h |
|
|
@comment BSD |
|
|
@deftypefun uint32_t inet_lnaof (struct in_addr @var{addr}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c inet_lnaof ok |
|
|
+@c ntohl dup ok |
|
|
+@c IN_CLASSA ok |
|
|
+@c IN_CLASSB ok |
|
|
This function returns the local-address-within-network part of the |
|
|
Internet host address @var{addr}. |
|
|
|
|
|
@@ -1106,6 +1187,11 @@ |
|
|
@comment arpa/inet.h |
|
|
@comment BSD |
|
|
@deftypefun uint32_t inet_netof (struct in_addr @var{addr}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c inet_netof ok |
|
|
+@c ntohl dup ok |
|
|
+@c IN_CLASSA ok |
|
|
+@c IN_CLASSB ok |
|
|
This function returns the network number part of the Internet host |
|
|
address @var{addr}. |
|
|
|
|
|
@@ -1117,6 +1203,16 @@ |
|
|
@comment arpa/inet.h |
|
|
@comment IPv6 basic API |
|
|
@deftypefun int inet_pton (int @var{af}, const char *@var{cp}, void *@var{buf}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c inet_pton @mtslocale |
|
|
+@c inet_pton4 ok |
|
|
+@c memcpy dup ok |
|
|
+@c inet_pton6 @mtslocale |
|
|
+@c memset dup ok |
|
|
+@c tolower dup @mtslocale |
|
|
+@c strchr dup ok |
|
|
+@c inet_pton4 dup ok |
|
|
+@c memcpy dup ok |
|
|
This function converts an Internet address (either IPv4 or IPv6) from |
|
|
presentation (textual) to network (binary) format. @var{af} should be |
|
|
either @code{AF_INET} or @code{AF_INET6}, as appropriate for the type of |
|
|
@@ -1127,7 +1223,17 @@ |
|
|
|
|
|
@comment arpa/inet.h |
|
|
@comment IPv6 basic API |
|
|
-@deftypefun {const char *} inet_ntop (int @var{af}, const void *@var{cp}, char *@var{buf}, size_t @var{len}) |
|
|
+@deftypefun {const char *} inet_ntop (int @var{af}, const void *@var{cp}, char *@var{buf}, socklen_t @var{len}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c inet_ntop @mtslocale |
|
|
+@c inet_ntop4 @mtslocale |
|
|
+@c sprintf dup @mtslocale [no @ascuheap or @acsmem] |
|
|
+@c strcpy dup ok |
|
|
+@c inet_ntop6 @mtslocale |
|
|
+@c memset dup ok |
|
|
+@c inet_ntop4 dup @mtslocale |
|
|
+@c sprintf dup @mtslocale [no @ascuheap or @acsmem] |
|
|
+@c strcpy dup ok |
|
|
This function converts an Internet address (either IPv4 or IPv6) from |
|
|
network (binary) to presentation (textual) form. @var{af} should be |
|
|
either @code{AF_INET} or @code{AF_INET6}, as appropriate. @var{cp} is a |
|
|
@@ -1211,6 +1317,71 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun {struct hostent *} gethostbyname (const char *@var{name}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostbyname} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}} |
|
|
+@c gethostbyname @mtasurace:hostbyname @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c nss_hostname_digits_dots @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c res_maybe_init(!preinit) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c res_iclose @acsuheap @acsmem @acsfd |
|
|
+@c close_not_cancel_no_status dup @acsfd |
|
|
+@c free dup @acsuheap @acsmem |
|
|
+@c res_vinit @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c res_randomid ok |
|
|
+@c getpid dup ok |
|
|
+@c getenv dup @mtsenv |
|
|
+@c strncpy dup ok |
|
|
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c fsetlocking dup ok [no concurrent uses] |
|
|
+@c fgets_unlocked dup ok [no concurrent uses] |
|
|
+@c MATCH ok |
|
|
+@c strncmp dup ok |
|
|
+@c strpbrk dup ok |
|
|
+@c strchr dup ok |
|
|
+@c inet_aton dup @mtslocale |
|
|
+@c htons dup |
|
|
+@c inet_pton dup @mtslocale |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c IN6_IS_ADDR_LINKLOCAL ok |
|
|
+@c htonl dup ok |
|
|
+@c IN6_IS_ADDR_MC_LINKLOCAL ok |
|
|
+@c if_nametoindex dup @asulock @aculock @acsfd |
|
|
+@c strtoul dup @mtslocale |
|
|
+@c ISSORTMASK ok |
|
|
+@c strchr dup ok |
|
|
+@c isascii dup @mtslocale |
|
|
+@c isspace dup @mtslocale |
|
|
+@c net_mask ok |
|
|
+@c ntohl dup ok |
|
|
+@c IN_CLASSA dup ok |
|
|
+@c htonl dup ok |
|
|
+@c IN_CLASSB dup ok |
|
|
+@c res_setoptions @mtslocale |
|
|
+@c strncmp dup ok |
|
|
+@c atoi dup @mtslocale |
|
|
+@c fclose dup @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c inet_makeaddr dup ok |
|
|
+@c gethostname dup ok |
|
|
+@c strcpy dup ok |
|
|
+@c rawmemchr dup ok |
|
|
+@c res_ninit @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c res_vinit dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c isdigit dup @mtslocale |
|
|
+@c isxdigit dup @mtslocale |
|
|
+@c strlen dup ok |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c memset dup ok |
|
|
+@c inet_aton dup @mtslocale |
|
|
+@c inet_pton dup @mtslocale |
|
|
+@c strcpy dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c strchr dup ok |
|
|
+@c gethostbyname_r dup @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+@c set_h_errno ok |
|
|
The @code{gethostbyname} function returns information about the host |
|
|
named @var{name}. If the lookup fails, it returns a null pointer. |
|
|
@end deftypefun |
|
|
@@ -1218,6 +1389,16 @@ |
|
|
@comment netdb.h |
|
|
@comment IPv6 Basic API |
|
|
@deftypefun {struct hostent *} gethostbyname2 (const char *@var{name}, int @var{af}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostbyname2} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}} |
|
|
+@c gethostbyname2 @mtasurace:hostbyname2 @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c nss_hostname_digits_dots dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c gethostbyname2_r dup @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+@c set_h_errno dup ok |
|
|
The @code{gethostbyname2} function is like @code{gethostbyname}, but |
|
|
allows the caller to specify the desired address family (e.g.@: |
|
|
@code{AF_INET} or @code{AF_INET6}) of the result. |
|
|
@@ -1225,11 +1406,20 @@ |
|
|
|
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
-@deftypefun {struct hostent *} gethostbyaddr (const char *@var{addr}, size_t @var{length}, int @var{format}) |
|
|
+@deftypefun {struct hostent *} gethostbyaddr (const void *@var{addr}, socklen_t @var{length}, int @var{format}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostbyaddr} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}} |
|
|
+@c gethostbyaddr @mtasurace:hostbyaddr @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c gethostbyaddr_r dup @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+@c set_h_errno dup ok |
|
|
The @code{gethostbyaddr} function returns information about the host |
|
|
with Internet address @var{addr}. The parameter @var{addr} is not |
|
|
really a pointer to char - it can be a pointer to an IPv4 or an IPv6 |
|
|
-address. The @var{length} argument is the size (in bytes) of the address |
|
|
+address. The @var{length} argument is the size (in bytes) of the address |
|
|
at @var{addr}. @var{format} specifies the address format; for an IPv4 |
|
|
Internet address, specify a value of @code{AF_INET}; for an IPv6 |
|
|
Internet address, use @code{AF_INET6}. |
|
|
@@ -1282,6 +1472,76 @@ |
|
|
@comment netdb.h |
|
|
@comment GNU |
|
|
@deftypefun int gethostbyname_r (const char *restrict @var{name}, struct hostent *restrict @var{result_buf}, char *restrict @var{buf}, size_t @var{buflen}, struct hostent **restrict @var{result}, int *restrict @var{h_errnop}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}} |
|
|
+@c gethostbyname_r @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd |
|
|
+@c nss_hostname_digits_dots dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c nscd_gethostbyname_r @mtsenv @ascuheap @acsfd @acsmem |
|
|
+@c nscd_gethst_r @mtsenv @ascuheap @acsfd @acsmem |
|
|
+@c getenv dup @mtsenv |
|
|
+@c nscd_get_map_ref dup @ascuheap @acsfd @acsmem |
|
|
+@c nscd_cache_search dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c nscd_open_socket dup @acsfd |
|
|
+@c readvall dup ok |
|
|
+@c readall dup ok |
|
|
+@c close_not_cancel_no_status dup @acsfd |
|
|
+@c nscd_drop_map_ref dup @ascuheap @acsmem |
|
|
+@c nscd_unmap dup @ascuheap @acsmem |
|
|
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c res_hconf_init @mtsenv @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem [no @asuinit:reshconf @acuinit:reshconf, conditionally called] |
|
|
+@c res_hconf.c:do_init @mtsenv @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem |
|
|
+@c memset dup ok |
|
|
+@c getenv dup @mtsenv |
|
|
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c fsetlocking dup ok [no concurrent uses] |
|
|
+@c fgets_unlocked dup ok [no concurrent uses] |
|
|
+@c strchrnul dup ok |
|
|
+@c res_hconf.c:parse_line @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem |
|
|
+@c skip_ws dup @mtslocale |
|
|
+@c skip_string dup @mtslocale |
|
|
+@c strncasecmp dup @mtslocale |
|
|
+@c strlen dup ok |
|
|
+@c asprintf dup @mtslocale @ascuheap @acsmem |
|
|
+@c fxprintf dup @asucorrupt @aculock @acucorrupt |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c arg_trimdomain_list dup @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem |
|
|
+@c arg_spoof dup @mtslocale |
|
|
+@c arg_bool dup @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem |
|
|
+@c isspace dup @mtslocale |
|
|
+@c fclose dup @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c arg_spoof @mtslocale |
|
|
+@c skip_string @mtslocale |
|
|
+@c isspace dup @mtslocale |
|
|
+@c strncasecmp dup @mtslocale |
|
|
+@c arg_bool @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem |
|
|
+@c strncasecmp dup @mtslocale |
|
|
+@c asprintf dup @mtslocale @ascuheap @acsmem |
|
|
+@c fxprintf dup @asucorrupt @aculock @acucorrupt |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c arg_trimdomain_list @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem |
|
|
+@c skip_string dup @mtslocale |
|
|
+@c asprintf dup @mtslocale @ascuheap @acsmem |
|
|
+@c fxprintf dup @asucorrupt @aculock @acucorrupt |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c strndup dup @ascuheap @acsmem |
|
|
+@c skip_ws @mtslocale |
|
|
+@c isspace dup @mtslocale |
|
|
+@c nss_hosts_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_database_lookup dup @mtslocale @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock |
|
|
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.l -> _nss_*_gethostbyname_r @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c res_hconf_reorder_addrs @asulock @ascuheap @aculock @acsmem @acsfd |
|
|
+@c socket dup @acsfd |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c ifreq @ascuheap @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c if_nextreq dup ok |
|
|
+@c ioctl dup ok |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c if_freereq dup @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+@c close dup @acsfd |
|
|
The @code{gethostbyname_r} function returns information about the host |
|
|
named @var{name}. The caller must pass a pointer to an object of type |
|
|
@code{struct hostent} in the @var{result_buf} parameter. In addition |
|
|
@@ -1290,37 +1550,42 @@ |
|
|
parameters. |
|
|
|
|
|
A pointer to the buffer, in which the result is stored, is available in |
|
|
-@code{*@var{result}} after the function call successfully returned. If |
|
|
-an error occurs or if no entry is found, the pointer @code{*@var{result}} |
|
|
-is a null pointer. Success is signalled by a zero return value. If the |
|
|
-function failed the return value is an error number. In addition to the |
|
|
-errors defined for @code{gethostbyname} it can also be @code{ERANGE}. |
|
|
-In this case the call should be repeated with a larger buffer. |
|
|
-Additional error information is not stored in the global variable |
|
|
-@code{h_errno} but instead in the object pointed to by @var{h_errnop}. |
|
|
+@code{*@var{result}} after the function call successfully returned. The |
|
|
+buffer passed as the @var{buf} parameter can be freed only once the caller |
|
|
+has finished with the result hostent struct, or has copied it including all |
|
|
+the other memory that it points to. If an error occurs or if no entry is |
|
|
+found, the pointer @code{*@var{result}} is a null pointer. Success is |
|
|
+signalled by a zero return value. If the function failed the return value |
|
|
+is an error number. In addition to the errors defined for |
|
|
+@code{gethostbyname} it can also be @code{ERANGE}. In this case the call |
|
|
+should be repeated with a larger buffer. Additional error information is |
|
|
+not stored in the global variable @code{h_errno} but instead in the object |
|
|
+pointed to by @var{h_errnop}. |
|
|
|
|
|
Here's a small example: |
|
|
@smallexample |
|
|
struct hostent * |
|
|
gethostname (char *host) |
|
|
@{ |
|
|
- struct hostent hostbuf, *hp; |
|
|
+ struct hostent *hostbuf, *hp; |
|
|
size_t hstbuflen; |
|
|
char *tmphstbuf; |
|
|
int res; |
|
|
int herr; |
|
|
|
|
|
+ hostbuf = malloc (sizeof (struct hostent)); |
|
|
hstbuflen = 1024; |
|
|
- /* Allocate buffer, remember to free it to avoid memory leakage. */ |
|
|
tmphstbuf = malloc (hstbuflen); |
|
|
|
|
|
- while ((res = gethostbyname_r (host, &hostbuf, tmphstbuf, hstbuflen, |
|
|
+ while ((res = gethostbyname_r (host, hostbuf, tmphstbuf, hstbuflen, |
|
|
&hp, &herr)) == ERANGE) |
|
|
@{ |
|
|
/* Enlarge the buffer. */ |
|
|
hstbuflen *= 2; |
|
|
tmphstbuf = realloc (tmphstbuf, hstbuflen); |
|
|
@} |
|
|
+ |
|
|
+ free (tmphstbuf); |
|
|
/* Check for errors. */ |
|
|
if (res || hp == NULL) |
|
|
return NULL; |
|
|
@@ -1332,6 +1597,17 @@ |
|
|
@comment netdb.h |
|
|
@comment GNU |
|
|
@deftypefun int gethostbyname2_r (const char *@var{name}, int @var{af}, struct hostent *restrict @var{result_buf}, char *restrict @var{buf}, size_t @var{buflen}, struct hostent **restrict @var{result}, int *restrict @var{h_errnop}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}} |
|
|
+@c gethostbyname2_r @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd |
|
|
+@c nss_hostname_digits_dots dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c nscd_gethostbyname2_r @mtsenv @ascuheap @asulock @aculock @acsfd @acsmem |
|
|
+@c nscd_gethst_r dup @mtsenv @ascuheap @asulock @aculock @acsfd @acsmem |
|
|
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c res_hconf_init dup @mtsenv @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem [no @asuinit:reshconf @acuinit:reshconf, conditionally called] |
|
|
+@c nss_hosts_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.l -> _nss_*_gethostbyname2_r @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c res_hconf_reorder_addrs dup @asulock @ascuheap @aculock @acsmem @acsfd |
|
|
The @code{gethostbyname2_r} function is like @code{gethostbyname_r}, but |
|
|
allows the caller to specify the desired address family (e.g.@: |
|
|
@code{AF_INET} or @code{AF_INET6}) for the result. |
|
|
@@ -1339,11 +1615,26 @@ |
|
|
|
|
|
@comment netdb.h |
|
|
@comment GNU |
|
|
-@deftypefun int gethostbyaddr_r (const char *@var{addr}, size_t @var{length}, int @var{format}, struct hostent *restrict @var{result_buf}, char *restrict @var{buf}, size_t @var{buflen}, struct hostent **restrict @var{result}, int *restrict @var{h_errnop}) |
|
|
+@deftypefun int gethostbyaddr_r (const void *@var{addr}, socklen_t @var{length}, int @var{format}, struct hostent *restrict @var{result_buf}, char *restrict @var{buf}, size_t @var{buflen}, struct hostent **restrict @var{result}, int *restrict @var{h_errnop}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}} |
|
|
+@c gethostbyaddr_r @mtsenv @mtslocale @ascudlopen @ascuplugin @asucorrupt @ascuheap @asulock @aculock @acucorrupt @acsmem @acsfd |
|
|
+@c memcmp dup ok |
|
|
+@c nscd_gethostbyaddr_r @mtsenv @ascuheap @asulock @aculock @acsfd @acsmem |
|
|
+@c nscd_gethst_r dup @mtsenv @ascuheap @asulock @aculock @acsfd @acsmem |
|
|
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c res_hconf_init dup @mtsenv @mtslocale @asucorrupt @ascuheap @aculock @acucorrupt @acsmem [no @asuinit:reshconf @acuinit:reshconf, conditionally called] |
|
|
+@c nss_hosts_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.l -> _nss_*_gethostbyaddr_r @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c res_hconf_reorder_addrs dup @asulock @ascuheap @aculock @acsmem @acsfd |
|
|
+@c res_hconf_trim_domains @mtslocale |
|
|
+@c res_hconf_trim_domain @mtslocale |
|
|
+@c strlen dup ok |
|
|
+@c strcasecmp dup @mtslocale |
|
|
The @code{gethostbyaddr_r} function returns information about the host |
|
|
with Internet address @var{addr}. The parameter @var{addr} is not |
|
|
really a pointer to char - it can be a pointer to an IPv4 or an IPv6 |
|
|
-address. The @var{length} argument is the size (in bytes) of the address |
|
|
+address. The @var{length} argument is the size (in bytes) of the address |
|
|
at @var{addr}. @var{format} specifies the address format; for an IPv4 |
|
|
Internet address, specify a value of @code{AF_INET}; for an IPv6 |
|
|
Internet address, use @code{AF_INET6}. |
|
|
@@ -1362,6 +1653,18 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun void sethostent (int @var{stayopen}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostent} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c sethostent @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c nss_setent(nss_hosts_lookup2) @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c set_h_errno dup ok |
|
|
+@c setup(nss_hosts_lookup2) @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *lookup_fct = nss_hosts_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.f @mtasurace:hostent @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
This function opens the hosts database to begin scanning it. You can |
|
|
then call @code{gethostent} to read the entries. |
|
|
|
|
|
@@ -1377,6 +1680,27 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun {struct hostent *} gethostent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostent} @mtasurace{:hostentbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c gethostent @mtasurace:hostent @mtasurace:hostentbuf @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c nss_getent(gethostent_r) @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c *func = gethostent_r dup @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+@c |
|
|
+@c gethostent_r @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c nss_getent_r(nss_hosts_lookup2) @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c setup(nss_hosts_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.f @mtasurace:hostent @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *sfct.f @mtasurace:hostent @ascuplugin |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+ |
|
|
This function returns the next entry in the hosts database. It |
|
|
returns a null pointer if there are no more entries. |
|
|
@end deftypefun |
|
|
@@ -1384,6 +1708,15 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun void endhostent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:hostent} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c endhostent @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c nss_endent(nss_hosts_lookup2) @mtasurace:hostent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c setup(nss_passwd_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.f @mtasurace:hostent @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_unlock @aculock |
|
|
This function closes the hosts database. |
|
|
@end deftypefun |
|
|
|
|
|
@@ -1483,6 +1816,34 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun {struct servent *} getservbyname (const char *@var{name}, const char *@var{proto}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:servbyname} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getservbyname =~ getpwuid @mtasurace:servbyname @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c getservbyname_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+@c |
|
|
+@c getservbyname_r =~ getpwuid_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nscd_getservbyname_r @ascuheap @acsfd @acsmem |
|
|
+@c nscd_getserv_r @ascuheap @acsfd @acsmem |
|
|
+@c nscd_get_map_ref dup @ascuheap @acsfd @acsmem |
|
|
+@c strlen dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c mempcpy dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c nscd_cache_search dup ok |
|
|
+@c nscd_open_socket dup @acsfd |
|
|
+@c readvall dup ok |
|
|
+@c readall dup ok |
|
|
+@c close_not_cancel_no_status dup @acsfd |
|
|
+@c nscd_drop_map_ref dup @ascuheap @acsmem |
|
|
+@c nscd_unmap dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c nss_services_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.l -> _nss_*_getservbyname_r @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
The @code{getservbyname} function returns information about the |
|
|
service named @var{name} using protocol @var{proto}. If it can't find |
|
|
such a service, it returns a null pointer. |
|
|
@@ -1494,6 +1855,21 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun {struct servent *} getservbyport (int @var{port}, const char *@var{proto}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:servbyport} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getservbyport =~ getservbyname @mtasurace:servbyport @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c getservbyport_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+@c |
|
|
+@c getservbyport_r =~ getservbyname_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nscd_getservbyport_r @ascuheap @acsfd @acsmem |
|
|
+@c nscd_getserv_r dup @ascuheap @acsfd @acsmem |
|
|
+@c nss_services_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.l -> _nss_*_getservbyport_r @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
The @code{getservbyport} function returns information about the |
|
|
service at port @var{port} using protocol @var{proto}. If it can't |
|
|
find such a service, it returns a null pointer. |
|
|
@@ -1507,6 +1883,16 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun void setservent (int @var{stayopen}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:servent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c setservent @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c nss_setent(nss_services_lookup2) @mtasurace:servenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c setup(nss_services_lookup2) @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *lookup_fct = nss_services_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.f @mtasurace:servent @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
This function opens the services database to begin scanning it. |
|
|
|
|
|
If the @var{stayopen} argument is nonzero, this sets a flag so that |
|
|
@@ -1519,6 +1905,25 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun {struct servent *} getservent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:servent} @mtasurace{:serventbuf} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getservent @mtasurace:servent @mtasurace:serventbuf @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c nss_getent(getservent_r) @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c *func = getservent_r dup @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+@c |
|
|
+@c getservent_r @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c nss_getent_r(nss_services_lookup2) @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c setup(nss_services_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.f @mtasurace:servent @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *sfct.f @mtasurace:servent @ascuplugin |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
This function returns the next entry in the services database. If |
|
|
there are no more entries, it returns a null pointer. |
|
|
@end deftypefun |
|
|
@@ -1526,6 +1931,14 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun void endservent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:servent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c endservent @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c nss_endent(nss_services_lookup2) @mtasurace:servent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c setup(nss_services_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.f @mtasurace:servent @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_unlock @aculock |
|
|
This function closes the services database. |
|
|
@end deftypefun |
|
|
|
|
|
@@ -1571,6 +1984,11 @@ |
|
|
@comment netinet/in.h |
|
|
@comment BSD |
|
|
@deftypefun {uint16_t} htons (uint16_t @var{hostshort}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c htons ok |
|
|
+@c bswap_16 ok |
|
|
+@c bswap_constant_16 ok |
|
|
+ |
|
|
This function converts the @code{uint16_t} integer @var{hostshort} from |
|
|
host byte order to network byte order. |
|
|
@end deftypefun |
|
|
@@ -1578,6 +1996,8 @@ |
|
|
@comment netinet/in.h |
|
|
@comment BSD |
|
|
@deftypefun {uint16_t} ntohs (uint16_t @var{netshort}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Alias to htons. |
|
|
This function converts the @code{uint16_t} integer @var{netshort} from |
|
|
network byte order to host byte order. |
|
|
@end deftypefun |
|
|
@@ -1585,6 +2005,9 @@ |
|
|
@comment netinet/in.h |
|
|
@comment BSD |
|
|
@deftypefun {uint32_t} htonl (uint32_t @var{hostlong}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c htonl ok |
|
|
+@c bswap_32 dup ok |
|
|
This function converts the @code{uint32_t} integer @var{hostlong} from |
|
|
host byte order to network byte order. |
|
|
|
|
|
@@ -1594,6 +2017,8 @@ |
|
|
@comment netinet/in.h |
|
|
@comment BSD |
|
|
@deftypefun {uint32_t} ntohl (uint32_t @var{netlong}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Alias to htonl. |
|
|
This function converts the @code{uint32_t} integer @var{netlong} from |
|
|
network byte order to host byte order. |
|
|
|
|
|
@@ -1658,6 +2083,20 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun {struct protoent *} getprotobyname (const char *@var{name}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:protobyname} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getprotobyname =~ getpwuid @mtasurace:protobyname @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c getprotobyname_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+@c |
|
|
+@c getprotobyname_r =~ getpwuid_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c no nscd support |
|
|
+@c nss_protocols_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.l -> _nss_*_getprotobyname_r @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
The @code{getprotobyname} function returns information about the |
|
|
network protocol named @var{name}. If there is no such protocol, it |
|
|
returns a null pointer. |
|
|
@@ -1666,6 +2105,20 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun {struct protoent *} getprotobynumber (int @var{protocol}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:protobynumber} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getprotobynumber =~ getpwuid @mtasurace:protobynumber @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c getprotobynumber_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+@c |
|
|
+@c getprotobynumber_r =~ getpwuid_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c no nscd support |
|
|
+@c nss_protocols_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.l -> _nss_*_getprotobynumber_r @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
The @code{getprotobynumber} function returns information about the |
|
|
network protocol with number @var{protocol}. If there is no such |
|
|
protocol, it returns a null pointer. |
|
|
@@ -1678,6 +2131,16 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun void setprotoent (int @var{stayopen}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:protoent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c setprotoent @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c nss_setent(nss_protocols_lookup2) @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c setup(nss_protocols_lookup2) @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *lookup_fct = nss_protocols_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.f @mtasurace:protoent @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
This function opens the protocols database to begin scanning it. |
|
|
|
|
|
If the @var{stayopen} argument is nonzero, this sets a flag so that |
|
|
@@ -1690,6 +2153,25 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun {struct protoent *} getprotoent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:protoent} @mtasurace{:protoentbuf} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getprotoent @mtasurace:protoent @mtasurace:protoentbuf @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c nss_getent(getprotoent_r) @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c *func = getprotoent_r dup @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+@c |
|
|
+@c getprotoent_r @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c nss_getent_r(nss_protocols_lookup2) @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c setup(nss_protocols_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.f @mtasurace:servent @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *sfct.f @mtasurace:protoent @ascuplugin |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
This function returns the next entry in the protocols database. It |
|
|
returns a null pointer if there are no more entries. |
|
|
@end deftypefun |
|
|
@@ -1697,6 +2179,14 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun void endprotoent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:protoent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c endprotoent @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c nss_endent(nss_protocols_lookup2) @mtasurace:protoent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c setup(nss_protocols_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.f @mtasurace:protoent @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_unlock @aculock |
|
|
This function closes the protocols database. |
|
|
@end deftypefun |
|
|
|
|
|
@@ -1766,6 +2256,7 @@ |
|
|
@comment sys/socket.h |
|
|
@comment BSD |
|
|
@deftypefun int socket (int @var{namespace}, int @var{style}, int @var{protocol}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}} |
|
|
This function creates a socket and specifies communication style |
|
|
@var{style}, which should be one of the socket styles listed in |
|
|
@ref{Communication Styles}. The @var{namespace} argument specifies |
|
|
@@ -1828,6 +2319,7 @@ |
|
|
@comment sys/socket.h |
|
|
@comment BSD |
|
|
@deftypefun int shutdown (int @var{socket}, int @var{how}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{shutdown} function shuts down the connection of socket |
|
|
@var{socket}. The argument @var{how} specifies what action to |
|
|
perform: |
|
|
@@ -1879,6 +2371,7 @@ |
|
|
@comment sys/socket.h |
|
|
@comment BSD |
|
|
@deftypefun int socketpair (int @var{namespace}, int @var{style}, int @var{protocol}, int @var{filedes}@t{[2]}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}} |
|
|
This function creates a socket pair, returning the file descriptors in |
|
|
@code{@var{filedes}[0]} and @code{@var{filedes}[1]}. The socket pair |
|
|
is a full-duplex communications channel, so that both reading and writing |
|
|
@@ -1972,6 +2465,7 @@ |
|
|
@comment sys/socket.h |
|
|
@comment BSD |
|
|
@deftypefun int connect (int @var{socket}, struct sockaddr *@var{addr}, socklen_t @var{length}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{connect} function initiates a connection from the socket |
|
|
with file descriptor @var{socket} to the socket whose address is |
|
|
specified by the @var{addr} and @var{length} arguments. (This socket |
|
|
@@ -2071,6 +2565,7 @@ |
|
|
@comment sys/socket.h |
|
|
@comment BSD |
|
|
@deftypefun int listen (int @var{socket}, int @var{n}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}} |
|
|
The @code{listen} function enables the socket @var{socket} to accept |
|
|
connections, thus making it a server socket. |
|
|
|
|
|
@@ -2123,6 +2618,7 @@ |
|
|
@comment sys/socket.h |
|
|
@comment BSD |
|
|
@deftypefun int accept (int @var{socket}, struct sockaddr *@var{addr}, socklen_t *@var{length_ptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}} |
|
|
This function is used to accept a connection request on the server |
|
|
socket @var{socket}. |
|
|
|
|
|
@@ -2181,6 +2677,7 @@ |
|
|
@comment sys/socket.h |
|
|
@comment BSD |
|
|
@deftypefun int getpeername (int @var{socket}, struct sockaddr *@var{addr}, socklen_t *@var{length-ptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{getpeername} function returns the address of the socket that |
|
|
@var{socket} is connected to; it stores the address in the memory space |
|
|
specified by @var{addr} and @var{length-ptr}. It stores the length of |
|
|
@@ -2248,7 +2745,8 @@ |
|
|
|
|
|
@comment sys/socket.h |
|
|
@comment BSD |
|
|
-@deftypefun int send (int @var{socket}, void *@var{buffer}, size_t @var{size}, int @var{flags}) |
|
|
+@deftypefun ssize_t send (int @var{socket}, const void *@var{buffer}, size_t @var{size}, int @var{flags}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{send} function is like @code{write}, but with the additional |
|
|
flags @var{flags}. The possible values of @var{flags} are described |
|
|
in @ref{Socket Data Options}. |
|
|
@@ -2315,7 +2813,8 @@ |
|
|
|
|
|
@comment sys/socket.h |
|
|
@comment BSD |
|
|
-@deftypefun int recv (int @var{socket}, void *@var{buffer}, size_t @var{size}, int @var{flags}) |
|
|
+@deftypefun ssize_t recv (int @var{socket}, void *@var{buffer}, size_t @var{size}, int @var{flags}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{recv} function is like @code{read}, but with the additional |
|
|
flags @var{flags}. The possible values of @var{flags} are described |
|
|
in @ref{Socket Data Options}. |
|
|
@@ -2643,7 +3142,8 @@ |
|
|
|
|
|
@comment sys/socket.h |
|
|
@comment BSD |
|
|
-@deftypefun int sendto (int @var{socket}, void *@var{buffer}, size_t @var{size}, int @var{flags}, struct sockaddr *@var{addr}, socklen_t @var{length}) |
|
|
+@deftypefun ssize_t sendto (int @var{socket}, const void *@var{buffer}, size_t @var{size}, int @var{flags}, struct sockaddr *@var{addr}, socklen_t @var{length}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{sendto} function transmits the data in the @var{buffer} |
|
|
through the socket @var{socket} to the destination address specified |
|
|
by the @var{addr} and @var{length} arguments. The @var{size} argument |
|
|
@@ -2678,7 +3178,8 @@ |
|
|
|
|
|
@comment sys/socket.h |
|
|
@comment BSD |
|
|
-@deftypefun int recvfrom (int @var{socket}, void *@var{buffer}, size_t @var{size}, int @var{flags}, struct sockaddr *@var{addr}, socklen_t *@var{length-ptr}) |
|
|
+@deftypefun ssize_t recvfrom (int @var{socket}, void *@var{buffer}, size_t @var{size}, int @var{flags}, struct sockaddr *@var{addr}, socklen_t *@var{length-ptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{recvfrom} function reads one packet from the socket |
|
|
@var{socket} into the buffer @var{buffer}. The @var{size} argument |
|
|
specifies the maximum number of bytes to be read. |
|
|
@@ -2725,7 +3226,8 @@ |
|
|
|
|
|
@comment sys/socket.h |
|
|
@comment BSD |
|
|
-@deftypefun int sendmsg (int @var{socket}, const struct msghdr *@var{message}, int @var{flags}) |
|
|
+@deftypefun ssize_t sendmsg (int @var{socket}, const struct msghdr *@var{message}, int @var{flags}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
This function is defined as a cancellation point in multi-threaded |
|
|
programs, so one has to be prepared for this and make sure that |
|
|
@@ -2736,7 +3238,8 @@ |
|
|
|
|
|
@comment sys/socket.h |
|
|
@comment BSD |
|
|
-@deftypefun int recvmsg (int @var{socket}, struct msghdr *@var{message}, int @var{flags}) |
|
|
+@deftypefun ssize_t recvmsg (int @var{socket}, struct msghdr *@var{message}, int @var{flags}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
This function is defined as a cancellation point in multi-threaded |
|
|
programs, so one has to be prepared for this and make sure that |
|
|
@@ -2924,6 +3427,7 @@ |
|
|
@comment sys/socket.h |
|
|
@comment BSD |
|
|
@deftypefun int getsockopt (int @var{socket}, int @var{level}, int @var{optname}, void *@var{optval}, socklen_t *@var{optlen-ptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{getsockopt} function gets information about the value of |
|
|
option @var{optname} at level @var{level} for socket @var{socket}. |
|
|
|
|
|
@@ -2953,7 +3457,8 @@ |
|
|
|
|
|
@comment sys/socket.h |
|
|
@comment BSD |
|
|
-@deftypefun int setsockopt (int @var{socket}, int @var{level}, int @var{optname}, void *@var{optval}, socklen_t @var{optlen}) |
|
|
+@deftypefun int setsockopt (int @var{socket}, int @var{level}, int @var{optname}, const void *@var{optval}, socklen_t @var{optlen}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is used to set the socket option @var{optname} at level |
|
|
@var{level} for socket @var{socket}. The value of the option is passed |
|
|
in the buffer @var{optval} of size @var{optlen}. |
|
|
@@ -3150,6 +3655,21 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun {struct netent *} getnetbyname (const char *@var{name}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:netbyname} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getnetbyname =~ getpwuid @mtasurace:netbyname @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c getnetbyname_r dup @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+@c |
|
|
+@c getnetbyname_r =~ getpwuid_r @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c no nscd support |
|
|
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c nss_networks_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.l -> _nss_*_getnetbyname_r @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
The @code{getnetbyname} function returns information about the network |
|
|
named @var{name}. It returns a null pointer if there is no such |
|
|
network. |
|
|
@@ -3157,7 +3677,21 @@ |
|
|
|
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
-@deftypefun {struct netent *} getnetbyaddr (unsigned long int @var{net}, int @var{type}) |
|
|
+@deftypefun {struct netent *} getnetbyaddr (uint32_t @var{net}, int @var{type}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:netbyaddr} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getnetbyaddr =~ getpwuid @mtasurace:netbyaddr @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c getnetbyaddr_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+@c |
|
|
+@c getnetbyaddr_r =~ getpwuid_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c no nscd support |
|
|
+@c nss_networks_lookup2 =~ nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.l -> _nss_*_getnetbyaddr_r @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
The @code{getnetbyaddr} function returns information about the network |
|
|
of type @var{type} with number @var{net}. You should specify a value of |
|
|
@code{AF_INET} for the @var{type} argument for Internet networks. |
|
|
@@ -3173,6 +3707,17 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun void setnetent (int @var{stayopen}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:netent} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c setnetent @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c nss_setent(nss_networks_lookup2) @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c setup(nss_networks_lookup2) @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *lookup_fct = nss_networks_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.f @mtasurace:netent @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
This function opens and rewinds the networks database. |
|
|
|
|
|
If the @var{stayopen} argument is nonzero, this sets a flag so that |
|
|
@@ -3185,6 +3730,26 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun {struct netent *} getnetent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:netent} @mtasurace{:netentbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getnetent @mtasurace:netent @mtasurace:netentbuf @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c nss_getent(getnetent_r) @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c *func = getnetent_r dup @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+@c |
|
|
+@c getnetent_r @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c nss_getent_r(nss_networks_lookup2) @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c setup(nss_networks_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.f @mtasurace:servent @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *sfct.f @mtasurace:netent @ascuplugin |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
This function returns the next entry in the networks database. It |
|
|
returns a null pointer if there are no more entries. |
|
|
@end deftypefun |
|
|
@@ -3192,5 +3757,14 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun void endnetent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:netent} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c endnetent @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c nss_endent(nss_networks_lookup2) @mtasurace:netent @mtsenv @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c res_maybe_init(!preinit) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c setup(nss_networks_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.f @mtasurace:netent @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_unlock @aculock |
|
|
This function closes the networks database. |
|
|
@end deftypefun |
|
|
diff -urN glibc-2.17-c758a686/manual/startup.texi glibc-2.17-c758a686/manual/startup.texi |
|
|
--- glibc-2.17-c758a686/manual/startup.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/startup.texi 2014-09-12 16:10:06.042792724 -0400 |
|
|
@@ -41,7 +41,7 @@ |
|
|
* Program Termination:: Telling the system you're done; return status |
|
|
@end menu |
|
|
|
|
|
-@node Program Arguments |
|
|
+@node Program Arguments, Environment Variables, , Program Basics |
|
|
@section Program Arguments |
|
|
@cindex program arguments |
|
|
@cindex command line arguments |
|
|
@@ -220,7 +220,12 @@ |
|
|
available. |
|
|
|
|
|
@comment stdlib.h |
|
|
-@deftypefun int getsubopt (char **@var{optionp}, const char* const *@var{tokens}, char **@var{valuep}) |
|
|
+@deftypefun int getsubopt (char **@var{optionp}, char *const *@var{tokens}, char **@var{valuep}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c getsubopt ok |
|
|
+@c strchrnul dup ok |
|
|
+@c memchr dup ok |
|
|
+@c strncmp dup ok |
|
|
|
|
|
The @var{optionp} parameter must be a pointer to a variable containing |
|
|
the address of the string to process. When the function returns the |
|
|
@@ -258,7 +263,7 @@ |
|
|
@end smallexample |
|
|
|
|
|
|
|
|
-@node Environment Variables |
|
|
+@node Environment Variables, Auxiliary Vector, Program Arguments, Program Basics |
|
|
@section Environment Variables |
|
|
|
|
|
@cindex environment variable |
|
|
@@ -322,6 +327,8 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun {char *} getenv (const char *@var{name}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{}}@assafe{}@acsafe{}} |
|
|
+@c Unguarded access to __environ. |
|
|
This function returns a string that is the value of the environment |
|
|
variable @var{name}. You must not modify this string. In some non-Unix |
|
|
systems not using @theglibc{}, it might be overwritten by subsequent |
|
|
@@ -333,6 +340,8 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} secure_getenv (const char *@var{name}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{}}@assafe{}@acsafe{}} |
|
|
+@c Calls getenv unless secure mode is enabled. |
|
|
This function is similar to @code{getenv}, but it returns a null |
|
|
pointer if the environment is untrusted. This happens when the |
|
|
program file has SUID or SGID bits set. General-purpose libraries |
|
|
@@ -346,6 +355,13 @@ |
|
|
@comment stdlib.h |
|
|
@comment SVID |
|
|
@deftypefun int putenv (char *@var{string}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} |
|
|
+@c putenv @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem |
|
|
+@c strchr dup ok |
|
|
+@c strndup dup @ascuheap @acsmem |
|
|
+@c add_to_environ dup @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c unsetenv dup @mtasuconst:@mtsenv @asulock @aculock |
|
|
The @code{putenv} function adds or removes definitions from the environment. |
|
|
If the @var{string} is of the form @samp{@var{name}=@var{value}}, the |
|
|
definition is added to the environment. Otherwise, the @var{string} is |
|
|
@@ -358,20 +374,37 @@ |
|
|
The difference to the @code{setenv} function is that the exact string |
|
|
given as the parameter @var{string} is put into the environment. If the |
|
|
user should change the string after the @code{putenv} call this will |
|
|
-reflect in automatically in the environment. This also requires that |
|
|
-@var{string} is no automatic variable which scope is left before the |
|
|
+reflect automatically in the environment. This also requires that |
|
|
+@var{string} not be an automatic variable whose scope is left before the |
|
|
variable is removed from the environment. The same applies of course to |
|
|
dynamically allocated variables which are freed later. |
|
|
|
|
|
-This function is part of the extended Unix interface. Since it was also |
|
|
-available in old SVID libraries you should define either |
|
|
-@var{_XOPEN_SOURCE} or @var{_SVID_SOURCE} before including any header. |
|
|
+This function is part of the extended Unix interface. You should define |
|
|
+@var{_XOPEN_SOURCE} before including any header. |
|
|
@end deftypefun |
|
|
|
|
|
|
|
|
@comment stdlib.h |
|
|
@comment BSD |
|
|
@deftypefun int setenv (const char *@var{name}, const char *@var{value}, int @var{replace}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} |
|
|
+@c setenv @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem |
|
|
+@c add_to_environ @mtasuconst:@mtsenv @ascuheap @asulock @acucorrupt @aculock @acsmem |
|
|
+@c strlen dup ok |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c strncmp dup ok |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock @aculock |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c mempcpy dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c KNOWN_VALUE ok |
|
|
+@c tfind(strcmp) [no @mtsrace guarded access] |
|
|
+@c strcmp dup ok |
|
|
+@c STORE_VALUE @ascuheap @acucorrupt @acsmem |
|
|
+@c tsearch(strcmp) @ascuheap @acucorrupt @acsmem [no @mtsrace or @asucorrupt guarded access makes for mtsafe and @asulock] |
|
|
+@c strcmp dup ok |
|
|
The @code{setenv} function can be used to add a new definition to the |
|
|
environment. The entry with the name @var{name} is replaced by the |
|
|
value @samp{@var{name}=@var{value}}. Please note that this is also true |
|
|
@@ -395,6 +428,13 @@ |
|
|
@comment stdlib.h |
|
|
@comment BSD |
|
|
@deftypefun int unsetenv (const char *@var{name}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c unsetenv @mtasuconst:@mtsenv @asulock @aculock |
|
|
+@c strchr dup ok |
|
|
+@c strlen dup ok |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c strncmp dup ok |
|
|
+@c libc_lock_unlock @aculock |
|
|
Using this function one can remove an entry completely from the |
|
|
environment. If the environment contains an entry with the key |
|
|
@var{name} this whole entry is removed. A call to this function is |
|
|
@@ -418,6 +458,11 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun int clearenv (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtsenv{}}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
+@c clearenv @mtasuconst:@mtsenv @ascuheap @asulock @aculock @acsmem |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock @aculock |
|
|
The @code{clearenv} function removes all entries from the environment. |
|
|
Using @code{putenv} and @code{setenv} new entries can be added again |
|
|
later. |
|
|
@@ -622,10 +667,13 @@ |
|
|
@subsection Definition of @code{getauxval} |
|
|
@comment sys/auxv.h |
|
|
@deftypefun {unsigned long int} getauxval (unsigned long int @var{type}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Reads from hwcap or iterates over constant auxv. |
|
|
This function is used to inquire about the entries in the auxiliary |
|
|
vector. The @var{type} argument should be one of the @samp{AT_} symbols |
|
|
defined in @file{elf.h}. If a matching entry is found, the value is |
|
|
-returned; if the entry is not found, zero is returned. |
|
|
+returned; if the entry is not found, zero is returned and @code{errno} is |
|
|
+set to @code{ENOENT}. |
|
|
@end deftypefun |
|
|
|
|
|
For some platforms, the key @code{AT_HWCAP} is the easiest way to inquire |
|
|
@@ -677,6 +725,7 @@ |
|
|
@comment unistd.h |
|
|
@comment ??? |
|
|
@deftypefun {long int} syscall (long int @var{sysno}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
@code{syscall} performs a generic system call. |
|
|
|
|
|
@@ -782,6 +831,10 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun void exit (int @var{status}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:exit}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}} |
|
|
+@c Access to the atexit/on_exit list, the libc_atexit hook and tls dtors |
|
|
+@c is not guarded. Streams must be flushed, and that triggers the usual |
|
|
+@c AS and AC issues with streams. |
|
|
The @code{exit} function tells the system that the program is done, which |
|
|
causes it to terminate the process. |
|
|
|
|
|
@@ -898,6 +951,15 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun int atexit (void (*@var{function}) (void)) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
+@c atexit @ascuheap @asulock @aculock @acsmem |
|
|
+@c cxa_atexit @ascuheap @asulock @aculock @acsmem |
|
|
+@c __internal_atexit @ascuheap @asulock @aculock @acsmem |
|
|
+@c __new_exitfn @ascuheap @asulock @aculock @acsmem |
|
|
+@c __libc_lock_lock @asulock @aculock |
|
|
+@c calloc dup @ascuheap @acsmem |
|
|
+@c __libc_lock_unlock @aculock |
|
|
+@c atomic_write_barrier dup ok |
|
|
The @code{atexit} function registers the function @var{function} to be |
|
|
called at normal program termination. The @var{function} is called with |
|
|
no arguments. |
|
|
@@ -909,6 +971,10 @@ |
|
|
@comment stdlib.h |
|
|
@comment SunOS |
|
|
@deftypefun int on_exit (void (*@var{function})(int @var{status}, void *@var{arg}), void *@var{arg}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
+@c on_exit @ascuheap @asulock @aculock @acsmem |
|
|
+@c new_exitfn dup @ascuheap @asulock @aculock @acsmem |
|
|
+@c atomic_write_barrier dup ok |
|
|
This function is a somewhat more powerful variant of @code{atexit}. It |
|
|
accepts two arguments, a function @var{function} and an arbitrary |
|
|
pointer @var{arg}. At normal program termination, the @var{function} is |
|
|
@@ -940,6 +1006,10 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun void abort (void) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
+@c The implementation takes a recursive lock and attempts to support |
|
|
+@c calls from signal handlers, but if we're in the middle of flushing or |
|
|
+@c using streams, we may encounter them in inconsistent states. |
|
|
The @code{abort} function causes abnormal program termination. This |
|
|
does not execute cleanup functions registered with @code{atexit} or |
|
|
@code{on_exit}. |
|
|
@@ -967,6 +1037,9 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun void _exit (int @var{status}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall (exit_group or exit); calls __task_terminate on hurd, |
|
|
+@c and abort in the generic posix implementation. |
|
|
The @code{_exit} function is the primitive for causing a process to |
|
|
terminate with status @var{status}. Calling this function does not |
|
|
execute cleanup functions registered with @code{atexit} or |
|
|
@@ -976,6 +1049,8 @@ |
|
|
@comment stdlib.h |
|
|
@comment ISO |
|
|
@deftypefun void _Exit (int @var{status}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Alias for _exit. |
|
|
The @code{_Exit} function is the @w{ISO C} equivalent to @code{_exit}. |
|
|
The @w{ISO C} committee members were not sure whether the definitions of |
|
|
@code{_exit} and @code{_Exit} were compatible so they have not used the |
|
|
diff -urN glibc-2.17-c758a686/manual/stdio.texi glibc-2.17-c758a686/manual/stdio.texi |
|
|
--- glibc-2.17-c758a686/manual/stdio.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/stdio.texi 2014-09-12 16:10:06.043792722 -0400 |
|
|
@@ -148,6 +148,8 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun {FILE *} fopen (const char *@var{filename}, const char *@var{opentype}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}} |
|
|
+@c fopen may leak the list lock if cancelled within _IO_link_in. |
|
|
The @code{fopen} function opens a stream for I/O to the file |
|
|
@var{filename}, and returns a pointer to the stream. |
|
|
|
|
|
@@ -265,9 +267,10 @@ |
|
|
@comment stdio.h |
|
|
@comment Unix98 |
|
|
@deftypefun {FILE *} fopen64 (const char *@var{filename}, const char *@var{opentype}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}} |
|
|
This function is similar to @code{fopen} but the stream it returns a |
|
|
pointer for is opened using @code{open64}. Therefore this stream can be |
|
|
-used even on files larger then @math{2^31} bytes on 32 bit machines. |
|
|
+used even on files larger than @math{2^31} bytes on 32 bit machines. |
|
|
|
|
|
Please note that the return type is still @code{FILE *}. There is no |
|
|
special @code{FILE} type for the LFS interface. |
|
|
@@ -294,6 +297,16 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun {FILE *} freopen (const char *@var{filename}, const char *@var{opentype}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @acsfd{}}} |
|
|
+@c Like most I/O operations, this one is guarded by a recursive lock, |
|
|
+@c released even upon cancellation, but cancellation may leak file |
|
|
+@c descriptors and leave the stream in an inconsistent state (e.g., |
|
|
+@c still bound to the closed descriptor). Also, if the stream is |
|
|
+@c part-way through a significant update (say running freopen) when a |
|
|
+@c signal handler calls freopen again on the same stream, the result is |
|
|
+@c likely to be an inconsistent stream, and the possibility of closing |
|
|
+@c twice file descriptor number that the stream used to use, the second |
|
|
+@c time when it might have already been reused by another thread. |
|
|
This function is like a combination of @code{fclose} and @code{fopen}. |
|
|
It first closes the stream referred to by @var{stream}, ignoring any |
|
|
errors that are detected in the process. (Because errors are ignored, |
|
|
@@ -320,6 +333,7 @@ |
|
|
@comment stdio.h |
|
|
@comment Unix98 |
|
|
@deftypefun {FILE *} freopen64 (const char *@var{filename}, const char *@var{opentype}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @acsfd{}}} |
|
|
This function is similar to @code{freopen}. The only difference is that |
|
|
on 32 bit machine the stream returned is able to read beyond the |
|
|
@math{2^31} bytes limits imposed by the normal interface. It should be |
|
|
@@ -341,6 +355,7 @@ |
|
|
@comment stdio_ext.h |
|
|
@comment GNU |
|
|
@deftypefun int __freadable (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{__freadable} function determines whether the stream |
|
|
@var{stream} was opened to allow reading. In this case the return value |
|
|
is nonzero. For write-only streams the function returns zero. |
|
|
@@ -351,6 +366,7 @@ |
|
|
@comment stdio_ext.h |
|
|
@comment GNU |
|
|
@deftypefun int __fwritable (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{__fwritable} function determines whether the stream |
|
|
@var{stream} was opened to allow writing. In this case the return value |
|
|
is nonzero. For read-only streams the function returns zero. |
|
|
@@ -364,6 +380,7 @@ |
|
|
@comment stdio_ext.h |
|
|
@comment GNU |
|
|
@deftypefun int __freading (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{__freading} function determines whether the stream |
|
|
@var{stream} was last read from or whether it is opened read-only. In |
|
|
this case the return value is nonzero, otherwise it is zero. |
|
|
@@ -377,6 +394,7 @@ |
|
|
@comment stdio_ext.h |
|
|
@comment GNU |
|
|
@deftypefun int __fwriting (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{__fwriting} function determines whether the stream |
|
|
@var{stream} was last written to or whether it is opened write-only. In |
|
|
this case the return value is nonzero, otherwise it is zero. |
|
|
@@ -396,6 +414,21 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int fclose (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c After fclose, it is undefined behavior to use the stream it points |
|
|
+@c to. Therefore, one must only call fclose when the stream is |
|
|
+@c otherwise unused. Concurrent uses started before will complete |
|
|
+@c successfully because of the lock, which makes it MT-Safe. Calling it |
|
|
+@c from a signal handler is perfectly safe if the stream is known to be |
|
|
+@c no longer used, which is a precondition for fclose to be safe in the |
|
|
+@c first place; since this is no further requirement, fclose is safe for |
|
|
+@c use in async signals too. After calling fclose, you can no longer |
|
|
+@c use the stream, not even to fclose it again, so its memory and file |
|
|
+@c descriptor may leak if fclose is canceled before @c releasing them. |
|
|
+@c That the stream must be unused and it becomes unused after the call |
|
|
+@c is what would enable fclose to be AS- and AC-Safe while freopen |
|
|
+@c isn't. However, because of the possibility of leaving __gconv_lock |
|
|
+@c taken upon cancellation, AC-Safety is lost. |
|
|
This function causes @var{stream} to be closed and the connection to |
|
|
the corresponding file to be broken. Any buffered output is written |
|
|
and any buffered input is discarded. The @code{fclose} function returns |
|
|
@@ -418,6 +451,12 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun int fcloseall (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:streams}}@asunsafe{}@acsafe{}} |
|
|
+@c Like fclose, using any previously-opened streams after fcloseall is |
|
|
+@c undefined. However, the implementation of fcloseall isn't equivalent |
|
|
+@c to calling fclose for all streams: it just flushes and unbuffers all |
|
|
+@c streams, without any locking. It's the flushing without locking that |
|
|
+@c makes it unsafe. |
|
|
This function causes all open streams of the process to be closed and |
|
|
the connection to corresponding files to be broken. All buffered data |
|
|
is written and any buffered input is discarded. The @code{fcloseall} |
|
|
@@ -474,6 +513,9 @@ |
|
|
@comment stdio.h |
|
|
@comment POSIX |
|
|
@deftypefun void flockfile (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}} |
|
|
+@c There's no way to tell whether the lock was acquired before or after |
|
|
+@c cancellation so as to unlock only when appropriate. |
|
|
The @code{flockfile} function acquires the internal locking object |
|
|
associated with the stream @var{stream}. This ensures that no other |
|
|
thread can explicitly through @code{flockfile}/@code{ftrylockfile} or |
|
|
@@ -485,6 +527,7 @@ |
|
|
@comment stdio.h |
|
|
@comment POSIX |
|
|
@deftypefun int ftrylockfile (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}} |
|
|
The @code{ftrylockfile} function tries to acquire the internal locking |
|
|
object associated with the stream @var{stream} just like |
|
|
@code{flockfile}. But unlike @code{flockfile} this function does not |
|
|
@@ -496,8 +539,9 @@ |
|
|
@comment stdio.h |
|
|
@comment POSIX |
|
|
@deftypefun void funlockfile (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}} |
|
|
The @code{funlockfile} function releases the internal locking object of |
|
|
-the stream @var{stream}. The stream must have been locked before by a |
|
|
+the stream @var{stream}. The stream must have been locked before by a |
|
|
call to @code{flockfile} or a successful call of @code{ftrylockfile}. |
|
|
The implicit locking performed by the stream operations do not count. |
|
|
The @code{funlockfile} function does not return an error status and the |
|
|
@@ -621,6 +665,15 @@ |
|
|
@comment stdio_ext.h |
|
|
@comment GNU |
|
|
@deftypefun int __fsetlocking (FILE *@var{stream}, int @var{type}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asulock{}}@acsafe{}} |
|
|
+@c Changing the implicit-locking status of a stream while it's in use by |
|
|
+@c another thread may cause a lock to be implicitly acquired and not |
|
|
+@c released, or vice-versa. This function should probably hold the lock |
|
|
+@c while changing this setting, to make sure we don't change it while |
|
|
+@c there are any concurrent uses. Meanwhile, callers should acquire the |
|
|
+@c lock themselves to be safe, and even concurrent uses with external |
|
|
+@c locking will be fine, as long as functions that require external |
|
|
+@c locking are not called without holding locks. |
|
|
|
|
|
The @code{__fsetlocking} function can be used to select whether the |
|
|
stream operations will implicitly acquire the locking object of the |
|
|
@@ -725,6 +778,10 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun int fwide (FILE *@var{stream}, int @var{mode}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{}}} |
|
|
+@c Querying is always safe, but changing the stream when it's in use |
|
|
+@c upthread may be problematic. Like most lock-acquiring functions, |
|
|
+@c this one may leak the lock if canceled. |
|
|
|
|
|
The @code{fwide} function can be used to set and query the state of the |
|
|
orientation of the stream @var{stream}. If the @var{mode} parameter has |
|
|
@@ -811,6 +868,16 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int fputc (int @var{c}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}} |
|
|
+@c If the stream is in use when interrupted by a signal, the recursive |
|
|
+@c lock won't help ensure the stream is consistent; indeed, if fputc |
|
|
+@c gets a signal precisely before the post-incremented _IO_write_ptr |
|
|
+@c value is stored, we may overwrite the interrupted write. Conversely, |
|
|
+@c depending on compiler optimizations, the incremented _IO_write_ptr |
|
|
+@c may be stored before the character is stored in the buffer, |
|
|
+@c corrupting the stream if async cancel hits between the two stores. |
|
|
+@c There may be other reasons for AS- and AC-unsafety in the overflow |
|
|
+@c cases. |
|
|
The @code{fputc} function converts the character @var{c} to type |
|
|
@code{unsigned char}, and writes it to the stream @var{stream}. |
|
|
@code{EOF} is returned if a write error occurs; otherwise the |
|
|
@@ -820,6 +887,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun wint_t fputwc (wchar_t @var{wc}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}} |
|
|
The @code{fputwc} function writes the wide character @var{wc} to the |
|
|
stream @var{stream}. @code{WEOF} is returned if a write error occurs; |
|
|
otherwise the character @var{wc} is returned. |
|
|
@@ -828,13 +896,18 @@ |
|
|
@comment stdio.h |
|
|
@comment POSIX |
|
|
@deftypefun int fputc_unlocked (int @var{c}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
+@c The unlocked functions can't possibly satisfy the MT-Safety |
|
|
+@c requirements on their own, because they require external locking for |
|
|
+@c safety. |
|
|
The @code{fputc_unlocked} function is equivalent to the @code{fputc} |
|
|
function except that it does not implicitly lock the stream. |
|
|
@end deftypefun |
|
|
|
|
|
@comment wchar.h |
|
|
@comment POSIX |
|
|
-@deftypefun wint_t fputwc_unlocked (wint_t @var{wc}, FILE *@var{stream}) |
|
|
+@deftypefun wint_t fputwc_unlocked (wchar_t @var{wc}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{fputwc_unlocked} function is equivalent to the @code{fputwc} |
|
|
function except that it does not implicitly lock the stream. |
|
|
|
|
|
@@ -844,6 +917,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int putc (int @var{c}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}} |
|
|
This is just like @code{fputc}, except that most systems implement it as |
|
|
a macro, making it faster. One consequence is that it may evaluate the |
|
|
@var{stream} argument more than once, which is an exception to the |
|
|
@@ -854,6 +928,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun wint_t putwc (wchar_t @var{wc}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}} |
|
|
This is just like @code{fputwc}, except that it can be implement as |
|
|
a macro, making it faster. One consequence is that it may evaluate the |
|
|
@var{stream} argument more than once, which is an exception to the |
|
|
@@ -864,6 +939,7 @@ |
|
|
@comment stdio.h |
|
|
@comment POSIX |
|
|
@deftypefun int putc_unlocked (int @var{c}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{putc_unlocked} function is equivalent to the @code{putc} |
|
|
function except that it does not implicitly lock the stream. |
|
|
@end deftypefun |
|
|
@@ -871,6 +947,7 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun wint_t putwc_unlocked (wchar_t @var{wc}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{putwc_unlocked} function is equivalent to the @code{putwc} |
|
|
function except that it does not implicitly lock the stream. |
|
|
|
|
|
@@ -880,6 +957,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int putchar (int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}} |
|
|
The @code{putchar} function is equivalent to @code{putc} with |
|
|
@code{stdout} as the value of the @var{stream} argument. |
|
|
@end deftypefun |
|
|
@@ -887,6 +965,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun wint_t putwchar (wchar_t @var{wc}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}} |
|
|
The @code{putwchar} function is equivalent to @code{putwc} with |
|
|
@code{stdout} as the value of the @var{stream} argument. |
|
|
@end deftypefun |
|
|
@@ -894,6 +973,7 @@ |
|
|
@comment stdio.h |
|
|
@comment POSIX |
|
|
@deftypefun int putchar_unlocked (int @var{c}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:stdout}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{putchar_unlocked} function is equivalent to the @code{putchar} |
|
|
function except that it does not implicitly lock the stream. |
|
|
@end deftypefun |
|
|
@@ -901,6 +981,7 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun wint_t putwchar_unlocked (wchar_t @var{wc}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:stdout}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{putwchar_unlocked} function is equivalent to the @code{putwchar} |
|
|
function except that it does not implicitly lock the stream. |
|
|
|
|
|
@@ -910,6 +991,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int fputs (const char *@var{s}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}} |
|
|
The function @code{fputs} writes the string @var{s} to the stream |
|
|
@var{stream}. The terminating null character is not written. |
|
|
This function does @emph{not} add a newline character, either. |
|
|
@@ -933,6 +1015,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun int fputws (const wchar_t *@var{ws}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}} |
|
|
The function @code{fputws} writes the wide character string @var{ws} to |
|
|
the stream @var{stream}. The terminating null character is not written. |
|
|
This function does @emph{not} add a newline character, either. It |
|
|
@@ -945,6 +1028,7 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun int fputs_unlocked (const char *@var{s}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{fputs_unlocked} function is equivalent to the @code{fputs} |
|
|
function except that it does not implicitly lock the stream. |
|
|
|
|
|
@@ -954,6 +1038,7 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun int fputws_unlocked (const wchar_t *@var{ws}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{fputws_unlocked} function is equivalent to the @code{fputws} |
|
|
function except that it does not implicitly lock the stream. |
|
|
|
|
|
@@ -963,6 +1048,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int puts (const char *@var{s}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
The @code{puts} function writes the string @var{s} to the stream |
|
|
@code{stdout} followed by a newline. The terminating null character of |
|
|
the string is not written. (Note that @code{fputs} does @emph{not} |
|
|
@@ -982,6 +1068,7 @@ |
|
|
@comment stdio.h |
|
|
@comment SVID |
|
|
@deftypefun int putw (int @var{w}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This function writes the word @var{w} (that is, an @code{int}) to |
|
|
@var{stream}. It is provided for compatibility with SVID, but we |
|
|
recommend you use @code{fwrite} instead (@pxref{Block Input/Output}). |
|
|
@@ -1014,6 +1101,11 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int fgetc (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
+@c Same caveats as fputc, but instead of losing a write in case of async |
|
|
+@c signals, we may read the same character more than once, and the |
|
|
+@c stream may be left in odd states due to cancellation in the underflow |
|
|
+@c cases. |
|
|
This function reads the next character as an @code{unsigned char} from |
|
|
the stream @var{stream} and returns its value, converted to an |
|
|
@code{int}. If an end-of-file condition or read error occurs, |
|
|
@@ -1023,6 +1115,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun wint_t fgetwc (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This function reads the next wide character from the stream @var{stream} |
|
|
and returns its value. If an end-of-file condition or read error |
|
|
occurs, @code{WEOF} is returned instead. |
|
|
@@ -1031,6 +1124,7 @@ |
|
|
@comment stdio.h |
|
|
@comment POSIX |
|
|
@deftypefun int fgetc_unlocked (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{fgetc_unlocked} function is equivalent to the @code{fgetc} |
|
|
function except that it does not implicitly lock the stream. |
|
|
@end deftypefun |
|
|
@@ -1038,6 +1132,7 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun wint_t fgetwc_unlocked (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{fgetwc_unlocked} function is equivalent to the @code{fgetwc} |
|
|
function except that it does not implicitly lock the stream. |
|
|
|
|
|
@@ -1047,6 +1142,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int getc (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This is just like @code{fgetc}, except that it is permissible (and |
|
|
typical) for it to be implemented as a macro that evaluates the |
|
|
@var{stream} argument more than once. @code{getc} is often highly |
|
|
@@ -1057,6 +1153,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun wint_t getwc (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This is just like @code{fgetwc}, except that it is permissible for it to |
|
|
be implemented as a macro that evaluates the @var{stream} argument more |
|
|
than once. @code{getwc} can be highly optimized, so it is usually the |
|
|
@@ -1066,6 +1163,7 @@ |
|
|
@comment stdio.h |
|
|
@comment POSIX |
|
|
@deftypefun int getc_unlocked (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{getc_unlocked} function is equivalent to the @code{getc} |
|
|
function except that it does not implicitly lock the stream. |
|
|
@end deftypefun |
|
|
@@ -1073,6 +1171,7 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun wint_t getwc_unlocked (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{getwc_unlocked} function is equivalent to the @code{getwc} |
|
|
function except that it does not implicitly lock the stream. |
|
|
|
|
|
@@ -1082,6 +1181,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int getchar (void) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
The @code{getchar} function is equivalent to @code{getc} with @code{stdin} |
|
|
as the value of the @var{stream} argument. |
|
|
@end deftypefun |
|
|
@@ -1089,6 +1189,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun wint_t getwchar (void) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
The @code{getwchar} function is equivalent to @code{getwc} with @code{stdin} |
|
|
as the value of the @var{stream} argument. |
|
|
@end deftypefun |
|
|
@@ -1096,6 +1197,7 @@ |
|
|
@comment stdio.h |
|
|
@comment POSIX |
|
|
@deftypefun int getchar_unlocked (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:stdin}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{getchar_unlocked} function is equivalent to the @code{getchar} |
|
|
function except that it does not implicitly lock the stream. |
|
|
@end deftypefun |
|
|
@@ -1103,6 +1205,7 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun wint_t getwchar_unlocked (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:stdin}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{getwchar_unlocked} function is equivalent to the @code{getwchar} |
|
|
function except that it does not implicitly lock the stream. |
|
|
|
|
|
@@ -1145,6 +1248,7 @@ |
|
|
@comment stdio.h |
|
|
@comment SVID |
|
|
@deftypefun int getw (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This function reads a word (that is, an @code{int}) from @var{stream}. |
|
|
It's provided for compatibility with SVID. We recommend you use |
|
|
@code{fread} instead (@pxref{Block Input/Output}). Unlike @code{getc}, |
|
|
@@ -1173,6 +1277,12 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun ssize_t getline (char **@var{lineptr}, size_t *@var{n}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{}}} |
|
|
+@c Besides the usual possibility of getting an inconsistent stream in a |
|
|
+@c signal handler or leaving it inconsistent in case of cancellation, |
|
|
+@c the possibility of leaving a dangling pointer upon cancellation |
|
|
+@c between reallocing the buffer at *lineptr and updating the pointer |
|
|
+@c brings about another case of @acucorrupt. |
|
|
This function reads an entire line from @var{stream}, storing the text |
|
|
(including the newline and a terminating null character) in a buffer |
|
|
and storing the buffer address in @code{*@var{lineptr}}. |
|
|
@@ -1188,7 +1298,8 @@ |
|
|
|
|
|
If you set @code{*@var{lineptr}} to a null pointer, and @code{*@var{n}} |
|
|
to zero, before the call, then @code{getline} allocates the initial |
|
|
-buffer for you by calling @code{malloc}. |
|
|
+buffer for you by calling @code{malloc}. This buffer remains allocated |
|
|
+even if @code{getline} encounters errors and is unable to read any bytes. |
|
|
|
|
|
In either case, when @code{getline} returns, @code{*@var{lineptr}} is |
|
|
a @code{char *} which points to the text of the line. |
|
|
@@ -1208,6 +1319,8 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun ssize_t getdelim (char **@var{lineptr}, size_t *@var{n}, int @var{delimiter}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{}}} |
|
|
+@c See the getline @acucorrupt note. |
|
|
This function is like @code{getline} except that the character which |
|
|
tells it to stop reading is not necessarily newline. The argument |
|
|
@var{delimiter} specifies the delimiter character; @code{getdelim} keeps |
|
|
@@ -1232,6 +1345,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun {char *} fgets (char *@var{s}, int @var{count}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
The @code{fgets} function reads characters from the stream @var{stream} |
|
|
up to and including a newline character and stores them in the string |
|
|
@var{s}, adding a null character to mark the end of the string. You |
|
|
@@ -1255,6 +1369,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun {wchar_t *} fgetws (wchar_t *@var{ws}, int @var{count}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
The @code{fgetws} function reads wide characters from the stream |
|
|
@var{stream} up to and including a newline character and stores them in |
|
|
the string @var{ws}, adding a null wide character to mark the end of the |
|
|
@@ -1280,6 +1395,7 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} fgets_unlocked (char *@var{s}, int @var{count}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{fgets_unlocked} function is equivalent to the @code{fgets} |
|
|
function except that it does not implicitly lock the stream. |
|
|
|
|
|
@@ -1289,6 +1405,7 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun {wchar_t *} fgetws_unlocked (wchar_t *@var{ws}, int @var{count}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{fgetws_unlocked} function is equivalent to the @code{fgetws} |
|
|
function except that it does not implicitly lock the stream. |
|
|
|
|
|
@@ -1298,6 +1415,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefn {Deprecated function} {char *} gets (char *@var{s}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
The function @code{gets} reads characters from the stream @code{stdin} |
|
|
up to the next newline character, and stores them in the string @var{s}. |
|
|
The newline character is discarded (note that this differs from the |
|
|
@@ -1388,6 +1506,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int ungetc (int @var{c}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
The @code{ungetc} function pushes back the character @var{c} onto the |
|
|
input stream @var{stream}. So the next input from @var{stream} will |
|
|
read @var{c} before anything else. |
|
|
@@ -1425,6 +1544,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun wint_t ungetwc (wint_t @var{wc}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
The @code{ungetwc} function behaves just like @code{ungetc} just that it |
|
|
pushes back a wide character. |
|
|
@end deftypefun |
|
|
@@ -1483,6 +1603,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun size_t fread (void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This function reads up to @var{count} objects of size @var{size} into |
|
|
the array @var{data}, from the stream @var{stream}. It returns the |
|
|
number of objects actually read, which might be less than @var{count} if |
|
|
@@ -1498,6 +1619,7 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun size_t fread_unlocked (void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{fread_unlocked} function is equivalent to the @code{fread} |
|
|
function except that it does not implicitly lock the stream. |
|
|
|
|
|
@@ -1507,6 +1629,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun size_t fwrite (const void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This function writes up to @var{count} objects of size @var{size} from |
|
|
the array @var{data}, to the stream @var{stream}. The return value is |
|
|
normally @var{count}, if the call succeeds. Any other value indicates |
|
|
@@ -1516,6 +1639,7 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun size_t fwrite_unlocked (const void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{fwrite_unlocked} function is equivalent to the @code{fwrite} |
|
|
function except that it does not implicitly lock the stream. |
|
|
|
|
|
@@ -1670,7 +1794,7 @@ |
|
|
|
|
|
@defvr Macro NL_ARGMAX |
|
|
The value of @code{NL_ARGMAX} is the maximum value allowed for the |
|
|
-specification of an positional parameter in a @code{printf} call. The |
|
|
+specification of a positional parameter in a @code{printf} call. The |
|
|
actual value in effect at runtime can be retrieved by using |
|
|
@code{sysconf} using the @code{_SC_NL_ARGMAX} parameter @pxref{Sysconf |
|
|
Definition}. |
|
|
@@ -2257,6 +2381,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int printf (const char *@var{template}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
The @code{printf} function prints the optional arguments under the |
|
|
control of the template string @var{template} to the stream |
|
|
@code{stdout}. It returns the number of characters printed, or a |
|
|
@@ -2266,6 +2391,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun int wprintf (const wchar_t *@var{template}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
The @code{wprintf} function prints the optional arguments under the |
|
|
control of the wide template string @var{template} to the stream |
|
|
@code{stdout}. It returns the number of wide characters printed, or a |
|
|
@@ -2275,6 +2401,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int fprintf (FILE *@var{stream}, const char *@var{template}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
This function is just like @code{printf}, except that the output is |
|
|
written to the stream @var{stream} instead of @code{stdout}. |
|
|
@end deftypefun |
|
|
@@ -2282,6 +2409,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun int fwprintf (FILE *@var{stream}, const wchar_t *@var{template}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
This function is just like @code{wprintf}, except that the output is |
|
|
written to the stream @var{stream} instead of @code{stdout}. |
|
|
@end deftypefun |
|
|
@@ -2289,6 +2417,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int sprintf (char *@var{s}, const char *@var{template}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This is like @code{printf}, except that the output is stored in the character |
|
|
array @var{s} instead of written to a stream. A null character is written |
|
|
to mark the end of the string. |
|
|
@@ -2313,6 +2442,7 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun int swprintf (wchar_t *@var{s}, size_t @var{size}, const wchar_t *@var{template}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This is like @code{wprintf}, except that the output is stored in the |
|
|
wide character array @var{ws} instead of written to a stream. A null |
|
|
wide character is written to mark the end of the string. The @var{size} |
|
|
@@ -2330,13 +2460,14 @@ |
|
|
parameters. @code{swprintf} in fact corresponds to the @code{snprintf} |
|
|
function. Since the @code{sprintf} function can be dangerous and should |
|
|
be avoided the @w{ISO C} committee refused to make the same mistake |
|
|
-again and decided to not define an function exactly corresponding to |
|
|
+again and decided to not define a function exactly corresponding to |
|
|
@code{sprintf}. |
|
|
@end deftypefun |
|
|
|
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun int snprintf (char *@var{s}, size_t @var{size}, const char *@var{template}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
The @code{snprintf} function is similar to @code{sprintf}, except that |
|
|
the @var{size} argument specifies the maximum number of characters to |
|
|
produce. The trailing null character is counted towards this limit, so |
|
|
@@ -2407,6 +2538,7 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun int asprintf (char **@var{ptr}, const char *@var{template}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This function is similar to @code{sprintf}, except that it dynamically |
|
|
allocates a string (as with @code{malloc}; @pxref{Unconstrained |
|
|
Allocation}) to hold the output, instead of putting the output in a |
|
|
@@ -2416,7 +2548,7 @@ |
|
|
location. |
|
|
|
|
|
The return value is the number of characters allocated for the buffer, or |
|
|
-less than zero if an error occurred. Usually this means that the buffer |
|
|
+less than zero if an error occurred. Usually this means that the buffer |
|
|
could not be allocated. |
|
|
|
|
|
Here is how to use @code{asprintf} to get the same result as the |
|
|
@@ -2439,6 +2571,7 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun int obstack_printf (struct obstack *@var{obstack}, const char *@var{template}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
This function is similar to @code{asprintf}, except that it uses the |
|
|
obstack @var{obstack} to allocate the space. @xref{Obstacks}. |
|
|
|
|
|
@@ -2509,6 +2642,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int vprintf (const char *@var{template}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
This function is similar to @code{printf} except that, instead of taking |
|
|
a variable number of arguments directly, it takes an argument list |
|
|
pointer @var{ap}. |
|
|
@@ -2517,6 +2651,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun int vwprintf (const wchar_t *@var{template}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
This function is similar to @code{wprintf} except that, instead of taking |
|
|
a variable number of arguments directly, it takes an argument list |
|
|
pointer @var{ap}. |
|
|
@@ -2525,6 +2660,48 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int vfprintf (FILE *@var{stream}, const char *@var{template}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
+@c Although vfprintf sets up a cleanup region to release the lock on the |
|
|
+@c output stream, it doesn't use it to release args_value or string in |
|
|
+@c case of cancellation. This doesn't make it unsafe, but cancelling it |
|
|
+@c may leak memory. The unguarded use of __printf_function_table is |
|
|
+@c also of concern for all callers. |
|
|
+@c _itoa ok |
|
|
+@c _udiv_qrnnd_preinv ok |
|
|
+@c group_number ok |
|
|
+@c _i18n_number_rewrite |
|
|
+@c __wctrans ok |
|
|
+@c __towctrans @mtslocale |
|
|
+@c __wcrtomb ok? dup below |
|
|
+@c outdigit_value ok |
|
|
+@c outdigitwc_value ok |
|
|
+@c outchar ok |
|
|
+@c outstring ok |
|
|
+@c PAD ok |
|
|
+@c __printf_fp @mtslocale @ascuheap @acsmem |
|
|
+@c __printf_fphex @mtslocale |
|
|
+@c __readonly_area |
|
|
+@c [GNU/Linux] fopen, strtoul, free |
|
|
+@c __strerror_r ok if no translation, check otherwise |
|
|
+@c __btowc ? gconv-modules |
|
|
+@c __wcrtomb ok (not using internal state) gconv-modules |
|
|
+@c ARGCHECK |
|
|
+@c UNBUFFERED_P (tested before taking the stream lock) |
|
|
+@c buffered_vfprintf ok |
|
|
+@c __find_spec(wc|mb) |
|
|
+@c read_int |
|
|
+@c __libc_use_alloca |
|
|
+@c process_arg |
|
|
+@c process_string_arg |
|
|
+@c extend_alloca |
|
|
+@c __parse_one_spec(wc|mb) |
|
|
+@c *__printf_arginfo_table unguarded |
|
|
+@c __printf_va_arg_table-> unguarded |
|
|
+@c *__printf_function_table unguarded |
|
|
+@c done_add |
|
|
+@c printf_unknown |
|
|
+@c outchar |
|
|
+@c _itoa_word |
|
|
This is the equivalent of @code{fprintf} with the variable argument list |
|
|
specified directly as for @code{vprintf}. |
|
|
@end deftypefun |
|
|
@@ -2532,6 +2709,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun int vfwprintf (FILE *@var{stream}, const wchar_t *@var{template}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
This is the equivalent of @code{fwprintf} with the variable argument list |
|
|
specified directly as for @code{vwprintf}. |
|
|
@end deftypefun |
|
|
@@ -2539,6 +2717,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int vsprintf (char *@var{s}, const char *@var{template}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This is the equivalent of @code{sprintf} with the variable argument list |
|
|
specified directly as for @code{vprintf}. |
|
|
@end deftypefun |
|
|
@@ -2546,6 +2725,7 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun int vswprintf (wchar_t *@var{s}, size_t @var{size}, const wchar_t *@var{template}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This is the equivalent of @code{swprintf} with the variable argument list |
|
|
specified directly as for @code{vwprintf}. |
|
|
@end deftypefun |
|
|
@@ -2553,6 +2733,7 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun int vsnprintf (char *@var{s}, size_t @var{size}, const char *@var{template}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This is the equivalent of @code{snprintf} with the variable argument list |
|
|
specified directly as for @code{vprintf}. |
|
|
@end deftypefun |
|
|
@@ -2560,6 +2741,7 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun int vasprintf (char **@var{ptr}, const char *@var{template}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
The @code{vasprintf} function is the equivalent of @code{asprintf} with the |
|
|
variable argument list specified directly as for @code{vprintf}. |
|
|
@end deftypefun |
|
|
@@ -2567,6 +2749,10 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun int obstack_vprintf (struct obstack *@var{obstack}, const char *@var{template}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:obstack} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c The obstack is not guarded by mutexes, it might be at an inconsistent |
|
|
+@c state within a signal handler, and it could be left at an |
|
|
+@c inconsistent state in case of cancellation. |
|
|
The @code{obstack_vprintf} function is the equivalent of |
|
|
@code{obstack_printf} with the variable argument list specified directly |
|
|
as for @code{vprintf}.@refill |
|
|
@@ -2639,6 +2825,7 @@ |
|
|
@comment printf.h |
|
|
@comment GNU |
|
|
@deftypefun size_t parse_printf_format (const char *@var{template}, size_t @var{n}, int *@var{argtypes}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
This function returns information about the number and types of |
|
|
arguments expected by the @code{printf} template string @var{template}. |
|
|
The information is stored in the array @var{argtypes}; each element of |
|
|
@@ -2879,6 +3066,12 @@ |
|
|
@comment printf.h |
|
|
@comment GNU |
|
|
@deftypefun int register_printf_function (int @var{spec}, printf_function @var{handler-function}, printf_arginfo_function @var{arginfo-function}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasuconst{:printfext}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}} |
|
|
+@c This function is guarded by the global non-recursive libc lock, but |
|
|
+@c users of the variables it sets aren't, and those should be MT-Safe, |
|
|
+@c so we're ruling out the use of this extension with threads. Calling |
|
|
+@c it from a signal handler may self-deadlock, and cancellation may |
|
|
+@c leave the lock held, besides leaking allocated memory. |
|
|
This function defines the conversion specifier character @var{spec}. |
|
|
Thus, if @var{spec} is @code{'Y'}, it defines the conversion @samp{%Y}. |
|
|
You can redefine the built-in conversions like @samp{%s}, but flag |
|
|
@@ -3125,6 +3318,12 @@ |
|
|
@comment printf.h |
|
|
@comment GNU |
|
|
@deftypefun int printf_size (FILE *@var{fp}, const struct printf_info *@var{info}, const void *const *@var{args}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:fp} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @acucorrupt{}}} |
|
|
+@c This is meant to be called by vfprintf, that should hold the lock on |
|
|
+@c the stream, but if this function is called directly, output will be |
|
|
+@c racy, besides the uses of the global locale object while other |
|
|
+@c threads may be changing it and the possbility of leaving the stream |
|
|
+@c object in an inconsistent state in case of cancellation. |
|
|
Print a given floating point number as for the format @code{%f} except |
|
|
that there is a postfix character indicating the divisor for the |
|
|
number to make this less than 1000. There are two possible divisors: |
|
|
@@ -3183,6 +3382,7 @@ |
|
|
@comment printf.h |
|
|
@comment GNU |
|
|
@deftypefun int printf_size_info (const struct printf_info *@var{info}, size_t @var{n}, int *@var{argtypes}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function will return in @var{argtypes} the information about the |
|
|
used parameters in the way the @code{vfprintf} implementation expects |
|
|
it. The format always takes one argument. |
|
|
@@ -3672,7 +3872,7 @@ |
|
|
To read in characters that belong to an arbitrary set of your choice, |
|
|
use the @samp{%[} conversion. You specify the set between the @samp{[} |
|
|
character and a following @samp{]} character, using the same syntax used |
|
|
-in regular expressions. As special cases: |
|
|
+in regular expressions for explicit sets of characters. As special cases: |
|
|
|
|
|
@itemize @bullet |
|
|
@item |
|
|
@@ -3692,6 +3892,10 @@ |
|
|
The @samp{%[} conversion does not skip over initial whitespace |
|
|
characters. |
|
|
|
|
|
+Note that the @dfn{character class} syntax available in character sets |
|
|
+that appear inside regular expressions (such as @samp{[:alpha:]}) is |
|
|
+@emph{not} available in the @samp{%[} conversion. |
|
|
+ |
|
|
Here are some examples of @samp{%[} conversions and what they mean: |
|
|
|
|
|
@table @samp |
|
|
@@ -3799,6 +4003,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int scanf (const char *@var{template}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
The @code{scanf} function reads formatted input from the stream |
|
|
@code{stdin} under the control of the template string @var{template}. |
|
|
The optional arguments are pointers to the places which receive the |
|
|
@@ -3813,6 +4018,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun int wscanf (const wchar_t *@var{template}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
The @code{wscanf} function reads formatted input from the stream |
|
|
@code{stdin} under the control of the template string @var{template}. |
|
|
The optional arguments are pointers to the places which receive the |
|
|
@@ -3827,6 +4033,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int fscanf (FILE *@var{stream}, const char *@var{template}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
This function is just like @code{scanf}, except that the input is read |
|
|
from the stream @var{stream} instead of @code{stdin}. |
|
|
@end deftypefun |
|
|
@@ -3834,6 +4041,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun int fwscanf (FILE *@var{stream}, const wchar_t *@var{template}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
This function is just like @code{wscanf}, except that the input is read |
|
|
from the stream @var{stream} instead of @code{stdin}. |
|
|
@end deftypefun |
|
|
@@ -3841,6 +4049,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int sscanf (const char *@var{s}, const char *@var{template}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This is like @code{scanf}, except that the characters are taken from the |
|
|
null-terminated string @var{s} instead of from a stream. Reaching the |
|
|
end of the string is treated as an end-of-file condition. |
|
|
@@ -3853,7 +4062,8 @@ |
|
|
|
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
-@deftypefun int swscanf (const wchar_t *@var{ws}, const char *@var{template}, @dots{}) |
|
|
+@deftypefun int swscanf (const wchar_t *@var{ws}, const wchar_t *@var{template}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This is like @code{wscanf}, except that the characters are taken from the |
|
|
null-terminated string @var{ws} instead of from a stream. Reaching the |
|
|
end of the string is treated as an end-of-file condition. |
|
|
@@ -3880,6 +4090,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int vscanf (const char *@var{template}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
This function is similar to @code{scanf}, but instead of taking |
|
|
a variable number of arguments directly, it takes an argument list |
|
|
pointer @var{ap} of type @code{va_list} (@pxref{Variadic Functions}). |
|
|
@@ -3888,6 +4099,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun int vwscanf (const wchar_t *@var{template}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
This function is similar to @code{wscanf}, but instead of taking |
|
|
a variable number of arguments directly, it takes an argument list |
|
|
pointer @var{ap} of type @code{va_list} (@pxref{Variadic Functions}). |
|
|
@@ -3896,6 +4108,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int vfscanf (FILE *@var{stream}, const char *@var{template}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
This is the equivalent of @code{fscanf} with the variable argument list |
|
|
specified directly as for @code{vscanf}. |
|
|
@end deftypefun |
|
|
@@ -3903,6 +4116,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun int vfwscanf (FILE *@var{stream}, const wchar_t *@var{template}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}} |
|
|
This is the equivalent of @code{fwscanf} with the variable argument list |
|
|
specified directly as for @code{vwscanf}. |
|
|
@end deftypefun |
|
|
@@ -3910,6 +4124,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int vsscanf (const char *@var{s}, const char *@var{template}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This is the equivalent of @code{sscanf} with the variable argument list |
|
|
specified directly as for @code{vscanf}. |
|
|
@end deftypefun |
|
|
@@ -3917,6 +4132,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun int vswscanf (const wchar_t *@var{s}, const wchar_t *@var{template}, va_list @var{ap}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This is the equivalent of @code{swscanf} with the variable argument list |
|
|
specified directly as for @code{vwscanf}. |
|
|
@end deftypefun |
|
|
@@ -3966,6 +4182,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int feof (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}} |
|
|
The @code{feof} function returns nonzero if and only if the end-of-file |
|
|
indicator for the stream @var{stream} is set. |
|
|
|
|
|
@@ -3975,6 +4192,9 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun int feof_unlocked (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c There isn't much of a thread unsafety risk in reading a flag word and |
|
|
+@c testing a bit in it. |
|
|
The @code{feof_unlocked} function is equivalent to the @code{feof} |
|
|
function except that it does not implicitly lock the stream. |
|
|
|
|
|
@@ -3986,6 +4206,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int ferror (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}} |
|
|
The @code{ferror} function returns nonzero if and only if the error |
|
|
indicator for the stream @var{stream} is set, indicating that an error |
|
|
has occurred on a previous operation on the stream. |
|
|
@@ -3996,6 +4217,7 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun int ferror_unlocked (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{ferror_unlocked} function is equivalent to the @code{ferror} |
|
|
function except that it does not implicitly lock the stream. |
|
|
|
|
|
@@ -4023,6 +4245,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun void clearerr (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}} |
|
|
This function clears the end-of-file and error indicators for the |
|
|
stream @var{stream}. |
|
|
|
|
|
@@ -4033,6 +4256,7 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun void clearerr_unlocked (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@assafe{}@acsafe{}} |
|
|
The @code{clearerr_unlocked} function is equivalent to the @code{clearerr} |
|
|
function except that it does not implicitly lock the stream. |
|
|
|
|
|
@@ -4146,6 +4370,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun {long int} ftell (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This function returns the current file position of the stream |
|
|
@var{stream}. |
|
|
|
|
|
@@ -4158,6 +4383,7 @@ |
|
|
@comment stdio.h |
|
|
@comment Unix98 |
|
|
@deftypefun off_t ftello (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
The @code{ftello} function is similar to @code{ftell}, except that it |
|
|
returns a value of type @code{off_t}. Systems which support this type |
|
|
use it to describe all file positions, unlike the POSIX specification |
|
|
@@ -4181,6 +4407,7 @@ |
|
|
@comment stdio.h |
|
|
@comment Unix98 |
|
|
@deftypefun off64_t ftello64 (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This function is similar to @code{ftello} with the only difference that |
|
|
the return value is of type @code{off64_t}. This also requires that the |
|
|
stream @var{stream} was opened using either @code{fopen64}, |
|
|
@@ -4196,6 +4423,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int fseek (FILE *@var{stream}, long int @var{offset}, int @var{whence}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
The @code{fseek} function is used to change the file position of the |
|
|
stream @var{stream}. The value of @var{whence} must be one of the |
|
|
constants @code{SEEK_SET}, @code{SEEK_CUR}, or @code{SEEK_END}, to |
|
|
@@ -4215,6 +4443,7 @@ |
|
|
@comment stdio.h |
|
|
@comment Unix98 |
|
|
@deftypefun int fseeko (FILE *@var{stream}, off_t @var{offset}, int @var{whence}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This function is similar to @code{fseek} but it corrects a problem with |
|
|
@code{fseek} in a system with POSIX types. Using a value of type |
|
|
@code{long int} for the offset is not compatible with POSIX. |
|
|
@@ -4238,6 +4467,7 @@ |
|
|
@comment stdio.h |
|
|
@comment Unix98 |
|
|
@deftypefun int fseeko64 (FILE *@var{stream}, off64_t @var{offset}, int @var{whence}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This function is similar to @code{fseeko} with the only difference that |
|
|
the @var{offset} parameter is of type @code{off64_t}. This also |
|
|
requires that the stream @var{stream} was opened using either |
|
|
@@ -4286,6 +4516,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun void rewind (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
The @code{rewind} function positions the stream @var{stream} at the |
|
|
beginning of the file. It is equivalent to calling @code{fseek} or |
|
|
@code{fseeko} on the @var{stream} with an @var{offset} argument of |
|
|
@@ -4407,6 +4638,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int fgetpos (FILE *@var{stream}, fpos_t *@var{position}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This function stores the value of the file position indicator for the |
|
|
stream @var{stream} in the @code{fpos_t} object pointed to by |
|
|
@var{position}. If successful, @code{fgetpos} returns zero; otherwise |
|
|
@@ -4421,6 +4653,7 @@ |
|
|
@comment stdio.h |
|
|
@comment Unix98 |
|
|
@deftypefun int fgetpos64 (FILE *@var{stream}, fpos64_t *@var{position}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This function is similar to @code{fgetpos} but the file position is |
|
|
returned in a variable of type @code{fpos64_t} to which @var{position} |
|
|
points. |
|
|
@@ -4433,6 +4666,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int fsetpos (FILE *@var{stream}, const fpos_t *@var{position}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This function sets the file position indicator for the stream @var{stream} |
|
|
to the position @var{position}, which must have been set by a previous |
|
|
call to @code{fgetpos} on the same stream. If successful, @code{fsetpos} |
|
|
@@ -4449,6 +4683,7 @@ |
|
|
@comment stdio.h |
|
|
@comment Unix98 |
|
|
@deftypefun int fsetpos64 (FILE *@var{stream}, const fpos64_t *@var{position}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This function is similar to @code{fsetpos} but the file position used |
|
|
for positioning is provided in a variable of type @code{fpos64_t} to |
|
|
which @var{position} points. |
|
|
@@ -4560,6 +4795,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int fflush (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This function causes any buffered output on @var{stream} to be delivered |
|
|
to the file. If @var{stream} is a null pointer, then |
|
|
@code{fflush} causes buffered output on @emph{all} open output streams |
|
|
@@ -4572,6 +4808,7 @@ |
|
|
@comment stdio.h |
|
|
@comment POSIX |
|
|
@deftypefun int fflush_unlocked (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{fflush_unlocked} function is equivalent to the @code{fflush} |
|
|
function except that it does not implicitly lock the stream. |
|
|
@end deftypefun |
|
|
@@ -4588,6 +4825,7 @@ |
|
|
@comment stdio_ext.h |
|
|
@comment GNU |
|
|
@deftypefun void _flushlbf (void) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
The @code{_flushlbf} function flushes all line buffered streams |
|
|
currently opened. |
|
|
|
|
|
@@ -4609,6 +4847,7 @@ |
|
|
@comment stdio_ext.h |
|
|
@comment GNU |
|
|
@deftypefun void __fpurge (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
The @code{__fpurge} function causes the buffer of the stream |
|
|
@var{stream} to be emptied. If the stream is currently in read mode all |
|
|
input in the buffer is lost. If the stream is in output mode the |
|
|
@@ -4633,6 +4872,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun int setvbuf (FILE *@var{stream}, char *@var{buf}, int @var{mode}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This function is used to specify that the stream @var{stream} should |
|
|
have the buffering mode @var{mode}, which can be either @code{_IOFBF} |
|
|
(for full buffering), @code{_IOLBF} (for line buffering), or |
|
|
@@ -4710,6 +4950,7 @@ |
|
|
@comment stdio.h |
|
|
@comment ISO |
|
|
@deftypefun void setbuf (FILE *@var{stream}, char *@var{buf}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
If @var{buf} is a null pointer, the effect of this function is |
|
|
equivalent to calling @code{setvbuf} with a @var{mode} argument of |
|
|
@code{_IONBF}. Otherwise, it is equivalent to calling @code{setvbuf} |
|
|
@@ -4723,6 +4964,7 @@ |
|
|
@comment stdio.h |
|
|
@comment BSD |
|
|
@deftypefun void setbuffer (FILE *@var{stream}, char *@var{buf}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
If @var{buf} is a null pointer, this function makes @var{stream} unbuffered. |
|
|
Otherwise, it makes @var{stream} fully buffered using @var{buf} as the |
|
|
buffer. The @var{size} argument specifies the length of @var{buf}. |
|
|
@@ -4734,6 +4976,7 @@ |
|
|
@comment stdio.h |
|
|
@comment BSD |
|
|
@deftypefun void setlinebuf (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
This function makes @var{stream} be line buffered, and allocates the |
|
|
buffer for you. |
|
|
|
|
|
@@ -4748,6 +4991,7 @@ |
|
|
@comment stdio_ext.h |
|
|
@comment GNU |
|
|
@deftypefun int __flbf (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{__flbf} function will return a nonzero value in case the |
|
|
stream @var{stream} is line buffered. Otherwise the return value is |
|
|
zero. |
|
|
@@ -4761,6 +5005,7 @@ |
|
|
@comment stdio_ext.h |
|
|
@comment GNU |
|
|
@deftypefun size_t __fbufsize (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acsafe{}} |
|
|
The @code{__fbufsize} function return the size of the buffer in the |
|
|
stream @var{stream}. This value can be used to optimize the use of the |
|
|
stream. |
|
|
@@ -4771,6 +5016,7 @@ |
|
|
@comment stdio_ext.h |
|
|
@comment GNU |
|
|
@deftypefun size_t __fpending (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acsafe{}} |
|
|
The @code{__fpending} |
|
|
function returns the number of bytes currently in the output buffer. |
|
|
For wide-oriented stream the measuring unit is wide characters. This |
|
|
@@ -4818,6 +5064,10 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun {FILE *} fmemopen (void *@var{buf}, size_t @var{size}, const char *@var{opentype}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}} |
|
|
+@c Unlike open_memstream, fmemopen does (indirectly) call _IO_link_in, |
|
|
+@c bringing with it additional potential for async trouble with |
|
|
+@c list_all_lock. |
|
|
This function opens a stream that allows the access specified by the |
|
|
@var{opentype} argument, that reads from or writes to the buffer specified |
|
|
by the argument @var{buf}. This array must be at least @var{size} bytes long. |
|
|
@@ -4870,6 +5120,7 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun {FILE *} open_memstream (char **@var{ptr}, size_t *@var{sizeloc}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This function opens a stream for writing to a buffer. The buffer is |
|
|
allocated dynamically and grown as necessary, using @code{malloc}. |
|
|
After you've closed the stream, this buffer is your responsibility to |
|
|
@@ -4985,6 +5236,7 @@ |
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
@deftypefun {FILE *} fopencookie (void *@var{cookie}, const char *@var{opentype}, cookie_io_functions_t @var{io-functions}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}} |
|
|
This function actually creates the stream for communicating with the |
|
|
@var{cookie} using the functions in the @var{io-functions} argument. |
|
|
The @var{opentype} argument is interpreted as for @code{fopen}; |
|
|
@@ -5053,26 +5305,26 @@ |
|
|
|
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
-@deftp {Data Type} cookie_read_function |
|
|
+@deftp {Data Type} cookie_read_function_t |
|
|
This is the data type that the read function for a custom stream should have. |
|
|
If you declare the function as shown above, this is the type it will have. |
|
|
@end deftp |
|
|
|
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
-@deftp {Data Type} cookie_write_function |
|
|
+@deftp {Data Type} cookie_write_function_t |
|
|
The data type of the write function for a custom stream. |
|
|
@end deftp |
|
|
|
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
-@deftp {Data Type} cookie_seek_function |
|
|
+@deftp {Data Type} cookie_seek_function_t |
|
|
The data type of the seek function for a custom stream. |
|
|
@end deftp |
|
|
|
|
|
@comment stdio.h |
|
|
@comment GNU |
|
|
-@deftp {Data Type} cookie_close_function |
|
|
+@deftp {Data Type} cookie_close_function_t |
|
|
The data type of the close function for a custom stream. |
|
|
@end deftp |
|
|
|
|
|
@@ -5166,6 +5418,7 @@ |
|
|
@comment fmtmsg.h |
|
|
@comment XPG |
|
|
@deftypefun int fmtmsg (long int @var{classification}, const char *@var{label}, int @var{severity}, const char *@var{text}, const char *@var{action}, const char *@var{tag}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acsafe{}} |
|
|
Display a message described by its parameters on the device(s) specified |
|
|
in the @var{classification} parameter. The @var{label} parameter |
|
|
identifies the source of the message. The string should consist of two |
|
|
@@ -5306,6 +5559,7 @@ |
|
|
but this is toilsome. |
|
|
|
|
|
@deftypefun int addseverity (int @var{severity}, const char *@var{string}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
This function allows the introduction of new severity classes which can be |
|
|
addressed by the @var{severity} parameter of the @code{fmtmsg} function. |
|
|
The @var{severity} parameter of @code{addseverity} must match the value |
|
|
diff -urN glibc-2.17-c758a686/manual/string.texi glibc-2.17-c758a686/manual/string.texi |
|
|
--- glibc-2.17-c758a686/manual/string.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/string.texi 2014-09-12 16:10:06.045792717 -0400 |
|
|
@@ -200,7 +200,7 @@ |
|
|
@cindex parameter promotion |
|
|
Some of the memory and string functions take single characters as |
|
|
arguments. Since a value of type @code{char} is automatically promoted |
|
|
-into an value of type @code{int} when used as a parameter, the functions |
|
|
+into a value of type @code{int} when used as a parameter, the functions |
|
|
are declared with @code{int} as the type of the parameter in question. |
|
|
In case of the wide character function the situation is similarly: the |
|
|
parameter type for a single wide character is @code{wint_t} and not |
|
|
@@ -219,6 +219,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun size_t strlen (const char *@var{s}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{strlen} function returns the length of the null-terminated |
|
|
string @var{s} in bytes. (In other words, it returns the offset of the |
|
|
terminating null character within the array.) |
|
|
@@ -285,6 +286,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun size_t wcslen (const wchar_t *@var{ws}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{wcslen} function is the wide character equivalent to |
|
|
@code{strlen}. The return value is the number of wide characters in the |
|
|
wide character string pointed to by @var{ws} (this is also the offset of |
|
|
@@ -300,6 +302,7 @@ |
|
|
@comment string.h |
|
|
@comment GNU |
|
|
@deftypefun size_t strnlen (const char *@var{s}, size_t @var{maxlen}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{strnlen} function returns the length of the string @var{s} in |
|
|
bytes if this length is smaller than @var{maxlen} bytes. Otherwise it |
|
|
returns @var{maxlen}. Therefore this function is equivalent to |
|
|
@@ -322,6 +325,7 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun size_t wcsnlen (const wchar_t *@var{ws}, size_t @var{maxlen}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{wcsnlen} is the wide character equivalent to @code{strnlen}. The |
|
|
@var{maxlen} parameter specifies the maximum number of wide characters. |
|
|
|
|
|
@@ -367,6 +371,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun {void *} memcpy (void *restrict @var{to}, const void *restrict @var{from}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{memcpy} function copies @var{size} bytes from the object |
|
|
beginning at @var{from} into the object beginning at @var{to}. The |
|
|
behavior of this function is undefined if the two arrays @var{to} and |
|
|
@@ -388,6 +393,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun {wchar_t *} wmemcpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{wmemcpy} function copies @var{size} wide characters from the object |
|
|
beginning at @var{wfrom} into the object beginning at @var{wto}. The |
|
|
behavior of this function is undefined if the two arrays @var{wto} and |
|
|
@@ -413,6 +419,7 @@ |
|
|
@comment string.h |
|
|
@comment GNU |
|
|
@deftypefun {void *} mempcpy (void *restrict @var{to}, const void *restrict @var{from}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{mempcpy} function is nearly identical to the @code{memcpy} |
|
|
function. It copies @var{size} bytes from the object beginning at |
|
|
@code{from} into the object pointed to by @var{to}. But instead of |
|
|
@@ -440,6 +447,7 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun {wchar_t *} wmempcpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{wmempcpy} function is nearly identical to the @code{wmemcpy} |
|
|
function. It copies @var{size} wide characters from the object |
|
|
beginning at @code{wfrom} into the object pointed to by @var{wto}. But |
|
|
@@ -468,6 +476,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun {void *} memmove (void *@var{to}, const void *@var{from}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{memmove} copies the @var{size} bytes at @var{from} into the |
|
|
@var{size} bytes at @var{to}, even if those two blocks of space |
|
|
overlap. In the case of overlap, @code{memmove} is careful to copy the |
|
|
@@ -479,7 +488,8 @@ |
|
|
|
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
-@deftypefun {wchar_t *} wmemmove (wchar *@var{wto}, const wchar_t *@var{wfrom}, size_t @var{size}) |
|
|
+@deftypefun {wchar_t *} wmemmove (wchar_t *@var{wto}, const wchar_t *@var{wfrom}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{wmemmove} copies the @var{size} wide characters at @var{wfrom} |
|
|
into the @var{size} wide characters at @var{wto}, even if those two |
|
|
blocks of space overlap. In the case of overlap, @code{memmove} is |
|
|
@@ -507,6 +517,7 @@ |
|
|
@comment string.h |
|
|
@comment SVID |
|
|
@deftypefun {void *} memccpy (void *restrict @var{to}, const void *restrict @var{from}, int @var{c}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function copies no more than @var{size} bytes from @var{from} to |
|
|
@var{to}, stopping if a byte matching @var{c} is found. The return |
|
|
value is a pointer into @var{to} one byte past where @var{c} was copied, |
|
|
@@ -517,6 +528,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun {void *} memset (void *@var{block}, int @var{c}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function copies the value of @var{c} (converted to an |
|
|
@code{unsigned char}) into each of the first @var{size} bytes of the |
|
|
object beginning at @var{block}. It returns the value of @var{block}. |
|
|
@@ -525,6 +537,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun {wchar_t *} wmemset (wchar_t *@var{block}, wchar_t @var{wc}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function copies the value of @var{wc} into each of the first |
|
|
@var{size} wide characters of the object beginning at @var{block}. It |
|
|
returns the value of @var{block}. |
|
|
@@ -533,6 +546,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun {char *} strcpy (char *restrict @var{to}, const char *restrict @var{from}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This copies characters from the string @var{from} (up to and including |
|
|
the terminating null character) into the string @var{to}. Like |
|
|
@code{memcpy}, this function has undefined results if the strings |
|
|
@@ -542,6 +556,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun {wchar_t *} wcscpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This copies wide characters from the string @var{wfrom} (up to and |
|
|
including the terminating null wide character) into the string |
|
|
@var{wto}. Like @code{wmemcpy}, this function has undefined results if |
|
|
@@ -551,6 +566,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun {char *} strncpy (char *restrict @var{to}, const char *restrict @var{from}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is similar to @code{strcpy} but always copies exactly |
|
|
@var{size} characters into @var{to}. |
|
|
|
|
|
@@ -576,6 +592,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun {wchar_t *} wcsncpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is similar to @code{wcscpy} but always copies exactly |
|
|
@var{size} wide characters into @var{wto}. |
|
|
|
|
|
@@ -602,6 +619,7 @@ |
|
|
@comment string.h |
|
|
@comment SVID |
|
|
@deftypefun {char *} strdup (const char *@var{s}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This function copies the null-terminated string @var{s} into a newly |
|
|
allocated string. The string is allocated using @code{malloc}; see |
|
|
@ref{Unconstrained Allocation}. If @code{malloc} cannot allocate space |
|
|
@@ -612,6 +630,7 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun {wchar_t *} wcsdup (const wchar_t *@var{ws}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This function copies the null-terminated wide character string @var{ws} |
|
|
into a newly allocated string. The string is allocated using |
|
|
@code{malloc}; see @ref{Unconstrained Allocation}. If @code{malloc} |
|
|
@@ -625,6 +644,7 @@ |
|
|
@comment string.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} strndup (const char *@var{s}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
This function is similar to @code{strdup} but always copies at most |
|
|
@var{size} characters into the newly allocated string. |
|
|
|
|
|
@@ -642,6 +662,7 @@ |
|
|
@comment string.h |
|
|
@comment Unknown origin |
|
|
@deftypefun {char *} stpcpy (char *restrict @var{to}, const char *restrict @var{from}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is like @code{strcpy}, except that it returns a pointer to |
|
|
the end of the string @var{to} (that is, the address of the terminating |
|
|
null character @code{to + strlen (from)}) rather than the beginning. |
|
|
@@ -664,6 +685,7 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun {wchar_t *} wcpcpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is like @code{wcscpy}, except that it returns a pointer to |
|
|
the end of the string @var{wto} (that is, the address of the terminating |
|
|
null character @code{wto + strlen (wfrom)}) rather than the beginning. |
|
|
@@ -679,10 +701,11 @@ |
|
|
@comment string.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} stpncpy (char *restrict @var{to}, const char *restrict @var{from}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is similar to @code{stpcpy} but copies always exactly |
|
|
@var{size} characters into @var{to}. |
|
|
|
|
|
-If the length of @var{from} is more then @var{size}, then @code{stpncpy} |
|
|
+If the length of @var{from} is more than @var{size}, then @code{stpncpy} |
|
|
copies just the first @var{size} characters and returns a pointer to the |
|
|
character directly following the one which was copied last. Note that in |
|
|
this case there is no null terminator written into @var{to}. |
|
|
@@ -704,10 +727,11 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun {wchar_t *} wcpncpy (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is similar to @code{wcpcpy} but copies always exactly |
|
|
@var{wsize} characters into @var{wto}. |
|
|
|
|
|
-If the length of @var{wfrom} is more then @var{size}, then |
|
|
+If the length of @var{wfrom} is more than @var{size}, then |
|
|
@code{wcpncpy} copies just the first @var{size} wide characters and |
|
|
returns a pointer to the wide character directly following the last |
|
|
non-null wide character which was copied last. Note that in this case |
|
|
@@ -731,6 +755,7 @@ |
|
|
@comment string.h |
|
|
@comment GNU |
|
|
@deftypefn {Macro} {char *} strdupa (const char *@var{s}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This macro is similar to @code{strdup} but allocates the new string |
|
|
using @code{alloca} instead of @code{malloc} (@pxref{Variable Size |
|
|
Automatic}). This means of course the returned string has the same |
|
|
@@ -757,6 +782,7 @@ |
|
|
@comment string.h |
|
|
@comment GNU |
|
|
@deftypefn {Macro} {char *} strndupa (const char *@var{s}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is similar to @code{strndup} but like @code{strdupa} it |
|
|
allocates the new string using @code{alloca} |
|
|
@pxref{Variable Size Automatic}. The same advantages and limitations |
|
|
@@ -772,6 +798,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun {char *} strcat (char *restrict @var{to}, const char *restrict @var{from}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{strcat} function is similar to @code{strcpy}, except that the |
|
|
characters from @var{from} are concatenated or appended to the end of |
|
|
@var{to}, instead of overwriting it. That is, the first character from |
|
|
@@ -794,6 +821,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun {wchar_t *} wcscat (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{wcscat} function is similar to @code{wcscpy}, except that the |
|
|
characters from @var{wfrom} are concatenated or appended to the end of |
|
|
@var{wto}, instead of overwriting it. That is, the first character from |
|
|
@@ -942,6 +970,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun {char *} strncat (char *restrict @var{to}, const char *restrict @var{from}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is like @code{strcat} except that not more than @var{size} |
|
|
characters from @var{from} are appended to the end of @var{to}. A |
|
|
single null character is also always appended to @var{to}, so the total |
|
|
@@ -955,8 +984,8 @@ |
|
|
char * |
|
|
strncat (char *to, const char *from, size_t size) |
|
|
@{ |
|
|
- to[strlen (to) + size] = '\0'; |
|
|
- strncpy (to + strlen (to), from, size); |
|
|
+ memcpy (to + strlen (to), from, strnlen (from, size)); |
|
|
+ to[strlen (to) + strnlen (from, size)] = '\0'; |
|
|
return to; |
|
|
@} |
|
|
@end group |
|
|
@@ -968,6 +997,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun {wchar_t *} wcsncat (wchar_t *restrict @var{wto}, const wchar_t *restrict @var{wfrom}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is like @code{wcscat} except that not more than @var{size} |
|
|
characters from @var{from} are appended to the end of @var{to}. A |
|
|
single null character is also always appended to @var{to}, so the total |
|
|
@@ -982,8 +1012,8 @@ |
|
|
wcsncat (wchar_t *restrict wto, const wchar_t *restrict wfrom, |
|
|
size_t size) |
|
|
@{ |
|
|
- wto[wcslen (to) + size] = L'\0'; |
|
|
- wcsncpy (wto + wcslen (wto), wfrom, size); |
|
|
+ memcpy (wto + wcslen (wto), wfrom, wcsnlen (wfrom, size) * sizeof (wchar_t)); |
|
|
+ wto[wcslen (to) + wcsnlen (wfrom, size)] = '\0'; |
|
|
return wto; |
|
|
@} |
|
|
@end group |
|
|
@@ -1012,6 +1042,7 @@ |
|
|
@comment string.h |
|
|
@comment BSD |
|
|
@deftypefun void bcopy (const void *@var{from}, void *@var{to}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This is a partially obsolete alternative for @code{memmove}, derived from |
|
|
BSD. Note that it is not quite equivalent to @code{memmove}, because the |
|
|
arguments are not in the same order and there is no return value. |
|
|
@@ -1020,6 +1051,7 @@ |
|
|
@comment string.h |
|
|
@comment BSD |
|
|
@deftypefun void bzero (void *@var{block}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This is a partially obsolete alternative for @code{memset}, derived from |
|
|
BSD. Note that it is not as general as @code{memset}, because the only |
|
|
value it can store is zero. |
|
|
@@ -1055,6 +1087,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun int memcmp (const void *@var{a1}, const void *@var{a2}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The function @code{memcmp} compares the @var{size} bytes of memory |
|
|
beginning at @var{a1} against the @var{size} bytes of memory beginning |
|
|
at @var{a2}. The value returned has the same sign as the difference |
|
|
@@ -1065,9 +1098,10 @@ |
|
|
@code{0}. |
|
|
@end deftypefun |
|
|
|
|
|
-@comment wcjar.h |
|
|
+@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun int wmemcmp (const wchar_t *@var{a1}, const wchar_t *@var{a2}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The function @code{wmemcmp} compares the @var{size} wide characters |
|
|
beginning at @var{a1} against the @var{size} wide characters beginning |
|
|
at @var{a2}. The value returned is smaller than or larger than zero |
|
|
@@ -1120,6 +1154,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun int strcmp (const char *@var{s1}, const char *@var{s2}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{strcmp} function compares the string @var{s1} against |
|
|
@var{s2}, returning a value that has the same sign as the difference |
|
|
between the first differing pair of characters (interpreted as |
|
|
@@ -1139,6 +1174,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun int wcscmp (const wchar_t *@var{ws1}, const wchar_t *@var{ws2}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
The @code{wcscmp} function compares the wide character string @var{ws1} |
|
|
against @var{ws2}. The value returned is smaller than or larger than zero |
|
|
@@ -1159,6 +1195,11 @@ |
|
|
@comment string.h |
|
|
@comment BSD |
|
|
@deftypefun int strcasecmp (const char *@var{s1}, const char *@var{s2}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c Although this calls tolower multiple times, it's a macro, and |
|
|
+@c strcasecmp is optimized so that the locale pointer is read only once. |
|
|
+@c There are some asm implementations too, for which the single-read |
|
|
+@c from locale TLS pointers also applies. |
|
|
This function is like @code{strcmp}, except that differences in case are |
|
|
ignored. How uppercase and lowercase characters are related is |
|
|
determined by the currently selected locale. In the standard @code{"C"} |
|
|
@@ -1171,7 +1212,10 @@ |
|
|
|
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
-@deftypefun int wcscasecmp (const wchar_t *@var{ws1}, const wchar_T *@var{ws2}) |
|
|
+@deftypefun int wcscasecmp (const wchar_t *@var{ws1}, const wchar_t *@var{ws2}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c Since towlower is not a macro, the locale object may be read multiple |
|
|
+@c times. |
|
|
This function is like @code{wcscmp}, except that differences in case are |
|
|
ignored. How uppercase and lowercase characters are related is |
|
|
determined by the currently selected locale. In the standard @code{"C"} |
|
|
@@ -1185,6 +1229,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun int strncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is the similar to @code{strcmp}, except that no more than |
|
|
@var{size} characters are compared. In other words, if the two |
|
|
strings are the same in their first @var{size} characters, the |
|
|
@@ -1194,6 +1239,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun int wcsncmp (const wchar_t *@var{ws1}, const wchar_t *@var{ws2}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function is the similar to @code{wcscmp}, except that no more than |
|
|
@var{size} wide characters are compared. In other words, if the two |
|
|
strings are the same in their first @var{size} wide characters, the |
|
|
@@ -1203,6 +1249,7 @@ |
|
|
@comment string.h |
|
|
@comment BSD |
|
|
@deftypefun int strncasecmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
This function is like @code{strncmp}, except that differences in case |
|
|
are ignored. Like @code{strcasecmp}, it is locale dependent how |
|
|
uppercase and lowercase characters are related. |
|
|
@@ -1214,6 +1261,7 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun int wcsncasecmp (const wchar_t *@var{ws1}, const wchar_t *@var{s2}, size_t @var{n}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
This function is like @code{wcsncmp}, except that differences in case |
|
|
are ignored. Like @code{wcscasecmp}, it is locale dependent how |
|
|
uppercase and lowercase characters are related. |
|
|
@@ -1247,6 +1295,8 @@ |
|
|
@comment string.h |
|
|
@comment GNU |
|
|
@deftypefun int strverscmp (const char *@var{s1}, const char *@var{s2}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c Calls isdigit multiple times, locale may change in between. |
|
|
The @code{strverscmp} function compares the string @var{s1} against |
|
|
@var{s2}, considering them as holding indices/version numbers. The |
|
|
return value follows the same conventions as found in the |
|
|
@@ -1258,7 +1308,7 @@ |
|
|
mode, where each sequence of digits is taken as a whole. If we reach the |
|
|
end of these two parts without noticing a difference, we return to the |
|
|
standard comparison mode. There are two types of numeric parts: |
|
|
-"integral" and "fractional" (those begin with a '0'). The types |
|
|
+"integral" and "fractional" (those begin with a '0'). The types |
|
|
of the numeric parts affect the way we sort them: |
|
|
|
|
|
@itemize @bullet |
|
|
@@ -1297,6 +1347,7 @@ |
|
|
@comment string.h |
|
|
@comment BSD |
|
|
@deftypefun int bcmp (const void *@var{a1}, const void *@var{a2}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This is an obsolete alias for @code{memcmp}, derived from BSD. |
|
|
@end deftypefun |
|
|
|
|
|
@@ -1343,6 +1394,9 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun int strcoll (const char *@var{s1}, const char *@var{s2}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c Calls strcoll_l with the current locale, which dereferences only the |
|
|
+@c LC_COLLATE data pointer. |
|
|
The @code{strcoll} function is similar to @code{strcmp} but uses the |
|
|
collating sequence of the current locale for collation (the |
|
|
@code{LC_COLLATE} locale). |
|
|
@@ -1351,6 +1405,8 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun int wcscoll (const wchar_t *@var{ws1}, const wchar_t *@var{ws2}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c Same as strcoll, but calling wcscoll_l. |
|
|
The @code{wcscoll} function is similar to @code{wcscmp} but uses the |
|
|
collating sequence of the current locale for collation (the |
|
|
@code{LC_COLLATE} locale). |
|
|
@@ -1370,7 +1426,7 @@ |
|
|
compare_elements (const void *v1, const void *v2) |
|
|
@{ |
|
|
char * const *p1 = v1; |
|
|
- char * const *p1 = v2; |
|
|
+ char * const *p2 = v2; |
|
|
|
|
|
return strcoll (*p1, *p2); |
|
|
@} |
|
|
@@ -1391,6 +1447,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun size_t strxfrm (char *restrict @var{to}, const char *restrict @var{from}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
The function @code{strxfrm} transforms the string @var{from} using the |
|
|
collation transformation determined by the locale currently selected for |
|
|
collation, and stores the transformed string in the array @var{to}. Up |
|
|
@@ -1420,6 +1477,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun size_t wcsxfrm (wchar_t *restrict @var{wto}, const wchar_t *@var{wfrom}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
The function @code{wcsxfrm} transforms wide character string @var{wfrom} |
|
|
using the collation transformation determined by the locale currently |
|
|
selected for collation, and stores the transformed string in the array |
|
|
@@ -1514,8 +1572,8 @@ |
|
|
@} |
|
|
|
|
|
/* @r{Sort @code{temp_array} by comparing transformed strings.} */ |
|
|
- qsort (temp_array, sizeof (struct sorter), |
|
|
- nstrings, compare_elements); |
|
|
+ qsort (temp_array, nstrings, |
|
|
+ sizeof (struct sorter), compare_elements); |
|
|
|
|
|
/* @r{Put the elements back in the permanent array} |
|
|
@r{in their sorted order.} */ |
|
|
@@ -1579,6 +1637,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun {void *} memchr (const void *@var{block}, int @var{c}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function finds the first occurrence of the byte @var{c} (converted |
|
|
to an @code{unsigned char}) in the initial @var{size} bytes of the |
|
|
object beginning at @var{block}. The return value is a pointer to the |
|
|
@@ -1588,6 +1647,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun {wchar_t *} wmemchr (const wchar_t *@var{block}, wchar_t @var{wc}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function finds the first occurrence of the wide character @var{wc} |
|
|
in the initial @var{size} wide characters of the object beginning at |
|
|
@var{block}. The return value is a pointer to the located wide |
|
|
@@ -1597,6 +1657,7 @@ |
|
|
@comment string.h |
|
|
@comment GNU |
|
|
@deftypefun {void *} rawmemchr (const void *@var{block}, int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Often the @code{memchr} function is used with the knowledge that the |
|
|
byte @var{c} is available in the memory block specified by the |
|
|
parameters. But this means that the @var{size} parameter is not really |
|
|
@@ -1627,6 +1688,7 @@ |
|
|
@comment string.h |
|
|
@comment GNU |
|
|
@deftypefun {void *} memrchr (const void *@var{block}, int @var{c}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The function @code{memrchr} is like @code{memchr}, except that it searches |
|
|
backwards from the end of the block defined by @var{block} and @var{size} |
|
|
(instead of forwards from the front). |
|
|
@@ -1637,6 +1699,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun {char *} strchr (const char *@var{string}, int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{strchr} function finds the first occurrence of the character |
|
|
@var{c} (converted to a @code{char}) in the null-terminated string |
|
|
beginning at @var{string}. The return value is a pointer to the located |
|
|
@@ -1663,6 +1726,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun {wchar_t *} wcschr (const wchar_t *@var{wstring}, int @var{wc}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{wcschr} function finds the first occurrence of the wide |
|
|
character @var{wc} in the null-terminated wide character string |
|
|
beginning at @var{wstring}. The return value is a pointer to the |
|
|
@@ -1678,6 +1742,7 @@ |
|
|
@comment string.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} strchrnul (const char *@var{string}, int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{strchrnul} is the same as @code{strchr} except that if it does |
|
|
not find the character, it returns a pointer to string's terminating |
|
|
null character rather than a null pointer. |
|
|
@@ -1688,6 +1753,7 @@ |
|
|
@comment wchar.h |
|
|
@comment GNU |
|
|
@deftypefun {wchar_t *} wcschrnul (const wchar_t *@var{wstring}, wchar_t @var{wc}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{wcschrnul} is the same as @code{wcschr} except that if it does not |
|
|
find the wide character, it returns a pointer to wide character string's |
|
|
terminating null wide character rather than a null pointer. |
|
|
@@ -1723,6 +1789,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun {char *} strrchr (const char *@var{string}, int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The function @code{strrchr} is like @code{strchr}, except that it searches |
|
|
backwards from the end of the string @var{string} (instead of forwards |
|
|
from the front). |
|
|
@@ -1737,6 +1804,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun {wchar_t *} wcsrchr (const wchar_t *@var{wstring}, wchar_t @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The function @code{wcsrchr} is like @code{wcschr}, except that it searches |
|
|
backwards from the end of the string @var{wstring} (instead of forwards |
|
|
from the front). |
|
|
@@ -1745,6 +1813,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun {char *} strstr (const char *@var{haystack}, const char *@var{needle}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This is like @code{strchr}, except that it searches @var{haystack} for a |
|
|
substring @var{needle} rather than just a single character. It |
|
|
returns a pointer into the string @var{haystack} that is the first |
|
|
@@ -1763,6 +1832,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun {wchar_t *} wcsstr (const wchar_t *@var{haystack}, const wchar_t *@var{needle}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This is like @code{wcschr}, except that it searches @var{haystack} for a |
|
|
substring @var{needle} rather than just a single wide character. It |
|
|
returns a pointer into the string @var{haystack} that is the first wide |
|
|
@@ -1773,7 +1843,8 @@ |
|
|
@comment wchar.h |
|
|
@comment XPG |
|
|
@deftypefun {wchar_t *} wcswcs (const wchar_t *@var{haystack}, const wchar_t *@var{needle}) |
|
|
-@code{wcswcs} is an deprecated alias for @code{wcsstr}. This is the |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@code{wcswcs} is a deprecated alias for @code{wcsstr}. This is the |
|
|
name originally used in the X/Open Portability Guide before the |
|
|
@w{Amendment 1} to @w{ISO C90} was published. |
|
|
@end deftypefun |
|
|
@@ -1782,6 +1853,9 @@ |
|
|
@comment string.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} strcasestr (const char *@var{haystack}, const char *@var{needle}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c There may be multiple calls of strncasecmp, each accessing the locale |
|
|
+@c object independently. |
|
|
This is like @code{strstr}, except that it ignores case in searching for |
|
|
the substring. Like @code{strcasecmp}, it is locale dependent how |
|
|
uppercase and lowercase characters are related. |
|
|
@@ -1800,6 +1874,7 @@ |
|
|
@comment string.h |
|
|
@comment GNU |
|
|
@deftypefun {void *} memmem (const void *@var{haystack}, size_t @var{haystack-len},@*const void *@var{needle}, size_t @var{needle-len}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This is like @code{strstr}, but @var{needle} and @var{haystack} are byte |
|
|
arrays rather than null-terminated strings. @var{needle-len} is the |
|
|
length of @var{needle} and @var{haystack-len} is the length of |
|
|
@@ -1811,6 +1886,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun size_t strspn (const char *@var{string}, const char *@var{skipset}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{strspn} (``string span'') function returns the length of the |
|
|
initial substring of @var{string} that consists entirely of characters that |
|
|
are members of the set specified by the string @var{skipset}. The order |
|
|
@@ -1831,6 +1907,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun size_t wcsspn (const wchar_t *@var{wstring}, const wchar_t *@var{skipset}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{wcsspn} (``wide character string span'') function returns the |
|
|
length of the initial substring of @var{wstring} that consists entirely |
|
|
of wide characters that are members of the set specified by the string |
|
|
@@ -1841,6 +1918,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun size_t strcspn (const char *@var{string}, const char *@var{stopset}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{strcspn} (``string complement span'') function returns the length |
|
|
of the initial substring of @var{string} that consists entirely of characters |
|
|
that are @emph{not} members of the set specified by the string @var{stopset}. |
|
|
@@ -1862,6 +1940,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun size_t wcscspn (const wchar_t *@var{wstring}, const wchar_t *@var{stopset}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{wcscspn} (``wide character string complement span'') function |
|
|
returns the length of the initial substring of @var{wstring} that |
|
|
consists entirely of wide characters that are @emph{not} members of the |
|
|
@@ -1873,6 +1952,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun {char *} strpbrk (const char *@var{string}, const char *@var{stopset}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{strpbrk} (``string pointer break'') function is related to |
|
|
@code{strcspn}, except that it returns a pointer to the first character |
|
|
in @var{string} that is a member of the set @var{stopset} instead of the |
|
|
@@ -1897,6 +1977,7 @@ |
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
@deftypefun {wchar_t *} wcspbrk (const wchar_t *@var{wstring}, const wchar_t *@var{stopset}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{wcspbrk} (``wide character string pointer break'') function is |
|
|
related to @code{wcscspn}, except that it returns a pointer to the first |
|
|
wide character in @var{wstring} that is a member of the set |
|
|
@@ -1910,6 +1991,7 @@ |
|
|
@comment string.h |
|
|
@comment BSD |
|
|
@deftypefun {char *} index (const char *@var{string}, int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{index} is another name for @code{strchr}; they are exactly the same. |
|
|
New code should always use @code{strchr} since this name is defined in |
|
|
@w{ISO C} while @code{index} is a BSD invention which never was available |
|
|
@@ -1919,6 +2001,7 @@ |
|
|
@comment string.h |
|
|
@comment BSD |
|
|
@deftypefun {char *} rindex (const char *@var{string}, int @var{c}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{rindex} is another name for @code{strrchr}; they are exactly the same. |
|
|
New code should always use @code{strrchr} since this name is defined in |
|
|
@w{ISO C} while @code{rindex} is a BSD invention which never was available |
|
|
@@ -1940,6 +2023,7 @@ |
|
|
@comment string.h |
|
|
@comment ISO |
|
|
@deftypefun {char *} strtok (char *restrict @var{newstring}, const char *restrict @var{delimiters}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:strtok}}@asunsafe{}@acsafe{}} |
|
|
A string can be split into tokens by making a series of calls to the |
|
|
function @code{strtok}. |
|
|
|
|
|
@@ -1978,7 +2062,8 @@ |
|
|
|
|
|
@comment wchar.h |
|
|
@comment ISO |
|
|
-@deftypefun {wchar_t *} wcstok (wchar_t *@var{newstring}, const char *@var{delimiters}) |
|
|
+@deftypefun {wchar_t *} wcstok (wchar_t *@var{newstring}, const wchar_t *@var{delimiters}, wchar_t **@var{save_ptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
A string can be split into tokens by making a series of calls to the |
|
|
function @code{wcstok}. |
|
|
|
|
|
@@ -1986,11 +2071,8 @@ |
|
|
the first call only. The @code{wcstok} function uses this to set up |
|
|
some internal state information. Subsequent calls to get additional |
|
|
tokens from the same wide character string are indicated by passing a |
|
|
-null pointer as the @var{newstring} argument. Calling @code{wcstok} |
|
|
-with another non-null @var{newstring} argument reinitializes the state |
|
|
-information. It is guaranteed that no other library function ever calls |
|
|
-@code{wcstok} behind your back (which would mess up this internal state |
|
|
-information). |
|
|
+null pointer as the @var{newstring} argument, which causes the pointer |
|
|
+previously stored in @var{save_ptr} to be used instead. |
|
|
|
|
|
The @var{delimiters} argument is a wide character string that specifies |
|
|
a set of delimiters that may surround the token being extracted. All |
|
|
@@ -1999,8 +2081,10 @@ |
|
|
delimiters marks the beginning of the next token. The end of the token |
|
|
is found by looking for the next wide character that is a member of the |
|
|
delimiter set. This wide character in the original wide character |
|
|
-string @var{newstring} is overwritten by a null wide character, and the |
|
|
-pointer to the beginning of the token in @var{newstring} is returned. |
|
|
+string @var{newstring} is overwritten by a null wide character, the |
|
|
+pointer past the overwritten wide character is saved in @var{save_ptr}, |
|
|
+and the pointer to the beginning of the token in @var{newstring} is |
|
|
+returned. |
|
|
|
|
|
On the next call to @code{wcstok}, the searching begins at the next |
|
|
wide character beyond the one that marked the end of the previous token. |
|
|
@@ -2010,11 +2094,6 @@ |
|
|
If the end of the wide character string @var{newstring} is reached, or |
|
|
if the remainder of string consists only of delimiter wide characters, |
|
|
@code{wcstok} returns a null pointer. |
|
|
- |
|
|
-Note that ``character'' is here used in the sense of byte. In a string |
|
|
-using a multibyte character encoding (abstract) character consisting of |
|
|
-more than one byte are not treated as an entity. Each byte is treated |
|
|
-separately. The function is not locale-dependent. |
|
|
@end deftypefun |
|
|
|
|
|
@strong{Warning:} Since @code{strtok} and @code{wcstok} alter the string |
|
|
@@ -2039,7 +2118,7 @@ |
|
|
structure, then it is error-prone to modify the data structure |
|
|
temporarily. |
|
|
|
|
|
-The functions @code{strtok} and @code{wcstok} are not reentrant. |
|
|
+The function @code{strtok} is not reentrant, whereas @code{wcstok} is. |
|
|
@xref{Nonreentrancy}, for a discussion of where and why reentrancy is |
|
|
important. |
|
|
|
|
|
@@ -2075,13 +2154,15 @@ |
|
|
@comment string.h |
|
|
@comment POSIX |
|
|
@deftypefun {char *} strtok_r (char *@var{newstring}, const char *@var{delimiters}, char **@var{save_ptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Just like @code{strtok}, this function splits the string into several |
|
|
tokens which can be accessed by successive calls to @code{strtok_r}. |
|
|
-The difference is that the information about the next token is stored in |
|
|
-the space pointed to by the third argument, @var{save_ptr}, which is a |
|
|
-pointer to a string pointer. Calling @code{strtok_r} with a null |
|
|
-pointer for @var{newstring} and leaving @var{save_ptr} between the calls |
|
|
-unchanged does the job without hindering reentrancy. |
|
|
+The difference is that, as in @code{wcstok}, the information about the |
|
|
+next token is stored in the space pointed to by the third argument, |
|
|
+@var{save_ptr}, which is a pointer to a string pointer. Calling |
|
|
+@code{strtok_r} with a null pointer for @var{newstring} and leaving |
|
|
+@var{save_ptr} between the calls unchanged does the job without |
|
|
+hindering reentrancy. |
|
|
|
|
|
This function is defined in POSIX.1 and can be found on many systems |
|
|
which support multi-threading. |
|
|
@@ -2090,6 +2171,7 @@ |
|
|
@comment string.h |
|
|
@comment BSD |
|
|
@deftypefun {char *} strsep (char **@var{string_ptr}, const char *@var{delimiter}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function has a similar functionality as @code{strtok_r} with the |
|
|
@var{newstring} argument replaced by the @var{save_ptr} argument. The |
|
|
initialization of the moving pointer has to be done by the user. |
|
|
@@ -2141,6 +2223,7 @@ |
|
|
@comment string.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} basename (const char *@var{filename}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The GNU version of the @code{basename} function returns the last |
|
|
component of the path in @var{filename}. This function is the preferred |
|
|
usage, since it does not modify the argument, @var{filename}, and |
|
|
@@ -2175,8 +2258,9 @@ |
|
|
|
|
|
@comment libgen.h |
|
|
@comment XPG |
|
|
-@deftypefun {char *} basename (char *@var{path}) |
|
|
-This is the standard XPG defined @code{basename}. It is similar in |
|
|
+@deftypefun {char *} basename (const char *@var{path}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+This is the standard XPG defined @code{basename}. It is similar in |
|
|
spirit to the GNU version, but may modify the @var{path} by removing |
|
|
trailing '/' characters. If the @var{path} is made up entirely of '/' |
|
|
characters, then "/" will be returned. Also, if @var{path} is |
|
|
@@ -2211,6 +2295,7 @@ |
|
|
@comment libgen.h |
|
|
@comment XPG |
|
|
@deftypefun {char *} dirname (char *@var{path}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{dirname} function is the compliment to the XPG version of |
|
|
@code{basename}. It returns the parent directory of the file specified |
|
|
by @var{path}. If @var{path} is @code{NULL}, an empty string, or |
|
|
@@ -2233,6 +2318,8 @@ |
|
|
@comment string.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} strfry (char *@var{string}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Calls initstate_r, time, getpid, strlen, and random_r. |
|
|
|
|
|
@code{strfry} creates a pseudorandom anagram of a string, replacing the |
|
|
input with the anagram in place. For each position in the string, |
|
|
@@ -2268,6 +2355,7 @@ |
|
|
@comment string.h |
|
|
@comment GNU |
|
|
@deftypefun {void *} memfrob (void *@var{mem}, size_t @var{length}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
|
|
|
@code{memfrob} transforms (frobnicates) each byte of the data structure |
|
|
at @var{mem}, which is @var{length} bytes long, by bitwise exclusive |
|
|
@@ -2291,13 +2379,14 @@ |
|
|
|
|
|
To store or transfer binary data in environments which only support text |
|
|
one has to encode the binary data by mapping the input bytes to |
|
|
-characters in the range allowed for storing or transfering. SVID |
|
|
+characters in the range allowed for storing or transferring. SVID |
|
|
systems (and nowadays XPG compliant systems) provide minimal support for |
|
|
this task. |
|
|
|
|
|
@comment stdlib.h |
|
|
@comment XPG |
|
|
@deftypefun {char *} l64a (long int @var{n}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:l64a}}@asunsafe{}@acsafe{}} |
|
|
This function encodes a 32-bit input value using characters from the |
|
|
basic character set. It returns a pointer to a 7 character buffer which |
|
|
contains an encoded version of @var{n}. To encode a series of bytes the |
|
|
@@ -2373,6 +2462,7 @@ |
|
|
@comment stdlib.h |
|
|
@comment XPG |
|
|
@deftypefun {long int} a64l (const char *@var{string}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The parameter @var{string} should contain a string which was produced by |
|
|
a call to @code{l64a}. The function processes at least 6 characters of |
|
|
this string, and decodes the characters it finds according to the table |
|
|
@@ -2459,6 +2549,7 @@ |
|
|
@comment argz.h |
|
|
@comment GNU |
|
|
@deftypefun {error_t} argz_create (char *const @var{argv}[], char **@var{argz}, size_t *@var{argz_len}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
The @code{argz_create} function converts the Unix-style argument vector |
|
|
@var{argv} (a vector of pointers to normal C strings, terminated by |
|
|
@code{(char *)0}; @pxref{Program Arguments}) into an argz vector with |
|
|
@@ -2468,6 +2559,7 @@ |
|
|
@comment argz.h |
|
|
@comment GNU |
|
|
@deftypefun {error_t} argz_create_sep (const char *@var{string}, int @var{sep}, char **@var{argz}, size_t *@var{argz_len}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
The @code{argz_create_sep} function converts the null-terminated string |
|
|
@var{string} into an argz vector (returned in @var{argz} and |
|
|
@var{argz_len}) by splitting it into elements at every occurrence of the |
|
|
@@ -2477,13 +2569,15 @@ |
|
|
@comment argz.h |
|
|
@comment GNU |
|
|
@deftypefun {size_t} argz_count (const char *@var{argz}, size_t @var{arg_len}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
Returns the number of elements in the argz vector @var{argz} and |
|
|
@var{argz_len}. |
|
|
@end deftypefun |
|
|
|
|
|
@comment argz.h |
|
|
@comment GNU |
|
|
-@deftypefun {void} argz_extract (char *@var{argz}, size_t @var{argz_len}, char **@var{argv}) |
|
|
+@deftypefun {void} argz_extract (const char *@var{argz}, size_t @var{argz_len}, char **@var{argv}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{argz_extract} function converts the argz vector @var{argz} and |
|
|
@var{argz_len} into a Unix-style argument vector stored in @var{argv}, |
|
|
by putting pointers to every element in @var{argz} into successive |
|
|
@@ -2501,6 +2595,7 @@ |
|
|
@comment argz.h |
|
|
@comment GNU |
|
|
@deftypefun {void} argz_stringify (char *@var{argz}, size_t @var{len}, int @var{sep}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{argz_stringify} converts @var{argz} into a normal string with |
|
|
the elements separated by the character @var{sep}, by replacing each |
|
|
@code{'\0'} inside @var{argz} (except the last one, which terminates the |
|
|
@@ -2511,6 +2606,8 @@ |
|
|
@comment argz.h |
|
|
@comment GNU |
|
|
@deftypefun {error_t} argz_add (char **@var{argz}, size_t *@var{argz_len}, const char *@var{str}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c Calls strlen and argz_append. |
|
|
The @code{argz_add} function adds the string @var{str} to the end of the |
|
|
argz vector @code{*@var{argz}}, and updates @code{*@var{argz}} and |
|
|
@code{*@var{argz_len}} accordingly. |
|
|
@@ -2519,6 +2616,7 @@ |
|
|
@comment argz.h |
|
|
@comment GNU |
|
|
@deftypefun {error_t} argz_add_sep (char **@var{argz}, size_t *@var{argz_len}, const char *@var{str}, int @var{delim}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
The @code{argz_add_sep} function is similar to @code{argz_add}, but |
|
|
@var{str} is split into separate elements in the result at occurrences of |
|
|
the character @var{delim}. This is useful, for instance, for |
|
|
@@ -2529,6 +2627,7 @@ |
|
|
@comment argz.h |
|
|
@comment GNU |
|
|
@deftypefun {error_t} argz_append (char **@var{argz}, size_t *@var{argz_len}, const char *@var{buf}, size_t @var{buf_len}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
The @code{argz_append} function appends @var{buf_len} bytes starting at |
|
|
@var{buf} to the argz vector @code{*@var{argz}}, reallocating |
|
|
@code{*@var{argz}} to accommodate it, and adding @var{buf_len} to |
|
|
@@ -2538,6 +2637,8 @@ |
|
|
@comment argz.h |
|
|
@comment GNU |
|
|
@deftypefun {void} argz_delete (char **@var{argz}, size_t *@var{argz_len}, char *@var{entry}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c Calls free if no argument is left. |
|
|
If @var{entry} points to the beginning of one of the elements in the |
|
|
argz vector @code{*@var{argz}}, the @code{argz_delete} function will |
|
|
remove this entry and reallocate @code{*@var{argz}}, modifying |
|
|
@@ -2549,6 +2650,8 @@ |
|
|
@comment argz.h |
|
|
@comment GNU |
|
|
@deftypefun {error_t} argz_insert (char **@var{argz}, size_t *@var{argz_len}, char *@var{before}, const char *@var{entry}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c Calls argz_add or realloc and memmove. |
|
|
The @code{argz_insert} function inserts the string @var{entry} into the |
|
|
argz vector @code{*@var{argz}} at a point just before the existing |
|
|
element pointed to by @var{before}, reallocating @code{*@var{argz}} and |
|
|
@@ -2561,7 +2664,8 @@ |
|
|
|
|
|
@comment argz.h |
|
|
@comment GNU |
|
|
-@deftypefun {char *} argz_next (char *@var{argz}, size_t @var{argz_len}, const char *@var{entry}) |
|
|
+@deftypefun {char *} argz_next (const char *@var{argz}, size_t @var{argz_len}, const char *@var{entry}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{argz_next} function provides a convenient way of iterating |
|
|
over the elements in the argz vector @var{argz}. It returns a pointer |
|
|
to the next element in @var{argz} after the element @var{entry}, or |
|
|
@@ -2595,6 +2699,7 @@ |
|
|
@comment argz.h |
|
|
@comment GNU |
|
|
@deftypefun error_t argz_replace (@w{char **@var{argz}, size_t *@var{argz_len}}, @w{const char *@var{str}, const char *@var{with}}, @w{unsigned *@var{replace_count}}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
Replace any occurrences of the string @var{str} in @var{argz} with |
|
|
@var{with}, reallocating @var{argz} as necessary. If |
|
|
@var{replace_count} is non-zero, @code{*@var{replace_count}} will be |
|
|
@@ -2630,6 +2735,7 @@ |
|
|
@comment envz.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} envz_entry (const char *@var{envz}, size_t @var{envz_len}, const char *@var{name}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{envz_entry} function finds the entry in @var{envz} with the name |
|
|
@var{name}, and returns a pointer to the whole entry---that is, the argz |
|
|
element which begins with @var{name} followed by a @code{'='} character. If |
|
|
@@ -2639,6 +2745,7 @@ |
|
|
@comment envz.h |
|
|
@comment GNU |
|
|
@deftypefun {char *} envz_get (const char *@var{envz}, size_t @var{envz_len}, const char *@var{name}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{envz_get} function finds the entry in @var{envz} with the name |
|
|
@var{name} (like @code{envz_entry}), and returns a pointer to the value |
|
|
portion of that entry (following the @code{'='}). If there is no entry with |
|
|
@@ -2648,6 +2755,9 @@ |
|
|
@comment envz.h |
|
|
@comment GNU |
|
|
@deftypefun {error_t} envz_add (char **@var{envz}, size_t *@var{envz_len}, const char *@var{name}, const char *@var{value}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
+@c Calls envz_remove, which calls enz_entry and argz_delete, and then |
|
|
+@c argz_add or equivalent code that reallocs and appends name=value. |
|
|
The @code{envz_add} function adds an entry to @code{*@var{envz}} |
|
|
(updating @code{*@var{envz}} and @code{*@var{envz_len}}) with the name |
|
|
@var{name}, and value @var{value}. If an entry with the same name |
|
|
@@ -2659,6 +2769,7 @@ |
|
|
@comment envz.h |
|
|
@comment GNU |
|
|
@deftypefun {error_t} envz_merge (char **@var{envz}, size_t *@var{envz_len}, const char *@var{envz2}, size_t @var{envz2_len}, int @var{override}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} |
|
|
The @code{envz_merge} function adds each entry in @var{envz2} to @var{envz}, |
|
|
as if with @code{envz_add}, updating @code{*@var{envz}} and |
|
|
@code{*@var{envz_len}}. If @var{override} is true, then values in @var{envz2} |
|
|
@@ -2672,6 +2783,10 @@ |
|
|
@comment envz.h |
|
|
@comment GNU |
|
|
@deftypefun {void} envz_strip (char **@var{envz}, size_t *@var{envz_len}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{envz_strip} function removes any null entries from @var{envz}, |
|
|
updating @code{*@var{envz}} and @code{*@var{envz_len}}. |
|
|
@end deftypefun |
|
|
+ |
|
|
+@c FIXME this are undocumented: |
|
|
+@c strcasecmp_l @safety{@mtsafe{}@assafe{}@acsafe{}} see strcasecmp |
|
|
diff -urN glibc-2.17-c758a686/manual/summary.awk glibc-2.17-c758a686/manual/summary.awk |
|
|
--- glibc-2.17-c758a686/manual/summary.awk 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/summary.awk 2014-09-12 16:10:06.042792724 -0400 |
|
|
@@ -1,5 +1,5 @@ |
|
|
# awk script to create summary.texinfo from the library texinfo files. |
|
|
-# Copyright (C) 1992, 1993, 1997, 2001 Free Software Foundation, Inc. |
|
|
+# Copyright (C) 1992-2014 Free Software Foundation, Inc. |
|
|
# This file is part of the GNU C Library. |
|
|
|
|
|
# The GNU C Library is free software; you can redistribute it and/or |
|
|
diff -urN glibc-2.17-c758a686/manual/sysinfo.texi glibc-2.17-c758a686/manual/sysinfo.texi |
|
|
--- glibc-2.17-c758a686/manual/sysinfo.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/sysinfo.texi 2014-09-12 16:10:06.048792709 -0400 |
|
|
@@ -91,6 +91,9 @@ |
|
|
@comment unistd.h |
|
|
@comment BSD |
|
|
@deftypefun int gethostname (char *@var{name}, size_t @var{size}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall on unix; implemented in terms of uname on posix and of |
|
|
+@c hurd_get_host_config on hurd. |
|
|
This function returns the host name of the system on which it is called, |
|
|
in the array @var{name}. The @var{size} argument specifies the size of |
|
|
this array, in bytes. Note that this is @emph{not} the DNS hostname. |
|
|
@@ -121,6 +124,9 @@ |
|
|
@comment unistd.h |
|
|
@comment BSD |
|
|
@deftypefun int sethostname (const char *@var{name}, size_t @var{length}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall on unix; implemented in terms of hurd_set_host_config |
|
|
+@c on hurd. |
|
|
The @code{sethostname} function sets the host name of the system that |
|
|
calls it to @var{name}, a string with length @var{length}. Only |
|
|
privileged processes are permitted to do this. |
|
|
@@ -145,6 +151,8 @@ |
|
|
@comment unistd.h |
|
|
@comment ??? |
|
|
@deftypefun int getdomainnname (char *@var{name}, size_t @var{length}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Syscalls uname, then strlen and memcpy. |
|
|
@cindex NIS domain name |
|
|
@cindex YP domain name |
|
|
|
|
|
@@ -159,6 +167,8 @@ |
|
|
@comment unistd.h |
|
|
@comment ??? |
|
|
@deftypefun int setdomainname (const char *@var{name}, size_t @var{length}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall. |
|
|
@cindex NIS domain name |
|
|
@cindex YP domain name |
|
|
|
|
|
@@ -173,6 +183,10 @@ |
|
|
@comment unistd.h |
|
|
@comment BSD |
|
|
@deftypefun {long int} gethostid (void) |
|
|
+@safety{@prelim{}@mtsafe{@mtshostid{} @mtsenv{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{} @acsfd{}}} |
|
|
+@c On HURD, calls _hurd_get_host_config and strtol. On Linux, open |
|
|
+@c HOSTIDFILE, reads an int32_t and closes; if that fails, it calls |
|
|
+@c gethostname and gethostbyname_r to use the h_addr. |
|
|
This function returns the ``host ID'' of the machine the program is |
|
|
running on. By convention, this is usually the primary Internet IP address |
|
|
of that machine, converted to a @w{@code{long int}}. However, on some |
|
|
@@ -190,6 +204,7 @@ |
|
|
@comment unistd.h |
|
|
@comment BSD |
|
|
@deftypefun int sethostid (long int @var{id}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasuconst{:@mtshostid{}}}@asunsafe{}@acunsafe{@acucorrupt{} @acsfd{}}} |
|
|
The @code{sethostid} function sets the ``host ID'' of the host machine |
|
|
to @var{id}. Only privileged processes are permitted to do this. Usually |
|
|
it happens just once, at system boot time. |
|
|
@@ -226,7 +241,7 @@ |
|
|
|
|
|
As a bonus, @code{uname} also gives some information identifying the |
|
|
particular system your program is running on. This is the same information |
|
|
-which you can get with functions targetted to this purpose described in |
|
|
+which you can get with functions targeted to this purpose described in |
|
|
@ref{Host Identification}. |
|
|
|
|
|
|
|
|
@@ -296,6 +311,10 @@ |
|
|
@comment sys/utsname.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int uname (struct utsname *@var{info}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall on unix; the posix fallback is to call gethostname and |
|
|
+@c then fills in the other fields with constants; on HURD, it calls |
|
|
+@c proc_uname and then gethostname. |
|
|
The @code{uname} function fills in the structure pointed to by |
|
|
@var{info} with information about the operating system and host machine. |
|
|
A non-negative value indicates that the data was successfully stored. |
|
|
@@ -471,6 +490,12 @@ |
|
|
@comment fstab.h |
|
|
@comment BSD |
|
|
@deftypefun int setfsent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:fsent}}@asunsafe{@ascuheap{} @asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c setfsent @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c fstab_init(1) @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c rewind dup @asucorrupt @acucorrupt [no @aculock] |
|
|
+@c setmntent dup @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
This function makes sure that the internal read pointer for the |
|
|
@file{fstab} file is at the beginning of the file. This is done by |
|
|
either opening the file or resetting the read pointer. |
|
|
@@ -486,6 +511,9 @@ |
|
|
@comment fstab.h |
|
|
@comment BSD |
|
|
@deftypefun void endfsent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:fsent}}@asunsafe{@ascuheap{} @asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c endfsent @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c endmntent dup @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
This function makes sure that all resources acquired by a prior call to |
|
|
@code{setfsent} (explicitly or implicitly by calling @code{getfsent}) are |
|
|
freed. |
|
|
@@ -494,6 +522,13 @@ |
|
|
@comment fstab.h |
|
|
@comment BSD |
|
|
@deftypefun {struct fstab *} getfsent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:fsent} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} |
|
|
+@c getfsent @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @asulock @acucorrupt @aculock @acsmem |
|
|
+@c fstab_init(0) dup @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c fstab_fetch @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem |
|
|
+@c getmntent_r dup @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem |
|
|
+@c fstab_convert @mtasurace:fsent |
|
|
+@c hasmntopt dup ok |
|
|
This function returns the next entry of the @file{fstab} file. If this |
|
|
is the first call to any of the functions handling @file{fstab} since |
|
|
program start or the last call of @code{endfsent}, the file will be |
|
|
@@ -508,6 +543,12 @@ |
|
|
@comment fstab.h |
|
|
@comment BSD |
|
|
@deftypefun {struct fstab *} getfsspec (const char *@var{name}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:fsent} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} |
|
|
+@c getffsspec @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @asulock @acucorrupt @aculock @acsmem |
|
|
+@c fstab_init(1) dup @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c fstab_fetch dup @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem |
|
|
+@c strcmp dup ok |
|
|
+@c fstab_convert dup @mtasurace:fsent |
|
|
This function returns the next entry of the @file{fstab} file which has |
|
|
a string equal to @var{name} pointed to by the @code{fs_spec} element. |
|
|
Since there is normally exactly one entry for each special device it |
|
|
@@ -525,6 +566,12 @@ |
|
|
@comment fstab.h |
|
|
@comment BSD |
|
|
@deftypefun {struct fstab *} getfsfile (const char *@var{name}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:fsent} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} |
|
|
+@c getffsfile @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @asulock @acucorrupt @aculock @acsmem |
|
|
+@c fstab_init(1) dup @mtasurace:fsent @ascuheap @asucorrupt @asulock @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c fstab_fetch dup @mtasurace:fsent @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem |
|
|
+@c strcmp dup ok |
|
|
+@c fstab_convert dup @mtasurace:fsent |
|
|
This function returns the next entry of the @file{fstab} file which has |
|
|
a string equal to @var{name} pointed to by the @code{fs_file} element. |
|
|
Since there is normally exactly one entry for each mount point it |
|
|
@@ -640,6 +687,13 @@ |
|
|
@comment mntent.h |
|
|
@comment BSD |
|
|
@deftypefun {FILE *} setmntent (const char *@var{file}, const char *@var{mode}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}} |
|
|
+@c setmntent @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c strlen dup ok |
|
|
+@c mempcpy dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c fsetlocking dup ok [no @mtasurace:stream @asulock: exclusive stream] |
|
|
The @code{setmntent} function prepares the file named @var{FILE} which |
|
|
must be in the format of a @file{fstab} and @file{mtab} file for the |
|
|
upcoming processing through the other functions of the family. The |
|
|
@@ -655,6 +709,9 @@ |
|
|
@comment mntent.h |
|
|
@comment BSD |
|
|
@deftypefun int endmntent (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c endmntent @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c fclose dup @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
This function takes for the @var{stream} parameter a file handle which |
|
|
previously was returned from the @code{setmntent} call. |
|
|
@code{endmntent} closes the stream and frees all resources. |
|
|
@@ -666,6 +723,12 @@ |
|
|
@comment mntent.h |
|
|
@comment BSD |
|
|
@deftypefun {struct mntent *} getmntent (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:mntentbuf} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asuinit{}}@acunsafe{@acuinit{} @acucorrupt{} @aculock{} @acsmem{}}} |
|
|
+@c getmntent @mtasurace:mntentbuf @mtslocale @asucorrupt @ascuheap @asuinit @acuinit @acucorrupt @aculock @acsmem |
|
|
+@c libc_once @ascuheap @asuinit @acuinit @acsmem |
|
|
+@c allocate @ascuheap @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c getmntent_r dup @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem |
|
|
The @code{getmntent} function takes as the parameter a file handle |
|
|
previously returned by successful call to @code{setmntent}. It returns |
|
|
a pointer to a static variable of type @code{struct mntent} which is |
|
|
@@ -691,7 +754,17 @@ |
|
|
|
|
|
@comment mntent.h |
|
|
@comment BSD |
|
|
-@deftypefun {struct mntent *} getmntent_r (FILE *@var{stream}, struct mentent *@var{result}, char *@var{buffer}, int @var{bufsize}) |
|
|
+@deftypefun {struct mntent *} getmntent_r (FILE *@var{stream}, struct mntent *@var{result}, char *@var{buffer}, int @var{bufsize}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{}}} |
|
|
+@c getmntent_r @mtslocale @asucorrupt @ascuheap @acucorrupt @aculock @acsmem |
|
|
+@c flockfile dup @aculock |
|
|
+@c fgets_unlocked dup @asucorrupt @acucorrupt [locked, so no @mtsrace:stream] |
|
|
+@c funlockfile dup @aculock |
|
|
+@c strchr dup ok |
|
|
+@c strspn dup ok |
|
|
+@c strsep dup ok |
|
|
+@c decode_name ok |
|
|
+@c sscanf dup @mtslocale @ascuheap @acsmem |
|
|
The @code{getmntent_r} function is the reentrant variant of |
|
|
@code{getmntent}. It also returns the next entry from the file and |
|
|
returns a pointer. The actual variable the values are stored in is not |
|
|
@@ -717,6 +790,12 @@ |
|
|
@comment mntent.h |
|
|
@comment BSD |
|
|
@deftypefun int addmntent (FILE *@var{stream}, const struct mntent *@var{mnt}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:stream} @mtslocale{}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}} |
|
|
+@c addmntent @mtasurace:stream @mtslocale @asucorrupt @acucorrupt |
|
|
+@c fseek dup @asucorrupt @acucorrupt [no @aculock] |
|
|
+@c encode_name ok |
|
|
+@c fprintf dup @mtslocale @asucorrupt @acucorrupt [no @ascuheap @acsmem, no @aculock] |
|
|
+@c fflush dup @asucorrupt @acucorrupt [no @aculock] |
|
|
The @code{addmntent} function allows adding a new entry to the file |
|
|
previously opened with @code{setmntent}. The new entries are always |
|
|
appended. I.e., even if the position of the file descriptor is not at |
|
|
@@ -740,6 +819,11 @@ |
|
|
@comment mntent.h |
|
|
@comment BSD |
|
|
@deftypefun {char *} hasmntopt (const struct mntent *@var{mnt}, const char *@var{opt}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c hasmntopt ok |
|
|
+@c strlen dup ok |
|
|
+@c strstr dup ok |
|
|
+@c strchr dup ok |
|
|
This function can be used to check whether the string pointed to by the |
|
|
@code{mnt_opts} element of the variable pointed to by @var{mnt} contains |
|
|
the option @var{opt}. If this is true a pointer to the beginning of the |
|
|
@@ -778,6 +862,8 @@ |
|
|
@comment sys/mount.h |
|
|
@comment SVID, BSD |
|
|
@deftypefun {int} mount (const char *@var{special_file}, const char *@var{dir}, const char *@var{fstype}, unsigned long int @var{options}, const void *@var{data}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall. |
|
|
|
|
|
@code{mount} mounts or remounts a filesystem. The two operations are |
|
|
quite different and are merged rather unnaturally into this one function. |
|
|
@@ -982,6 +1068,8 @@ |
|
|
@comment sys/mount.h |
|
|
@comment GNU |
|
|
@deftypefun {int} umount2 (const char *@var{file}, int @var{flags}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall. |
|
|
|
|
|
@code{umount2} unmounts a filesystem. |
|
|
|
|
|
@@ -1047,6 +1135,8 @@ |
|
|
@comment sys/mount.h |
|
|
@comment SVID, GNU |
|
|
@deftypefun {int} umount (const char *@var{file}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall or wrapper for umount2. |
|
|
|
|
|
@code{umount} does the same thing as @code{umount2} with @var{flags} set |
|
|
to zeroes. It is more widely available than @code{umount2} but since it |
|
|
@@ -1062,11 +1152,13 @@ |
|
|
This section describes the @code{sysctl} function, which gets and sets |
|
|
a variety of system parameters. |
|
|
|
|
|
-The symbols used in this section are declared in the file @file{sysctl.h}. |
|
|
+The symbols used in this section are declared in the file @file{sys/sysctl.h}. |
|
|
|
|
|
-@comment sysctl.h |
|
|
+@comment sys/sysctl.h |
|
|
@comment BSD |
|
|
@deftypefun int sysctl (int *@var{names}, int @var{nlen}, void *@var{oldval}, size_t *@var{oldlenp}, void *@var{newval}, size_t @var{newlen}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct syscall, Linux only. |
|
|
|
|
|
@code{sysctl} gets or sets a specified system parameter. There are so |
|
|
many of these parameters that it is not practical to list them all here, |
|
|
@@ -1090,7 +1182,7 @@ |
|
|
a particular parameter, you specify a path through the structure in a |
|
|
way analogous to specifying the pathname of a file. Each component of |
|
|
the path is specified by an integer and each of these integers has a |
|
|
-macro defined for it by @file{sysctl.h}. @var{names} is the path, in |
|
|
+macro defined for it by @file{sys/sysctl.h}. @var{names} is the path, in |
|
|
the form of an array of integers. Each component of the path is one |
|
|
element of the array, in order. @var{nlen} is the number of components |
|
|
in the path. |
|
|
diff -urN glibc-2.17-c758a686/manual/syslog.texi glibc-2.17-c758a686/manual/syslog.texi |
|
|
--- glibc-2.17-c758a686/manual/syslog.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/syslog.texi 2014-09-12 16:10:06.044792719 -0400 |
|
|
@@ -147,6 +147,17 @@ |
|
|
@comment syslog.h |
|
|
@comment BSD |
|
|
@deftypefun void openlog (const char *@var{ident}, int @var{option}, int @var{facility}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}} |
|
|
+@c openlog @asulock @aculock @acsfd |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c openlog_internal @acsfd [always guarded by syslog_lock, so no race] |
|
|
+@c strncpy dup ok |
|
|
+@c socket dup @acsfd |
|
|
+@c fcntl dup ok |
|
|
+@c connect dup ok |
|
|
+@c close dup @acsfd |
|
|
+@c cancel_handler(NULL) @aculock |
|
|
+@c libc_lock_unlock @aculock |
|
|
|
|
|
@code{openlog} opens or reopens a connection to Syslog in preparation |
|
|
for submitting messages. |
|
|
@@ -275,7 +286,39 @@ |
|
|
@c syslog() is implemented as a call to vsyslog(). |
|
|
@comment syslog.h |
|
|
@comment BSD |
|
|
-@deftypefun void syslog (int @var{facility_priority}, char *@var{format}, @dots{}) |
|
|
+@deftypefun void syslog (int @var{facility_priority}, const char *@var{format}, @dots{}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c syslog @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c va_start dup ok |
|
|
+@c vsyslog_chk @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c syslog(INTERNALLOG) dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c open_memstream @ascuheap @acsmem |
|
|
+@c stpcpy dup ok |
|
|
+@c getpid dup ok |
|
|
+@c mempcpy dup ok |
|
|
+@c fsetlocking [no @mtasurace:stream @asulock for exclusive stream] |
|
|
+@c fprintf @mtslocale @ascuheap @acsmem [no @asucorrupt @aculock @acucorrupt on temp memstream] |
|
|
+@c time dup ok |
|
|
+@c localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c strftime_l(C) dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c ftell dup ok [no @asucorrupt @aculock @acucorrupt on temp memstream] |
|
|
+@c fputs_unlocked dup ok [no @mtasurace:stream @asucorrupt @acucorrupt on temp memstream] |
|
|
+@c putc_unlocked dup ok [no @mtasurace:stream @asucorrupt @acucorrupt on temp memstream] |
|
|
+@c vfprintf/vfprintf_chk dup @mtslocale @ascuheap @acsmem [no @mtasurace:stream @asucorrupt @acucorrupt on temp memstream] |
|
|
+@c fclose dup @ascuheap @acsmem [no @asulock @aculock @acsfd on caller-locked memstream] |
|
|
+@c writev dup ok |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c memset dup ok |
|
|
+@c sigemptyset dup ok |
|
|
+@c sigaction(SIGPIPE) dup @mtasusig:PIPE @acusig:PIPE |
|
|
+@c openlog_internal dup @acsfd |
|
|
+@c send dup ok |
|
|
+@c closelog_internal dup @acsfd |
|
|
+@c open dup @acsfd |
|
|
+@c dprintf dup ok |
|
|
+@c libc_lock_unlock @asulock @aculock |
|
|
+@c free dup @acsuheap @acsmem |
|
|
+@c va_end dup ok |
|
|
|
|
|
@code{syslog} submits a message to the Syslog facility. It does this by |
|
|
writing to the Unix domain socket @code{/dev/log}. |
|
|
@@ -403,7 +446,10 @@ |
|
|
|
|
|
@comment syslog.h |
|
|
@comment BSD |
|
|
-@deftypefun void vsyslog (int @var{facility_priority}, char *@var{format}, va_list @var{arglist}) |
|
|
+@deftypefun void vsyslog (int @var{facility_priority}, const char *@var{format}, va_list @var{arglist}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c vsyslog @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c vsyslog_chk dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
|
|
|
This is functionally identical to @code{syslog}, with the BSD style variable |
|
|
length argument. |
|
|
@@ -420,6 +466,13 @@ |
|
|
@comment syslog.h |
|
|
@comment BSD |
|
|
@deftypefun void closelog (void) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}} |
|
|
+@c closelog @asulock @aculock @acsfd |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c closelog_internal @acsfd [always guarded by syslog_lock, so no race] |
|
|
+@c close dup@acsfd |
|
|
+@c cancel_handler(NULL) @aculock |
|
|
+@c libc_lock_unlock @aculock |
|
|
|
|
|
@code{closelog} closes the current Syslog connection, if there is one. |
|
|
This includes closing the @file{/dev/log} socket, if it is open. |
|
|
@@ -450,6 +503,10 @@ |
|
|
@comment syslog.h |
|
|
@comment BSD |
|
|
@deftypefun int setlogmask (int @var{mask}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:LogMask}}@asunsafe{}@acsafe{}} |
|
|
+@c Read and modify are not guarded by syslog_lock, so concurrent changes |
|
|
+@c or even uses are undefined. This should use an atomic swap instead, |
|
|
+@c at least for modifications. |
|
|
|
|
|
@code{setlogmask} sets a mask (the ``logmask'') that determines which |
|
|
future @code{syslog} calls shall be ignored. If a program has not |
|
|
diff -urN glibc-2.17-c758a686/manual/terminal.texi glibc-2.17-c758a686/manual/terminal.texi |
|
|
--- glibc-2.17-c758a686/manual/terminal.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/terminal.texi 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -44,6 +44,9 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int isatty (int @var{filedes}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c isatty ok |
|
|
+@c tcgetattr dup ok |
|
|
This function returns @code{1} if @var{filedes} is a file descriptor |
|
|
associated with an open terminal device, and @math{0} otherwise. |
|
|
@end deftypefun |
|
|
@@ -55,6 +58,20 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun {char *} ttyname (int @var{filedes}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:ttyname}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c ttyname @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c isatty dup ok |
|
|
+@c fstat dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c getttyname @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c opendir @ascuheap @acsmem @acsfd |
|
|
+@c readdir ok [protected by exclusive access] |
|
|
+@c strcmp dup ok |
|
|
+@c free dup @asulock @aculock @acsfd @acsmem |
|
|
+@c malloc dup @asulock @aculock @acsfd @acsmem |
|
|
+@c closedir @ascuheap @acsmem @acsfd |
|
|
+@c mempcpy dup ok |
|
|
+@c stat dup ok |
|
|
If the file descriptor @var{filedes} is associated with a terminal |
|
|
device, the @code{ttyname} function returns a pointer to a |
|
|
statically-allocated, null-terminated string containing the file name of |
|
|
@@ -65,6 +82,18 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int ttyname_r (int @var{filedes}, char *@var{buf}, size_t @var{len}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{} @acsfd{}}} |
|
|
+@c ttyname_r @ascuheap @acsmem @acsfd |
|
|
+@c isatty dup ok |
|
|
+@c fstat dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c getttyname_r @ascuheap @acsmem @acsfd |
|
|
+@c opendir @ascuheap @acsmem @acsfd |
|
|
+@c readdir ok [protected by exclusive access] |
|
|
+@c strcmp dup ok |
|
|
+@c closedir @ascuheap @acsmem @acsfd |
|
|
+@c stpncpy dup ok |
|
|
+@c stat dup ok |
|
|
The @code{ttyname_r} function is similar to the @code{ttyname} function |
|
|
except that it places its result into the user-specified buffer starting |
|
|
at @var{buf} with length @var{len}. |
|
|
@@ -264,6 +293,9 @@ |
|
|
@comment termios.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int tcgetattr (int @var{filedes}, struct termios *@var{termios-p}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Converting the kernel-returned termios data structure to the userland |
|
|
+@c format does not ensure atomic or consistent writing. |
|
|
This function is used to examine the attributes of the terminal |
|
|
device with file descriptor @var{filedes}. The attributes are returned |
|
|
in the structure that @var{termios-p} points to. |
|
|
@@ -284,6 +316,9 @@ |
|
|
@comment termios.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int tcsetattr (int @var{filedes}, int @var{when}, const struct termios *@var{termios-p}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Converting the incoming termios data structure to the kernel format |
|
|
+@c does not ensure atomic or consistent reading. |
|
|
This function sets the attributes of the terminal device with file |
|
|
descriptor @var{filedes}. The new attributes are taken from the |
|
|
structure that @var{termios-p} points to. |
|
|
@@ -621,7 +656,7 @@ |
|
|
of characters, carriage return followed by linefeed. |
|
|
@end deftypevr |
|
|
|
|
|
-@comment termios.h |
|
|
+@comment termios.h (optional) |
|
|
@comment BSD |
|
|
@deftypevr Macro tcflag_t OXTABS |
|
|
If this bit is set, convert tab characters on output into the appropriate |
|
|
@@ -630,7 +665,7 @@ |
|
|
@gnulinuxsystems{} it is available as @code{XTABS}. |
|
|
@end deftypevr |
|
|
|
|
|
-@comment termios.h |
|
|
+@comment termios.h (optional) |
|
|
@comment BSD |
|
|
@deftypevr Macro tcflag_t ONOEOT |
|
|
If this bit is set, discard @kbd{C-d} characters (code @code{004}) on |
|
|
@@ -962,7 +997,7 @@ |
|
|
While this bit is set, all output is discarded. @xref{Other Special}. |
|
|
@end deftypevr |
|
|
|
|
|
-@comment termios.h |
|
|
+@comment termios.h (optional) |
|
|
@comment BSD |
|
|
@deftypevr Macro tcflag_t NOKERNINFO |
|
|
Setting this bit disables handling of the STATUS character. |
|
|
@@ -1016,6 +1051,10 @@ |
|
|
@comment termios.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun speed_t cfgetospeed (const struct termios *@var{termios-p}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct access to a single termios field, except on Linux, where |
|
|
+@c multiple accesses may take place. No worries either way, callers |
|
|
+@c must ensure mutual exclusion on such non-opaque types. |
|
|
This function returns the output line speed stored in the structure |
|
|
@code{*@var{termios-p}}. |
|
|
@end deftypefun |
|
|
@@ -1023,6 +1062,7 @@ |
|
|
@comment termios.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun speed_t cfgetispeed (const struct termios *@var{termios-p}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function returns the input line speed stored in the structure |
|
|
@code{*@var{termios-p}}. |
|
|
@end deftypefun |
|
|
@@ -1030,6 +1070,7 @@ |
|
|
@comment termios.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int cfsetospeed (struct termios *@var{termios-p}, speed_t @var{speed}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function stores @var{speed} in @code{*@var{termios-p}} as the output |
|
|
speed. The normal return value is @math{0}; a value of @math{-1} |
|
|
indicates an error. If @var{speed} is not a speed, @code{cfsetospeed} |
|
|
@@ -1039,6 +1080,7 @@ |
|
|
@comment termios.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int cfsetispeed (struct termios *@var{termios-p}, speed_t @var{speed}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
This function stores @var{speed} in @code{*@var{termios-p}} as the input |
|
|
speed. The normal return value is @math{0}; a value of @math{-1} |
|
|
indicates an error. If @var{speed} is not a speed, @code{cfsetospeed} |
|
|
@@ -1048,6 +1090,14 @@ |
|
|
@comment termios.h |
|
|
@comment BSD |
|
|
@deftypefun int cfsetspeed (struct termios *@var{termios-p}, speed_t @var{speed}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c There's no guarantee that the two calls are atomic, but since this is |
|
|
+@c not an opaque type, callers ought to ensure mutual exclusion to the |
|
|
+@c termios object. |
|
|
+ |
|
|
+@c cfsetspeed ok |
|
|
+@c cfsetispeed ok |
|
|
+@c cfsetospeed ok |
|
|
This function stores @var{speed} in @code{*@var{termios-p}} as both the |
|
|
input and output speeds. The normal return value is @math{0}; a value |
|
|
of @math{-1} indicates an error. If @var{speed} is not a speed, |
|
|
@@ -1625,6 +1675,10 @@ |
|
|
@comment termios.h |
|
|
@comment BSD |
|
|
@deftypefun void cfmakeraw (struct termios *@var{termios-p}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c There's no guarantee the changes are atomic, but since this is not an |
|
|
+@c opaque type, callers ought to ensure mutual exclusion to the termios |
|
|
+@c object. |
|
|
This function provides an easy way to set up @code{*@var{termios-p}} for |
|
|
what has traditionally been called ``raw mode'' in BSD. This uses |
|
|
noncanonical input, and turns off most processing to give an unmodified |
|
|
@@ -1678,6 +1732,8 @@ |
|
|
@comment sgtty.h |
|
|
@comment BSD |
|
|
@deftypefun int gtty (int @var{filedes}, struct sgttyb *@var{attributes}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct ioctl, BSD only. |
|
|
This function gets the attributes of a terminal. |
|
|
|
|
|
@code{gtty} sets *@var{attributes} to describe the terminal attributes |
|
|
@@ -1686,7 +1742,9 @@ |
|
|
|
|
|
@comment sgtty.h |
|
|
@comment BSD |
|
|
-@deftypefun int stty (int @var{filedes}, struct sgttyb *@var{attributes}) |
|
|
+@deftypefun int stty (int @var{filedes}, const struct sgttyb *@var{attributes}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct ioctl, BSD only. |
|
|
|
|
|
This function sets the attributes of a terminal. |
|
|
|
|
|
@@ -1710,6 +1768,12 @@ |
|
|
@comment termios.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int tcsendbreak (int @var{filedes}, int @var{duration}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:tcattr(filedes)/bsd}}@asunsafe{}@acunsafe{@acucorrupt{/bsd}}} |
|
|
+@c On Linux, this calls just one out of two ioctls; on BSD, it's two |
|
|
+@c ioctls with a select (for the delay only) in between, the first |
|
|
+@c setting and the latter clearing the break status. The BSD |
|
|
+@c implementation may leave the break enabled if cancelled, and threads |
|
|
+@c and signals may cause the break to be interrupted before requested. |
|
|
This function generates a break condition by transmitting a stream of |
|
|
zero bits on the terminal associated with the file descriptor |
|
|
@var{filedes}. The duration of the break is controlled by the |
|
|
@@ -1738,6 +1802,8 @@ |
|
|
@comment termios.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int tcdrain (int @var{filedes}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct ioctl. |
|
|
The @code{tcdrain} function waits until all queued |
|
|
output to the terminal @var{filedes} has been transmitted. |
|
|
|
|
|
@@ -1772,6 +1838,8 @@ |
|
|
@comment termios.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int tcflush (int @var{filedes}, int @var{queue}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Direct ioctl. |
|
|
The @code{tcflush} function is used to clear the input and/or output |
|
|
queues associated with the terminal file @var{filedes}. The @var{queue} |
|
|
argument specifies which queue(s) to clear, and can be one of the |
|
|
@@ -1822,6 +1890,11 @@ |
|
|
@comment termios.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int tcflow (int @var{filedes}, int @var{action}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:tcattr(filedes)/bsd}}@asunsafe{}@acsafe{}} |
|
|
+@c Direct ioctl on Linux. On BSD, the TCO* actions are a single ioctl, |
|
|
+@c whereas the TCI actions first call tcgetattr and then write to the fd |
|
|
+@c the c_cc character corresponding to the action; there's a window for |
|
|
+@c another thread to change the xon/xoff characters. |
|
|
The @code{tcflow} function is used to perform operations relating to |
|
|
XON/XOFF flow control on the terminal file specified by @var{filedes}. |
|
|
|
|
|
@@ -1931,6 +2004,14 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun int getpt (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{@acsfd{}}} |
|
|
+@c On BSD, tries to open multiple potential pty names, returning on the |
|
|
+@c first success. On Linux, try posix_openpt first, then fallback to |
|
|
+@c the BSD implementation. The posix implementation opens the ptmx |
|
|
+@c device, checks with statfs that /dev/pts is a devpts or that /dev is |
|
|
+@c a devfs, and returns the fd; static variables devpts_mounted and |
|
|
+@c have_no_dev_ptmx are safely initialized so as to avoid repeated |
|
|
+@c tests. |
|
|
The @code{getpt} function returns a new file descriptor for the next |
|
|
available master pseudo-terminal. The normal return value from |
|
|
@code{getpt} is a non-negative integer file descriptor. In the case of |
|
|
@@ -1948,6 +2029,32 @@ |
|
|
@comment stdlib.h |
|
|
@comment SVID, XPG4.2 |
|
|
@deftypefun int grantpt (int @var{filedes}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c grantpt @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c unix/grantpt:pts_name @acsuheap @acsmem |
|
|
+@c ptsname_internal dup ok (but this is Linux-only!) |
|
|
+@c memchr dup ok |
|
|
+@c realloc dup @acsuheap @acsmem |
|
|
+@c malloc dup @acsuheap @acsmem |
|
|
+@c free dup @acsuheap @acsmem |
|
|
+@c fcntl dup ok |
|
|
+@c getuid dup ok |
|
|
+@c chown dup ok |
|
|
+@c sysconf(_SC_GETGR_R_SIZE_MAX) ok |
|
|
+@c getgrnam_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c getgid dup ok |
|
|
+@c chmod dup ok |
|
|
+@c fork dup @aculock |
|
|
+@c [child] |
|
|
+@c setrlimit |
|
|
+@c dup2 |
|
|
+@c CLOSE_ALL_FDS |
|
|
+@c execle |
|
|
+@c _exit |
|
|
+@c waitpid dup ok |
|
|
+@c WIFEXITED dup ok |
|
|
+@c WEXITSTATUS dup ok |
|
|
+@c free dup @ascuheap @acsmem |
|
|
The @code{grantpt} function changes the ownership and access permission |
|
|
of the slave pseudo-terminal device corresponding to the master |
|
|
pseudo-terminal device associated with the file descriptor |
|
|
@@ -1985,6 +2092,13 @@ |
|
|
@comment stdlib.h |
|
|
@comment SVID, XPG4.2 |
|
|
@deftypefun int unlockpt (int @var{filedes}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd}}@acunsafe{@acsmem{} @acsfd{}}} |
|
|
+@c unlockpt @ascuheap/bsd @acsmem @acsfd |
|
|
+@c /bsd |
|
|
+@c ptsname_r dup @ascuheap @acsmem @acsfd |
|
|
+@c revoke ok (syscall) |
|
|
+@c /linux |
|
|
+@c ioctl dup ok |
|
|
The @code{unlockpt} function unlocks the slave pseudo-terminal device |
|
|
corresponding to the master pseudo-terminal device associated with the |
|
|
file descriptor @var{filedes}. On many systems, the slave can only be |
|
|
@@ -2008,6 +2122,9 @@ |
|
|
@comment stdlib.h |
|
|
@comment SVID, XPG4.2 |
|
|
@deftypefun {char *} ptsname (int @var{filedes}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:ptsname}}@asunsafe{@ascuheap{/bsd}}@acunsafe{@acsmem{} @acsfd{}}} |
|
|
+@c ptsname @mtasurace:ptsname @ascuheap/bsd @acsmem @acsfd |
|
|
+@c ptsname_r dup @ascuheap/bsd @acsmem @acsfd |
|
|
If the file descriptor @var{filedes} is associated with a |
|
|
master pseudo-terminal device, the @code{ptsname} function returns a |
|
|
pointer to a statically-allocated, null-terminated string containing the |
|
|
@@ -2018,6 +2135,37 @@ |
|
|
@comment stdlib.h |
|
|
@comment GNU |
|
|
@deftypefun int ptsname_r (int @var{filedes}, char *@var{buf}, size_t @var{len}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{/bsd}}@acunsafe{@acsmem{} @acsfd{}}} |
|
|
+@c ptsname_r @ascuheap/bsd @acsmem @acsfd |
|
|
+@c /hurd |
|
|
+@c term_get_peername ok |
|
|
+@c strlen dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c /bsd |
|
|
+@c isatty dup ok |
|
|
+@c strlen dup ok |
|
|
+@c ttyname_r dup @ascuheap @acsmem @acsfd |
|
|
+@c stat dup ok |
|
|
+@c /linux |
|
|
+@c ptsname_internal ok |
|
|
+@c isatty dup ok |
|
|
+@c ioctl dup ok |
|
|
+@c strlen dup ok |
|
|
+@c itoa_word dup ok |
|
|
+@c stpcpy dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c fxstat64 dup ok |
|
|
+@c MASTER_P ok |
|
|
+@c major ok |
|
|
+@c gnu_dev_major ok |
|
|
+@c minor ok |
|
|
+@c gnu_dev_minor ok |
|
|
+@c minor dup ok |
|
|
+@c xstat64 dup ok |
|
|
+@c S_ISCHR dup ok |
|
|
+@c SLAVE_P ok |
|
|
+@c major dup ok |
|
|
+@c minor dup ok |
|
|
The @code{ptsname_r} function is similar to the @code{ptsname} function |
|
|
except that it places its result into the user-specified buffer starting |
|
|
at @var{buf} with length @var{len}. |
|
|
@@ -2083,6 +2231,22 @@ |
|
|
@comment pty.h |
|
|
@comment BSD |
|
|
@deftypefun int openpty (int *@var{amaster}, int *@var{aslave}, char *@var{name}, const struct termios *@var{termp}, const struct winsize *@var{winp}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c openpty @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c getpt @acsfd |
|
|
+@c grantpt @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c unlockpt dup @ascuheap/bsd @acsmem @acsfd |
|
|
+@c openpty:pts_name @acsuheap @acsmem @acsfd |
|
|
+@c ptsname_r dup @ascuheap/bsd @acsmem @acsfd |
|
|
+@c realloc dup @acsuheap @acsmem |
|
|
+@c malloc dup @acsuheap @acsmem |
|
|
+@c free dup @acsuheap @acsmem |
|
|
+@c open dup @acsfd |
|
|
+@c free dup @acsuheap @acsmem |
|
|
+@c tcsetattr dup ok |
|
|
+@c ioctl dup ok |
|
|
+@c strcpy dup ok |
|
|
+@c close dup @acsfd |
|
|
This function allocates and opens a pseudo-terminal pair, returning the |
|
|
file descriptor for the master in @var{*amaster}, and the file |
|
|
descriptor for the slave in @var{*aslave}. If the argument @var{name} |
|
|
@@ -2114,6 +2278,16 @@ |
|
|
@comment pty.h |
|
|
@comment BSD |
|
|
@deftypefun int forkpty (int *@var{amaster}, char *@var{name}, const struct termios *@var{termp}, const struct winsize *@var{winp}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c forkpty @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c openpty dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c fork dup @aculock |
|
|
+@c close dup @acsfd |
|
|
+@c /child |
|
|
+@c close dup @acsfd |
|
|
+@c login_tty dup @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c _exit dup ok |
|
|
+@c close dup @acsfd |
|
|
This function is similar to the @code{openpty} function, but in |
|
|
addition, forks a new process (@pxref{Creating a Process}) and makes the |
|
|
newly opened slave pseudo-terminal device the controlling terminal |
|
|
diff -urN glibc-2.17-c758a686/manual/texinfo.tex glibc-2.17-c758a686/manual/texinfo.tex |
|
|
--- glibc-2.17-c758a686/manual/texinfo.tex 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/texinfo.tex 2014-09-12 16:10:06.047792712 -0400 |
|
|
@@ -3,11 +3,11 @@ |
|
|
% Load plain if necessary, i.e., if running under initex. |
|
|
\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi |
|
|
% |
|
|
-\def\texinfoversion{2012-01-19.16} |
|
|
+\def\texinfoversion{2014-05-05.10} |
|
|
% |
|
|
% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, |
|
|
% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, |
|
|
-% 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. |
|
|
+% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc. |
|
|
% |
|
|
% This texinfo.tex file is free software: you can redistribute it and/or |
|
|
% modify it under the terms of the GNU General Public License as |
|
|
@@ -24,13 +24,14 @@ |
|
|
% |
|
|
% As a special exception, when this file is read by TeX when processing |
|
|
% a Texinfo source document, you may use the result without |
|
|
-% restriction. (This has been our intent since Texinfo was invented.) |
|
|
+% restriction. This Exception is an additional permission under section 7 |
|
|
+% of the GNU General Public License, version 3 ("GPLv3"). |
|
|
% |
|
|
% Please try the latest version of texinfo.tex before submitting bug |
|
|
% reports; you can get the latest version from: |
|
|
-% http://www.gnu.org/software/texinfo/ (the Texinfo home page), or |
|
|
-% ftp://tug.org/tex/texinfo.tex |
|
|
-% (and all CTAN mirrors, see http://www.ctan.org). |
|
|
+% http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or |
|
|
+% http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or |
|
|
+% http://www.gnu.org/software/texinfo/ (the Texinfo home page) |
|
|
% The texinfo.tex in any given distribution could well be out |
|
|
% of date, so if that's what you're using, please check. |
|
|
% |
|
|
@@ -280,9 +281,9 @@ |
|
|
\toks6=\expandafter{\prevsectiondefs}% |
|
|
\toks8=\expandafter{\lastcolordefs}% |
|
|
\mark{% |
|
|
- \the\toks0 \the\toks2 |
|
|
- \noexpand\or \the\toks4 \the\toks6 |
|
|
- \noexpand\else \the\toks8 |
|
|
+ \the\toks0 \the\toks2 % 0: top marks (\last...) |
|
|
+ \noexpand\or \the\toks4 \the\toks6 % 1: bottom marks (default, \prev...) |
|
|
+ \noexpand\else \the\toks8 % 2: color marks |
|
|
}% |
|
|
} |
|
|
% \topmark doesn't work for the very first chapter (after the title |
|
|
@@ -321,10 +322,13 @@ |
|
|
% |
|
|
% Do this outside of the \shipout so @code etc. will be expanded in |
|
|
% the headline as they should be, not taken literally (outputting ''code). |
|
|
+ \def\commmonheadfootline{\let\hsize=\pagewidth \texinfochars} |
|
|
+ % |
|
|
\ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi |
|
|
- \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% |
|
|
+ \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}% |
|
|
+ % |
|
|
\ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi |
|
|
- \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% |
|
|
+ \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}% |
|
|
% |
|
|
{% |
|
|
% Have to do this stuff outside the \shipout because we want it to |
|
|
@@ -594,7 +598,7 @@ |
|
|
\def\:{\spacefactor=1000 } |
|
|
|
|
|
% @* forces a line break. |
|
|
-\def\*{\hfil\break\hbox{}\ignorespaces} |
|
|
+\def\*{\unskip\hfil\break\hbox{}\ignorespaces} |
|
|
|
|
|
% @/ allows a line break. |
|
|
\let\/=\allowbreak |
|
|
@@ -887,7 +891,7 @@ |
|
|
\def\popthisfilestack{\errthisfilestackempty} |
|
|
\def\errthisfilestackempty{\errmessage{Internal error: |
|
|
the stack of filenames is empty.}} |
|
|
- |
|
|
+% |
|
|
\def\thisfile{} |
|
|
|
|
|
% @center line |
|
|
@@ -895,36 +899,46 @@ |
|
|
% |
|
|
\parseargdef\center{% |
|
|
\ifhmode |
|
|
- \let\next\centerH |
|
|
+ \let\centersub\centerH |
|
|
\else |
|
|
- \let\next\centerV |
|
|
+ \let\centersub\centerV |
|
|
\fi |
|
|
- \next{\hfil \ignorespaces#1\unskip \hfil}% |
|
|
+ \centersub{\hfil \ignorespaces#1\unskip \hfil}% |
|
|
+ \let\centersub\relax % don't let the definition persist, just in case |
|
|
} |
|
|
-\def\centerH#1{% |
|
|
- {% |
|
|
- \hfil\break |
|
|
- \advance\hsize by -\leftskip |
|
|
- \advance\hsize by -\rightskip |
|
|
- \line{#1}% |
|
|
- \break |
|
|
- }% |
|
|
+\def\centerH#1{{% |
|
|
+ \hfil\break |
|
|
+ \advance\hsize by -\leftskip |
|
|
+ \advance\hsize by -\rightskip |
|
|
+ \line{#1}% |
|
|
+ \break |
|
|
+}} |
|
|
+% |
|
|
+\newcount\centerpenalty |
|
|
+\def\centerV#1{% |
|
|
+ % The idea here is the same as in \startdefun, \cartouche, etc.: if |
|
|
+ % @center is the first thing after a section heading, we need to wipe |
|
|
+ % out the negative parskip inserted by \sectionheading, but still |
|
|
+ % prevent a page break here. |
|
|
+ \centerpenalty = \lastpenalty |
|
|
+ \ifnum\centerpenalty>10000 \vskip\parskip \fi |
|
|
+ \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi |
|
|
+ \line{\kern\leftskip #1\kern\rightskip}% |
|
|
} |
|
|
-\def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} |
|
|
|
|
|
% @sp n outputs n lines of vertical space |
|
|
- |
|
|
+% |
|
|
\parseargdef\sp{\vskip #1\baselineskip} |
|
|
|
|
|
% @comment ...line which is ignored... |
|
|
% @c is the same as @comment |
|
|
% @ignore ... @end ignore is another way to write a comment |
|
|
- |
|
|
+% |
|
|
\def\comment{\begingroup \catcode`\^^M=\other% |
|
|
\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% |
|
|
\commentxxx} |
|
|
{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} |
|
|
- |
|
|
+% |
|
|
\let\c=\comment |
|
|
|
|
|
% @paragraphindent NCHARS |
|
|
@@ -1097,7 +1111,7 @@ |
|
|
% for display in the outlines, and in other places. Thus, we have to |
|
|
% double any backslashes. Otherwise, a name like "\node" will be |
|
|
% interpreted as a newline (\n), followed by o, d, e. Not good. |
|
|
-% |
|
|
+% |
|
|
% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and |
|
|
% related messages. The final outcome is that it is up to the TeX user |
|
|
% to double the backslashes and otherwise make the string valid, so |
|
|
@@ -1107,7 +1121,7 @@ |
|
|
% #1 is a control sequence in which to do the replacements, |
|
|
% which we \xdef. |
|
|
\def\txiescapepdf#1{% |
|
|
- \ifx\pdfescapestring\relax |
|
|
+ \ifx\pdfescapestring\thisisundefined |
|
|
% No primitive available; should we give a warning or log? |
|
|
% Many times it won't matter. |
|
|
\else |
|
|
@@ -1124,10 +1138,12 @@ |
|
|
|
|
|
\ifpdf |
|
|
% |
|
|
- % Color manipulation macros based on pdfcolor.tex, |
|
|
+ % Color manipulation macros using ideas from pdfcolor.tex, |
|
|
% except using rgb instead of cmyk; the latter is said to render as a |
|
|
% very dark gray on-screen and a very dark halftone in print, instead |
|
|
- % of actual black. |
|
|
+ % of actual black. The dark red here is dark enough to print on paper as |
|
|
+ % nearly black, but still distinguishable for online viewing. We use |
|
|
+ % black by default, though. |
|
|
\def\rgbDarkRed{0.50 0.09 0.12} |
|
|
\def\rgbBlack{0 0 0} |
|
|
% |
|
|
@@ -1173,8 +1189,8 @@ |
|
|
% |
|
|
% #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). |
|
|
\def\dopdfimage#1#2#3{% |
|
|
- \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% |
|
|
- \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% |
|
|
+ \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% |
|
|
+ \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% |
|
|
% |
|
|
% pdftex (and the PDF format) support .pdf, .png, .jpg (among |
|
|
% others). Let's try in that order, PDF first since if |
|
|
@@ -1212,8 +1228,8 @@ |
|
|
\else |
|
|
\immediate\pdfximage |
|
|
\fi |
|
|
- \ifdim \wd0 >0pt width \imagewidth \fi |
|
|
- \ifdim \wd2 >0pt height \imageheight \fi |
|
|
+ \ifdim \wd0 >0pt width \pdfimagewidth \fi |
|
|
+ \ifdim \wd2 >0pt height \pdfimageheight \fi |
|
|
\ifnum\pdftexversion<13 |
|
|
#1.\pdfimgext |
|
|
\else |
|
|
@@ -1237,10 +1253,9 @@ |
|
|
% used to mark target names; must be expandable. |
|
|
\def\pdfmkpgn#1{#1} |
|
|
% |
|
|
- % by default, use a color that is dark enough to print on paper as |
|
|
- % nearly black, but still distinguishable for online viewing. |
|
|
- \def\urlcolor{\rgbDarkRed} |
|
|
- \def\linkcolor{\rgbDarkRed} |
|
|
+ % by default, use black for everything. |
|
|
+ \def\urlcolor{\rgbBlack} |
|
|
+ \def\linkcolor{\rgbBlack} |
|
|
\def\endlink{\setcolor{\maincolor}\pdfendlink} |
|
|
% |
|
|
% Adding outlines to PDF; macros for calculating structure of outlines |
|
|
@@ -1357,12 +1372,17 @@ |
|
|
\def\skipspaces#1{\def\PP{#1}\def\D{|}% |
|
|
\ifx\PP\D\let\nextsp\relax |
|
|
\else\let\nextsp\skipspaces |
|
|
- \ifx\p\space\else\addtokens{\filename}{\PP}% |
|
|
- \advance\filenamelength by 1 |
|
|
- \fi |
|
|
+ \addtokens{\filename}{\PP}% |
|
|
+ \advance\filenamelength by 1 |
|
|
\fi |
|
|
\nextsp} |
|
|
- \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} |
|
|
+ \def\getfilename#1{% |
|
|
+ \filenamelength=0 |
|
|
+ % If we don't expand the argument now, \skipspaces will get |
|
|
+ % snagged on things like "@value{foo}". |
|
|
+ \edef\temp{#1}% |
|
|
+ \expandafter\skipspaces\temp|\relax |
|
|
+ } |
|
|
\ifnum\pdftexversion < 14 |
|
|
\let \startlink \pdfannotlink |
|
|
\else |
|
|
@@ -1459,9 +1479,6 @@ |
|
|
\def\ttsl{\setfontstyle{ttsl}} |
|
|
|
|
|
|
|
|
-% Default leading. |
|
|
-\newdimen\textleading \textleading = 13.2pt |
|
|
- |
|
|
% Set the baselineskip to #1, and the lineskip and strut size |
|
|
% correspondingly. There is no deep meaning behind these magic numbers |
|
|
% used as factors; they just match (closely enough) what Knuth defined. |
|
|
@@ -1473,6 +1490,7 @@ |
|
|
% can get a sort of poor man's double spacing by redefining this. |
|
|
\def\baselinefactor{1} |
|
|
% |
|
|
+\newdimen\textleading |
|
|
\def\setleading#1{% |
|
|
\dimen0 = #1\relax |
|
|
\normalbaselineskip = \baselinefactor\dimen0 |
|
|
@@ -1745,18 +1763,24 @@ |
|
|
\fi\fi |
|
|
|
|
|
|
|
|
-% Set the font macro #1 to the font named #2, adding on the |
|
|
-% specified font prefix (normally `cm'). |
|
|
+% Set the font macro #1 to the font named \fontprefix#2. |
|
|
% #3 is the font's design size, #4 is a scale factor, #5 is the CMap |
|
|
-% encoding (currently only OT1, OT1IT and OT1TT are allowed, pass |
|
|
-% empty to omit). |
|
|
+% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). |
|
|
+% Example: |
|
|
+% #1 = \textrm |
|
|
+% #2 = \rmshape |
|
|
+% #3 = 10 |
|
|
+% #4 = \mainmagstep |
|
|
+% #5 = OT1 |
|
|
+% |
|
|
\def\setfont#1#2#3#4#5{% |
|
|
\font#1=\fontprefix#2#3 scaled #4 |
|
|
\csname cmap#5\endcsname#1% |
|
|
} |
|
|
% This is what gets called when #5 of \setfont is empty. |
|
|
\let\cmap\gobble |
|
|
-% emacs-page end of cmaps |
|
|
+% |
|
|
+% (end of cmaps) |
|
|
|
|
|
% Use cm as the default font prefix. |
|
|
% To specify the font prefix, you must define \fontprefix |
|
|
@@ -1766,7 +1790,7 @@ |
|
|
\fi |
|
|
% Support font families that don't use the same naming scheme as CM. |
|
|
\def\rmshape{r} |
|
|
-\def\rmbshape{bx} %where the normal face is bold |
|
|
+\def\rmbshape{bx} % where the normal face is bold |
|
|
\def\bfshape{b} |
|
|
\def\bxshape{bx} |
|
|
\def\ttshape{tt} |
|
|
@@ -1781,8 +1805,7 @@ |
|
|
\def\scshape{csc} |
|
|
\def\scbshape{csc} |
|
|
|
|
|
-% Definitions for a main text size of 11pt. This is the default in |
|
|
-% Texinfo. |
|
|
+% Definitions for a main text size of 11pt. (The default in Texinfo.) |
|
|
% |
|
|
\def\definetextfontsizexi{% |
|
|
% Text fonts (11.2pt, magstep1). |
|
|
@@ -1907,7 +1930,7 @@ |
|
|
\textleading = 13.2pt % line spacing for 11pt CM |
|
|
\textfonts % reset the current fonts |
|
|
\rm |
|
|
-} % end of 11pt text font size definitions |
|
|
+} % end of 11pt text font size definitions, \definetextfontsizexi |
|
|
|
|
|
|
|
|
% Definitions to make the main text be 10pt Computer Modern, with |
|
|
@@ -2039,7 +2062,7 @@ |
|
|
\textleading = 12pt % line spacing for 10pt CM |
|
|
\textfonts % reset the current fonts |
|
|
\rm |
|
|
-} % end of 10pt text font size definitions |
|
|
+} % end of 10pt text font size definitions, \definetextfontsizex |
|
|
|
|
|
|
|
|
% We provide the user-level command |
|
|
@@ -2123,7 +2146,7 @@ |
|
|
\let\tenttsl=\secttsl |
|
|
\def\curfontsize{sec}% |
|
|
\def\lsize{subsec}\def\lllsize{reduced}% |
|
|
- \resetmathfonts \setleading{16pt}} |
|
|
+ \resetmathfonts \setleading{17pt}} |
|
|
\def\subsecfonts{% |
|
|
\let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl |
|
|
\let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc |
|
|
@@ -2254,8 +2277,6 @@ |
|
|
|
|
|
\gdef\markupsetcodequoteleft{\let`\codequoteleft} |
|
|
\gdef\markupsetcodequoteright{\let'\codequoteright} |
|
|
- |
|
|
-\gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft} |
|
|
} |
|
|
|
|
|
\let\markupsetuplqcode \markupsetcodequoteleft |
|
|
@@ -2264,6 +2285,9 @@ |
|
|
\let\markupsetuplqexample \markupsetcodequoteleft |
|
|
\let\markupsetuprqexample \markupsetcodequoteright |
|
|
% |
|
|
+\let\markupsetuplqkbd \markupsetcodequoteleft |
|
|
+\let\markupsetuprqkbd \markupsetcodequoteright |
|
|
+% |
|
|
\let\markupsetuplqsamp \markupsetcodequoteleft |
|
|
\let\markupsetuprqsamp \markupsetcodequoteright |
|
|
% |
|
|
@@ -2273,8 +2297,6 @@ |
|
|
\let\markupsetuplqverbatim \markupsetcodequoteleft |
|
|
\let\markupsetuprqverbatim \markupsetcodequoteright |
|
|
|
|
|
-\let\markupsetuplqkbd \markupsetnoligaturesquoteleft |
|
|
- |
|
|
% Allow an option to not use regular directed right quote/apostrophe |
|
|
% (char 0x27), but instead the undirected quote from cmtt (char 0x0d). |
|
|
% The undirected quote is ugly, so don't make it the default, but it |
|
|
@@ -2359,13 +2381,14 @@ |
|
|
\ifx\next,% |
|
|
\else\ifx\next-% |
|
|
\else\ifx\next.% |
|
|
+ \else\ifx\next\.% |
|
|
+ \else\ifx\next\comma% |
|
|
\else\ptexslash |
|
|
- \fi\fi\fi |
|
|
+ \fi\fi\fi\fi\fi |
|
|
\aftersmartic |
|
|
} |
|
|
|
|
|
-% like \smartslanted except unconditionally uses \ttsl, and no ic. |
|
|
-% @var is set to this for defun arguments. |
|
|
+% Unconditional use \ttsl, and no ic. @var is set to this for defuns. |
|
|
\def\ttslanted#1{{\ttsl #1}} |
|
|
|
|
|
% @cite is like \smartslanted except unconditionally use \sl. We never want |
|
|
@@ -2430,34 +2453,12 @@ |
|
|
% @samp. |
|
|
\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} |
|
|
|
|
|
-% definition of @key that produces a lozenge. Doesn't adjust to text size. |
|
|
-%\setfont\keyrm\rmshape{8}{1000}{OT1} |
|
|
-%\font\keysy=cmsy9 |
|
|
-%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% |
|
|
-% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% |
|
|
-% \vbox{\hrule\kern-0.4pt |
|
|
-% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% |
|
|
-% \kern-0.4pt\hrule}% |
|
|
-% \kern-.06em\raise0.4pt\hbox{\angleright}}}} |
|
|
- |
|
|
-% definition of @key with no lozenge. If the current font is already |
|
|
-% monospace, don't change it; that way, we respect @kbdinputstyle. But |
|
|
-% if it isn't monospace, then use \tt. |
|
|
-% |
|
|
-\def\key#1{{\setupmarkupstyle{key}% |
|
|
- \nohyphenation |
|
|
- \ifmonospace\else\tt\fi |
|
|
- #1}\null} |
|
|
- |
|
|
-% ctrl is no longer a Texinfo command. |
|
|
-\def\ctrl #1{{\tt \rawbackslash \hat}#1} |
|
|
+% @indicateurl is \samp, that is, with quotes. |
|
|
+\let\indicateurl=\samp |
|
|
|
|
|
-% @file, @option are the same as @samp. |
|
|
-\let\file=\samp |
|
|
-\let\option=\samp |
|
|
- |
|
|
-% @code is a modification of @t, |
|
|
-% which makes spaces the same size as normal in the surrounding text. |
|
|
+% @code (and similar) prints in typewriter, but with spaces the same |
|
|
+% size as normal in the surrounding text, without hyphenation, etc. |
|
|
+% This is a subroutine for that. |
|
|
\def\tclose#1{% |
|
|
{% |
|
|
% Change normal interword space to be same as for the current font. |
|
|
@@ -2480,14 +2481,14 @@ |
|
|
} |
|
|
|
|
|
% We *must* turn on hyphenation at `-' and `_' in @code. |
|
|
+% (But see \codedashfinish below.) |
|
|
% Otherwise, it is too hard to avoid overfull hboxes |
|
|
% in the Emacs manual, the Library manual, etc. |
|
|
- |
|
|
+% |
|
|
% Unfortunately, TeX uses one parameter (\hyphenchar) to control |
|
|
% both hyphenation at - and hyphenation within words. |
|
|
% We must therefore turn them both off (\tclose does that) |
|
|
-% and arrange explicitly to hyphenate at a dash. |
|
|
-% -- rms. |
|
|
+% and arrange explicitly to hyphenate at a dash. -- rms. |
|
|
{ |
|
|
\catcode`\-=\active \catcode`\_=\active |
|
|
\catcode`\'=\active \catcode`\`=\active |
|
|
@@ -2501,17 +2502,38 @@ |
|
|
\let-\codedash |
|
|
\let_\codeunder |
|
|
\else |
|
|
- \let-\realdash |
|
|
+ \let-\normaldash |
|
|
\let_\realunder |
|
|
\fi |
|
|
+ % Given -foo (with a single dash), we do not want to allow a break |
|
|
+ % after the hyphen. |
|
|
+ \global\let\codedashprev=\codedash |
|
|
+ % |
|
|
\codex |
|
|
} |
|
|
+ % |
|
|
+ \gdef\codedash{\futurelet\next\codedashfinish} |
|
|
+ \gdef\codedashfinish{% |
|
|
+ \normaldash % always output the dash character itself. |
|
|
+ % |
|
|
+ % Now, output a discretionary to allow a line break, unless |
|
|
+ % (a) the next character is a -, or |
|
|
+ % (b) the preceding character is a -. |
|
|
+ % E.g., given --posix, we do not want to allow a break after either -. |
|
|
+ % Given --foo-bar, we do want to allow a break between the - and the b. |
|
|
+ \ifx\next\codedash \else |
|
|
+ \ifx\codedashprev\codedash |
|
|
+ \else \discretionary{}{}{}\fi |
|
|
+ \fi |
|
|
+ % we need the space after the = for the case when \next itself is a |
|
|
+ % space token; it would get swallowed otherwise. As in @code{- a}. |
|
|
+ \global\let\codedashprev= \next |
|
|
+ } |
|
|
} |
|
|
- |
|
|
+\def\normaldash{-} |
|
|
+% |
|
|
\def\codex #1{\tclose{#1}\endgroup} |
|
|
|
|
|
-\def\realdash{-} |
|
|
-\def\codedash{-\discretionary{}{}{}} |
|
|
\def\codeunder{% |
|
|
% this is all so @math{@code{var_name}+1} can work. In math mode, _ |
|
|
% is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) |
|
|
@@ -2525,9 +2547,9 @@ |
|
|
} |
|
|
|
|
|
% An additional complication: the above will allow breaks after, e.g., |
|
|
-% each of the four underscores in __typeof__. This is undesirable in |
|
|
-% some manuals, especially if they don't have long identifiers in |
|
|
-% general. @allowcodebreaks provides a way to control this. |
|
|
+% each of the four underscores in __typeof__. This is bad. |
|
|
+% @allowcodebreaks provides a document-level way to turn breaking at - |
|
|
+% and _ on and off. |
|
|
% |
|
|
\newif\ifallowcodebreaks \allowcodebreakstrue |
|
|
|
|
|
@@ -2546,37 +2568,28 @@ |
|
|
\fi\fi |
|
|
} |
|
|
|
|
|
-% @uref (abbreviation for `urlref') takes an optional (comma-separated) |
|
|
-% second argument specifying the text to display and an optional third |
|
|
-% arg as text to display instead of (rather than in addition to) the url |
|
|
-% itself. First (mandatory) arg is the url. |
|
|
-% (This \urefnobreak definition isn't used now, leaving it for a while |
|
|
-% for comparison.) |
|
|
-\def\urefnobreak#1{\dourefnobreak #1,,,\finish} |
|
|
-\def\dourefnobreak#1,#2,#3,#4\finish{\begingroup |
|
|
- \unsepspaces |
|
|
- \pdfurl{#1}% |
|
|
- \setbox0 = \hbox{\ignorespaces #3}% |
|
|
- \ifdim\wd0 > 0pt |
|
|
- \unhbox0 % third arg given, show only that |
|
|
- \else |
|
|
- \setbox0 = \hbox{\ignorespaces #2}% |
|
|
- \ifdim\wd0 > 0pt |
|
|
- \ifpdf |
|
|
- \unhbox0 % PDF: 2nd arg given, show only it |
|
|
- \else |
|
|
- \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url |
|
|
- \fi |
|
|
- \else |
|
|
- \code{#1}% only url given, so show it |
|
|
- \fi |
|
|
- \fi |
|
|
- \endlink |
|
|
-\endgroup} |
|
|
+% For @command, @env, @file, @option quotes seem unnecessary, |
|
|
+% so use \code rather than \samp. |
|
|
+\let\command=\code |
|
|
+\let\env=\code |
|
|
+\let\file=\code |
|
|
+\let\option=\code |
|
|
|
|
|
-% This \urefbreak definition is the active one. |
|
|
+% @uref (abbreviation for `urlref') aka @url takes an optional |
|
|
+% (comma-separated) second argument specifying the text to display and |
|
|
+% an optional third arg as text to display instead of (rather than in |
|
|
+% addition to) the url itself. First (mandatory) arg is the url. |
|
|
+ |
|
|
+% TeX-only option to allow changing PDF output to show only the second |
|
|
+% arg (if given), and not the url (which is then just the link target). |
|
|
+\newif\ifurefurlonlylink |
|
|
+ |
|
|
+% The main macro is \urefbreak, which allows breaking at expected |
|
|
+% places within the url. (There used to be another version, which |
|
|
+% didn't support automatic breaking.) |
|
|
\def\urefbreak{\begingroup \urefcatcodes \dourefbreak} |
|
|
\let\uref=\urefbreak |
|
|
+% |
|
|
\def\dourefbreak#1{\urefbreakfinish #1,,,\finish} |
|
|
\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example |
|
|
\unsepspaces |
|
|
@@ -2585,12 +2598,19 @@ |
|
|
\ifdim\wd0 > 0pt |
|
|
\unhbox0 % third arg given, show only that |
|
|
\else |
|
|
- \setbox0 = \hbox{\ignorespaces #2}% |
|
|
+ \setbox0 = \hbox{\ignorespaces #2}% look for second arg |
|
|
\ifdim\wd0 > 0pt |
|
|
\ifpdf |
|
|
- \unhbox0 % PDF: 2nd arg given, show only it |
|
|
+ \ifurefurlonlylink |
|
|
+ % PDF plus option to not display url, show just arg |
|
|
+ \unhbox0 |
|
|
+ \else |
|
|
+ % PDF, normally display both arg and url for consistency, |
|
|
+ % visibility, if the pdf is eventually used to print, etc. |
|
|
+ \unhbox0\ (\urefcode{#1})% |
|
|
+ \fi |
|
|
\else |
|
|
- \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url |
|
|
+ \unhbox0\ (\urefcode{#1})% DVI, always show arg and url |
|
|
\fi |
|
|
\else |
|
|
\urefcode{#1}% only url given, so show it |
|
|
@@ -2630,8 +2650,10 @@ |
|
|
% we put a little stretch before and after the breakable chars, to help |
|
|
% line breaking of long url's. The unequal skips make look better in |
|
|
% cmtt at least, especially for dots. |
|
|
-\def\urefprestretch{\urefprebreak \hskip0pt plus.13em } |
|
|
-\def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } |
|
|
+\def\urefprestretchamount{.13em} |
|
|
+\def\urefpoststretchamount{.1em} |
|
|
+\def\urefprestretch{\urefprebreak \hskip0pt plus\urefprestretchamount\relax} |
|
|
+\def\urefpoststretch{\urefpostbreak \hskip0pt plus\urefprestretchamount\relax} |
|
|
% |
|
|
\def\urefcodeamp{\urefprestretch \&\urefpoststretch} |
|
|
\def\urefcodedot{\urefprestretch .\urefpoststretch} |
|
|
@@ -2692,10 +2714,6 @@ |
|
|
\let\email=\uref |
|
|
\fi |
|
|
|
|
|
-% @kbd is like @code, except that if the argument is just one @key command, |
|
|
-% then @kbd has no effect. |
|
|
-\def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}} |
|
|
- |
|
|
% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), |
|
|
% `example' (@kbd uses ttsl only inside of @example and friends), |
|
|
% or `code' (@kbd uses normal tty font always). |
|
|
@@ -2719,16 +2737,36 @@ |
|
|
% Default is `distinct'. |
|
|
\kbdinputstyle distinct |
|
|
|
|
|
+% @kbd is like @code, except that if the argument is just one @key command, |
|
|
+% then @kbd has no effect. |
|
|
+\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} |
|
|
+ |
|
|
\def\xkey{\key} |
|
|
-\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% |
|
|
-\ifx\one\xkey\ifx\threex\three \key{#2}% |
|
|
-\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi |
|
|
-\else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi} |
|
|
+\def\kbdsub#1#2#3\par{% |
|
|
+ \def\one{#1}\def\three{#3}\def\threex{??}% |
|
|
+ \ifx\one\xkey\ifx\threex\three \key{#2}% |
|
|
+ \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi |
|
|
+ \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi |
|
|
+} |
|
|
|
|
|
-% For @indicateurl, @env, @command quotes seem unnecessary, so use \code. |
|
|
-\let\indicateurl=\code |
|
|
-\let\env=\code |
|
|
-\let\command=\code |
|
|
+% definition of @key that produces a lozenge. Doesn't adjust to text size. |
|
|
+%\setfont\keyrm\rmshape{8}{1000}{OT1} |
|
|
+%\font\keysy=cmsy9 |
|
|
+%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% |
|
|
+% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% |
|
|
+% \vbox{\hrule\kern-0.4pt |
|
|
+% \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% |
|
|
+% \kern-0.4pt\hrule}% |
|
|
+% \kern-.06em\raise0.4pt\hbox{\angleright}}}} |
|
|
+ |
|
|
+% definition of @key with no lozenge. If the current font is already |
|
|
+% monospace, don't change it; that way, we respect @kbdinputstyle. But |
|
|
+% if it isn't monospace, then use \tt. |
|
|
+% |
|
|
+\def\key#1{{\setupmarkupstyle{key}% |
|
|
+ \nohyphenation |
|
|
+ \ifmonospace\else\tt\fi |
|
|
+ #1}\null} |
|
|
|
|
|
% @clicksequence{File @click{} Open ...} |
|
|
\def\clicksequence#1{\begingroup #1\endgroup} |
|
|
@@ -2836,6 +2874,9 @@ |
|
|
} |
|
|
} |
|
|
|
|
|
+% ctrl is no longer a Texinfo command, but leave this definition for fun. |
|
|
+\def\ctrl #1{{\tt \rawbackslash \hat}#1} |
|
|
+ |
|
|
% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. |
|
|
% Ignore unless FMTNAME == tex; then it is like @iftex and @tex, |
|
|
% except specified as a normal braced arg, so no newlines to worry about. |
|
|
@@ -2847,6 +2888,15 @@ |
|
|
\def\inlinefmtname{#1}% |
|
|
\ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi |
|
|
} |
|
|
+% |
|
|
+% @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if |
|
|
+% FMTNAME is tex, else ELSE-TEXT. |
|
|
+\long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish} |
|
|
+\long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{% |
|
|
+ \def\inlinefmtname{#1}% |
|
|
+ \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi |
|
|
+} |
|
|
+% |
|
|
% For raw, must switch into @tex before parsing the argument, to avoid |
|
|
% setting catcodes prematurely. Doing it this way means that, for |
|
|
% example, @inlineraw{html, foo{bar} gets a parse error instead of being |
|
|
@@ -2863,6 +2913,23 @@ |
|
|
\endgroup % close group opened by \tex. |
|
|
} |
|
|
|
|
|
+% @inlineifset{VAR, TEXT} expands TEXT if VAR is @set. |
|
|
+% |
|
|
+\long\def\inlineifset#1{\doinlineifset #1,\finish} |
|
|
+\long\def\doinlineifset#1,#2,\finish{% |
|
|
+ \def\inlinevarname{#1}% |
|
|
+ \expandafter\ifx\csname SET\inlinevarname\endcsname\relax |
|
|
+ \else\ignorespaces#2\fi |
|
|
+} |
|
|
+ |
|
|
+% @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set. |
|
|
+% |
|
|
+\long\def\inlineifclear#1{\doinlineifclear #1,\finish} |
|
|
+\long\def\doinlineifclear#1,#2,\finish{% |
|
|
+ \def\inlinevarname{#1}% |
|
|
+ \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi |
|
|
+} |
|
|
+ |
|
|
|
|
|
\message{glyphs,} |
|
|
% and logos. |
|
|
@@ -3126,12 +3193,17 @@ |
|
|
% hopefully nobody will notice/care. |
|
|
\edef\ecsize{\csname\curfontsize ecsize\endcsname}% |
|
|
\edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% |
|
|
- \ifx\curfontstyle\bfstylename |
|
|
- % bold: |
|
|
- \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize |
|
|
- \else |
|
|
- % regular: |
|
|
- \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize |
|
|
+ \ifmonospace |
|
|
+ % typewriter: |
|
|
+ \font\thisecfont = ectt\ecsize \space at \nominalsize |
|
|
+ \else |
|
|
+ \ifx\curfontstyle\bfstylename |
|
|
+ % bold: |
|
|
+ \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize |
|
|
+ \else |
|
|
+ % regular: |
|
|
+ \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize |
|
|
+ \fi |
|
|
\fi |
|
|
\thisecfont |
|
|
} |
|
|
@@ -3244,6 +3316,20 @@ |
|
|
\finishedtitlepagetrue |
|
|
} |
|
|
|
|
|
+% Settings used for typesetting titles: no hyphenation, no indentation, |
|
|
+% don't worry much about spacing, ragged right. This should be used |
|
|
+% inside a \vbox, and fonts need to be set appropriately first. Because |
|
|
+% it is always used for titles, nothing else, we call \rmisbold. \par |
|
|
+% should be specified before the end of the \vbox, since a vbox is a group. |
|
|
+% |
|
|
+\def\raggedtitlesettings{% |
|
|
+ \rmisbold |
|
|
+ \hyphenpenalty=10000 |
|
|
+ \parindent=0pt |
|
|
+ \tolerance=5000 |
|
|
+ \ptexraggedright |
|
|
+} |
|
|
+ |
|
|
% Macros to be used within @titlepage: |
|
|
|
|
|
\let\subtitlerm=\tenrm |
|
|
@@ -3251,7 +3337,7 @@ |
|
|
|
|
|
\parseargdef\title{% |
|
|
\checkenv\titlepage |
|
|
- \leftline{\titlefonts\rmisbold #1} |
|
|
+ \vbox{\titlefonts \raggedtitlesettings #1\par}% |
|
|
% print a rule at the page bottom also. |
|
|
\finishedtitlepagefalse |
|
|
\vskip4pt \hrule height 4pt width \hsize \vskip4pt |
|
|
@@ -3599,7 +3685,7 @@ |
|
|
\parskip=\smallskipamount |
|
|
\ifdim\parskip=0pt \parskip=2pt \fi |
|
|
% |
|
|
- % Try typesetting the item mark that if the document erroneously says |
|
|
+ % Try typesetting the item mark so that if the document erroneously says |
|
|
% something like @itemize @samp (intending @table), there's an error |
|
|
% right away at the @itemize. It's not the best error message in the |
|
|
% world, but it's better than leaving it to the @item. This means if |
|
|
@@ -3850,18 +3936,22 @@ |
|
|
|
|
|
% multitable-only commands. |
|
|
% |
|
|
-% @headitem starts a heading row, which we typeset in bold. |
|
|
-% Assignments have to be global since we are inside the implicit group |
|
|
-% of an alignment entry. \everycr resets \everytab so we don't have to |
|
|
+% @headitem starts a heading row, which we typeset in bold. Assignments |
|
|
+% have to be global since we are inside the implicit group of an |
|
|
+% alignment entry. \everycr below resets \everytab so we don't have to |
|
|
% undo it ourselves. |
|
|
\def\headitemfont{\b}% for people to use in the template row; not changeable |
|
|
\def\headitem{% |
|
|
\checkenv\multitable |
|
|
\crcr |
|
|
+ \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings |
|
|
\global\everytab={\bf}% can't use \headitemfont since the parsing differs |
|
|
\the\everytab % for the first item |
|
|
}% |
|
|
% |
|
|
+% default for tables with no headings. |
|
|
+\let\headitemcrhook=\relax |
|
|
+% |
|
|
% A \tab used to include \hskip1sp. But then the space in a template |
|
|
% line is not enough. That is bad. So let's go back to just `&' until |
|
|
% we again encounter the problem the 1sp was intended to solve. |
|
|
@@ -3892,15 +3982,15 @@ |
|
|
% |
|
|
\everycr = {% |
|
|
\noalign{% |
|
|
- \global\everytab={}% |
|
|
+ \global\everytab={}% Reset from possible headitem. |
|
|
\global\colcount=0 % Reset the column counter. |
|
|
- % Check for saved footnotes, etc. |
|
|
+ % |
|
|
+ % Check for saved footnotes, etc.: |
|
|
\checkinserts |
|
|
- % Keeps underfull box messages off when table breaks over pages. |
|
|
- %\filbreak |
|
|
- % Maybe so, but it also creates really weird page breaks when the |
|
|
- % table breaks over pages. Wouldn't \vfil be better? Wait until the |
|
|
- % problem manifests itself, so it can be fixed for real --karl. |
|
|
+ % |
|
|
+ % Perhaps a \nobreak, then reset: |
|
|
+ \headitemcrhook |
|
|
+ \global\let\headitemcrhook=\relax |
|
|
}% |
|
|
}% |
|
|
% |
|
|
@@ -4139,7 +4229,7 @@ |
|
|
\def\value{\begingroup\makevalueexpandable\valuexxx} |
|
|
\def\valuexxx#1{\expandablevalue{#1}\endgroup} |
|
|
{ |
|
|
- \catcode`\- = \active \catcode`\_ = \active |
|
|
+ \catcode`\-=\active \catcode`\_=\active |
|
|
% |
|
|
\gdef\makevalueexpandable{% |
|
|
\let\value = \expandablevalue |
|
|
@@ -4148,7 +4238,7 @@ |
|
|
% ..., but we might end up with active ones in the argument if |
|
|
% we're called from @code, as @code{@value{foo-bar_}}, though. |
|
|
% So \let them to their normal equivalents. |
|
|
- \let-\realdash \let_\normalunderscore |
|
|
+ \let-\normaldash \let_\normalunderscore |
|
|
} |
|
|
} |
|
|
|
|
|
@@ -4160,6 +4250,11 @@ |
|
|
% it will fail (although perhaps we could fix that with sufficient work |
|
|
% to do a one-level expansion on the result, instead of complete). |
|
|
% |
|
|
+% Unfortunately, this has the consequence that when _ is in the *value* |
|
|
+% of an @set, it does not print properly in the roman fonts (get the cmr |
|
|
+% dot accent at position 126 instead). No fix comes to mind, and it's |
|
|
+% been this way since 2003 or earlier, so just ignore it. |
|
|
+% |
|
|
\def\expandablevalue#1{% |
|
|
\expandafter\ifx\csname SET#1\endcsname\relax |
|
|
{[No value for ``#1'']}% |
|
|
@@ -4172,7 +4267,8 @@ |
|
|
% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined |
|
|
% with @set. |
|
|
% |
|
|
-% To get special treatment of `@end ifset,' call \makeond and the redefine. |
|
|
+% To get the special treatment we need for `@end ifset,' we call |
|
|
+% \makecond and then redefine. |
|
|
% |
|
|
\makecond{ifset} |
|
|
\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} |
|
|
@@ -4188,7 +4284,7 @@ |
|
|
} |
|
|
\def\ifsetfail{\doignore{ifset}} |
|
|
|
|
|
-% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been |
|
|
+% @ifclear VAR ... @end executes the `...' iff VAR has never been |
|
|
% defined with @set, or has been undefined with @clear. |
|
|
% |
|
|
% The `\else' inside the `\doifset' parameter is a trick to reuse the |
|
|
@@ -4199,6 +4295,35 @@ |
|
|
\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} |
|
|
\def\ifclearfail{\doignore{ifclear}} |
|
|
|
|
|
+% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written |
|
|
+% without the @) is in fact defined. We can only feasibly check at the |
|
|
+% TeX level, so something like `mathcode' is going to considered |
|
|
+% defined even though it is not a Texinfo command. |
|
|
+% |
|
|
+\makecond{ifcommanddefined} |
|
|
+\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} |
|
|
+% |
|
|
+\def\doifcmddefined#1#2{{% |
|
|
+ \makevalueexpandable |
|
|
+ \let\next=\empty |
|
|
+ \expandafter\ifx\csname #2\endcsname\relax |
|
|
+ #1% If not defined, \let\next as above. |
|
|
+ \fi |
|
|
+ \expandafter |
|
|
+ }\next |
|
|
+} |
|
|
+\def\ifcmddefinedfail{\doignore{ifcommanddefined}} |
|
|
+ |
|
|
+% @ifcommandnotdefined CMD ... handled similar to @ifclear above. |
|
|
+\makecond{ifcommandnotdefined} |
|
|
+\def\ifcommandnotdefined{% |
|
|
+ \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} |
|
|
+\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} |
|
|
+ |
|
|
+% Set the `txicommandconditionals' variable, so documents have a way to |
|
|
+% test if the @ifcommand...defined conditionals are available. |
|
|
+\set txicommandconditionals |
|
|
+ |
|
|
% @dircategory CATEGORY -- specify a category of the dir file |
|
|
% which this file should belong to. Ignore this in TeX. |
|
|
\let\dircategory=\comment |
|
|
@@ -4307,7 +4432,7 @@ |
|
|
% complicated, when \tex is in effect and \{ is a \delimiter again. |
|
|
% We can't use \lbracecmd and \rbracecmd because texindex assumes |
|
|
% braces and backslashes are used only as delimiters. Perhaps we |
|
|
- % should define @lbrace and @rbrace commands a la @comma. |
|
|
+ % should use @lbracechar and @rbracechar? |
|
|
\def\{{{\tt\char123}}% |
|
|
\def\}{{\tt\char125}}% |
|
|
% |
|
|
@@ -4328,8 +4453,7 @@ |
|
|
% @end macro |
|
|
% ... |
|
|
% @funindex commtest |
|
|
- % |
|
|
- % The above is not enough to reproduce the bug, but it gives the flavor. |
|
|
+ % This is not enough to reproduce the bug, but it gives the flavor. |
|
|
% |
|
|
% Sample whatsit resulting: |
|
|
% .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} |
|
|
@@ -4435,6 +4559,7 @@ |
|
|
\definedummyword\guillemetright |
|
|
\definedummyword\guilsinglleft |
|
|
\definedummyword\guilsinglright |
|
|
+ \definedummyword\lbracechar |
|
|
\definedummyword\leq |
|
|
\definedummyword\minus |
|
|
\definedummyword\ogonek |
|
|
@@ -4447,6 +4572,7 @@ |
|
|
\definedummyword\quoteleft |
|
|
\definedummyword\quoteright |
|
|
\definedummyword\quotesinglbase |
|
|
+ \definedummyword\rbracechar |
|
|
\definedummyword\result |
|
|
\definedummyword\textdegree |
|
|
% |
|
|
@@ -4498,6 +4624,7 @@ |
|
|
\definedummyword\t |
|
|
% |
|
|
% Commands that take arguments. |
|
|
+ \definedummyword\abbr |
|
|
\definedummyword\acronym |
|
|
\definedummyword\anchor |
|
|
\definedummyword\cite |
|
|
@@ -4509,7 +4636,9 @@ |
|
|
\definedummyword\emph |
|
|
\definedummyword\env |
|
|
\definedummyword\file |
|
|
+ \definedummyword\image |
|
|
\definedummyword\indicateurl |
|
|
+ \definedummyword\inforef |
|
|
\definedummyword\kbd |
|
|
\definedummyword\key |
|
|
\definedummyword\math |
|
|
@@ -4525,8 +4654,21 @@ |
|
|
\definedummyword\verb |
|
|
\definedummyword\w |
|
|
\definedummyword\xref |
|
|
+ % |
|
|
+ % Consider: |
|
|
+ % @macro mkind{arg1,arg2} |
|
|
+ % @cindex \arg2\ |
|
|
+ % @end macro |
|
|
+ % @mkind{foo, bar} |
|
|
+ % The space after the comma will end up in the temporary definition |
|
|
+ % that we make for arg2 (see \parsemargdef ff.). We want all this to be |
|
|
+ % expanded for the sake of the index, so we end up just seeing "bar". |
|
|
+ \let\xeatspaces = \eatspaces |
|
|
} |
|
|
|
|
|
+% For testing: output @{ and @} in index sort strings as \{ and \}. |
|
|
+\newif\ifusebracesinindexes |
|
|
+ |
|
|
% \indexnofonts is used when outputting the strings to sort the index |
|
|
% by, and when constructing control sequence names. It eliminates all |
|
|
% control sequences and just writes whatever the best ASCII sort string |
|
|
@@ -4555,8 +4697,16 @@ |
|
|
% Unfortunately, texindex is not prepared to handle braces in the |
|
|
% content at all. So for index sorting, we map @{ and @} to strings |
|
|
% starting with |, since that ASCII character is between ASCII { and }. |
|
|
- \def\{{|a}% |
|
|
- \def\}{|b}% |
|
|
+ \ifusebracesinindexes |
|
|
+ \def\lbracechar{\lbracecmd}% |
|
|
+ \def\rbracechar{\rbracecmd}% |
|
|
+ \else |
|
|
+ \def\lbracechar{|a}% |
|
|
+ \def\rbracechar{|b}% |
|
|
+ \fi |
|
|
+ \let\{=\lbracechar |
|
|
+ \let\}=\rbracechar |
|
|
+ % |
|
|
% |
|
|
% Non-English letters. |
|
|
\def\AA{AA}% |
|
|
@@ -4732,10 +4882,9 @@ |
|
|
% |
|
|
% ..., ready, GO: |
|
|
% |
|
|
-\def\safewhatsit#1{% |
|
|
-\ifhmode |
|
|
+\def\safewhatsit#1{\ifhmode |
|
|
#1% |
|
|
-\else |
|
|
+ \else |
|
|
% \lastskip and \lastpenalty cannot both be nonzero simultaneously. |
|
|
\whatsitskip = \lastskip |
|
|
\edef\lastskipmacro{\the\lastskip}% |
|
|
@@ -4759,7 +4908,6 @@ |
|
|
% to re-insert the same penalty (values >10000 are used for various |
|
|
% signals); since we just inserted a non-discardable item, any |
|
|
% following glue (such as a \parskip) would be a breakpoint. For example: |
|
|
- % |
|
|
% @deffn deffn-whatever |
|
|
% @vindex index-whatever |
|
|
% Description. |
|
|
@@ -4772,8 +4920,7 @@ |
|
|
% (the whatsit from the \write), so we must insert a \nobreak. |
|
|
\nobreak\vskip\whatsitskip |
|
|
\fi |
|
|
-\fi |
|
|
-} |
|
|
+\fi} |
|
|
|
|
|
% The index entry written in the file actually looks like |
|
|
% \entry {sortstring}{page}{topic} |
|
|
@@ -5520,14 +5667,6 @@ |
|
|
|
|
|
% Define @majorheading, @heading and @subheading |
|
|
|
|
|
-% NOTE on use of \vbox for chapter headings, section headings, and such: |
|
|
-% 1) We use \vbox rather than the earlier \line to permit |
|
|
-% overlong headings to fold. |
|
|
-% 2) \hyphenpenalty is set to 10000 because hyphenation in a |
|
|
-% heading is obnoxious; this forbids it. |
|
|
-% 3) Likewise, headings look best if no \parindent is used, and |
|
|
-% if justification is not attempted. Hence \raggedright. |
|
|
- |
|
|
\def\majorheading{% |
|
|
{\advance\chapheadingskip by 10pt \chapbreak }% |
|
|
\parsearg\chapheadingzzz |
|
|
@@ -5535,10 +5674,8 @@ |
|
|
|
|
|
\def\chapheading{\chapbreak \parsearg\chapheadingzzz} |
|
|
\def\chapheadingzzz#1{% |
|
|
- {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 |
|
|
- \parindent=0pt\ptexraggedright |
|
|
- \rmisbold #1\hfill}}% |
|
|
- \bigskip \par\penalty 200\relax |
|
|
+ \vbox{\chapfonts \raggedtitlesettings #1\par}% |
|
|
+ \nobreak\bigskip \nobreak |
|
|
\suppressfirstparagraphindent |
|
|
} |
|
|
|
|
|
@@ -5697,8 +5834,7 @@ |
|
|
% |
|
|
% Typeset the actual heading. |
|
|
\nobreak % Avoid page breaks at the interline glue. |
|
|
- \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright |
|
|
- \hangindent=\wd0 \centerparametersmaybe |
|
|
+ \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe |
|
|
\unhbox0 #1\par}% |
|
|
}% |
|
|
\nobreak\bigskip % no page break after a chapter title |
|
|
@@ -5720,18 +5856,18 @@ |
|
|
\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} |
|
|
% |
|
|
\def\unnchfopen #1{% |
|
|
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 |
|
|
- \parindent=0pt\ptexraggedright |
|
|
- \rmisbold #1\hfill}}\bigskip \par\nobreak |
|
|
+ \chapoddpage |
|
|
+ \vbox{\chapfonts \raggedtitlesettings #1\par}% |
|
|
+ \nobreak\bigskip\nobreak |
|
|
} |
|
|
\def\chfopen #1#2{\chapoddpage {\chapfonts |
|
|
\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% |
|
|
\par\penalty 5000 % |
|
|
} |
|
|
\def\centerchfopen #1{% |
|
|
-\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 |
|
|
- \parindent=0pt |
|
|
- \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak |
|
|
+ \chapoddpage |
|
|
+ \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}% |
|
|
+ \nobreak\bigskip \nobreak |
|
|
} |
|
|
\def\CHAPFopen{% |
|
|
\global\let\chapmacro=\chfopen |
|
|
@@ -5822,7 +5958,7 @@ |
|
|
% |
|
|
% Now the second mark, after the heading break. No break points |
|
|
% between here and the heading. |
|
|
- \let\prevsectiondefs=\lastsectiondefs |
|
|
+ \global\let\prevsectiondefs=\lastsectiondefs |
|
|
\domark |
|
|
% |
|
|
% Only insert the space after the number if we have a section number. |
|
|
@@ -5876,14 +6012,15 @@ |
|
|
% |
|
|
% We'll almost certainly start a paragraph next, so don't let that |
|
|
% glue accumulate. (Not a breakpoint because it's preceded by a |
|
|
- % discardable item.) |
|
|
+ % discardable item.) However, when a paragraph is not started next |
|
|
+ % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out |
|
|
+ % or the negative glue will cause weirdly wrong output, typically |
|
|
+ % obscuring the section heading with something else. |
|
|
\vskip-\parskip |
|
|
% |
|
|
- % This is purely so the last item on the list is a known \penalty > |
|
|
- % 10000. This is so \startdefun can avoid allowing breakpoints after |
|
|
- % section headings. Otherwise, it would insert a valid breakpoint between: |
|
|
- % @section sec-whatever |
|
|
- % @deffn def-whatever |
|
|
+ % This is so the last item on the main vertical list is a known |
|
|
+ % \penalty > 10000, so \startdefun, etc., can recognize the situation |
|
|
+ % and do the needful. |
|
|
\penalty 10001 |
|
|
} |
|
|
|
|
|
@@ -6188,8 +6325,8 @@ |
|
|
\catcode `\|=\other |
|
|
\catcode `\<=\other |
|
|
\catcode `\>=\other |
|
|
- \catcode`\`=\other |
|
|
- \catcode`\'=\other |
|
|
+ \catcode `\`=\other |
|
|
+ \catcode `\'=\other |
|
|
\escapechar=`\\ |
|
|
% |
|
|
% ' is active in math mode (mathcode"8000). So reset it, and all our |
|
|
@@ -6213,7 +6350,7 @@ |
|
|
\let\/=\ptexslash |
|
|
\let\*=\ptexstar |
|
|
\let\t=\ptext |
|
|
- \expandafter \let\csname top\endcsname=\ptextop % outer |
|
|
+ \expandafter \let\csname top\endcsname=\ptextop % we've made it outer |
|
|
\let\frenchspacing=\plainfrenchspacing |
|
|
% |
|
|
\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% |
|
|
@@ -6297,13 +6434,11 @@ |
|
|
% side, and for 6pt waste from |
|
|
% each corner char, and rule thickness |
|
|
\normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip |
|
|
- % Flag to tell @lisp, etc., not to narrow margin. |
|
|
- \let\nonarrowing = t% |
|
|
% |
|
|
% If this cartouche directly follows a sectioning command, we need the |
|
|
% \parskip glue (backspaced over by default) or the cartouche can |
|
|
% collide with the section heading. |
|
|
- \ifnum\lastpenalty>10000 \vskip\parskip \fi |
|
|
+ \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi |
|
|
% |
|
|
\vbox\bgroup |
|
|
\baselineskip=0pt\parskip=0pt\lineskip=0pt |
|
|
@@ -6338,7 +6473,7 @@ |
|
|
\newdimen\nonfillparindent |
|
|
\def\nonfillstart{% |
|
|
\aboveenvbreak |
|
|
- \hfuzz = 12pt % Don't be fussy |
|
|
+ \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy |
|
|
\sepspaces % Make spaces be word-separators rather than space tokens. |
|
|
\let\par = \lisppar % don't ignore blank lines |
|
|
\obeylines % each line of input is a line of output |
|
|
@@ -6465,9 +6600,13 @@ |
|
|
|
|
|
|
|
|
% @raggedright does more-or-less normal line breaking but no right |
|
|
-% justification. From plain.tex. |
|
|
+% justification. From plain.tex. Don't stretch around special |
|
|
+% characters in urls in this environment, since the stretch at the right |
|
|
+% should be enough. |
|
|
\envdef\raggedright{% |
|
|
- \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax |
|
|
+ \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax |
|
|
+ \def\urefprestretchamount{0pt}% |
|
|
+ \def\urefpoststretchamount{0pt}% |
|
|
} |
|
|
\let\Eraggedright\par |
|
|
|
|
|
@@ -6496,16 +6635,9 @@ |
|
|
\makedispenvdef{quotation}{\quotationstart} |
|
|
% |
|
|
\def\quotationstart{% |
|
|
- {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip |
|
|
- \parindent=0pt |
|
|
- % |
|
|
- % @cartouche defines \nonarrowing to inhibit narrowing at next level down. |
|
|
+ \indentedblockstart % same as \indentedblock, but increase right margin too. |
|
|
\ifx\nonarrowing\relax |
|
|
- \advance\leftskip by \lispnarrowing |
|
|
\advance\rightskip by \lispnarrowing |
|
|
- \exdentamount = \lispnarrowing |
|
|
- \else |
|
|
- \let\nonarrowing = \relax |
|
|
\fi |
|
|
\parsearg\quotationlabel |
|
|
} |
|
|
@@ -6531,6 +6663,32 @@ |
|
|
\fi |
|
|
} |
|
|
|
|
|
+% @indentedblock is like @quotation, but indents only on the left and |
|
|
+% has no optional argument. |
|
|
+% |
|
|
+\makedispenvdef{indentedblock}{\indentedblockstart} |
|
|
+% |
|
|
+\def\indentedblockstart{% |
|
|
+ {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip |
|
|
+ \parindent=0pt |
|
|
+ % |
|
|
+ % @cartouche defines \nonarrowing to inhibit narrowing at next level down. |
|
|
+ \ifx\nonarrowing\relax |
|
|
+ \advance\leftskip by \lispnarrowing |
|
|
+ \exdentamount = \lispnarrowing |
|
|
+ \else |
|
|
+ \let\nonarrowing = \relax |
|
|
+ \fi |
|
|
+} |
|
|
+ |
|
|
+% Keep a nonzero parskip for the environment, since we're doing normal filling. |
|
|
+% |
|
|
+\def\Eindentedblock{% |
|
|
+ \par |
|
|
+ {\parskip=0pt \afterenvbreak}% |
|
|
+} |
|
|
+\def\Esmallindentedblock{\Eindentedblock} |
|
|
+ |
|
|
|
|
|
% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>} |
|
|
% If we want to allow any <char> as delimiter, |
|
|
@@ -7009,7 +7167,10 @@ |
|
|
\df \sl \hyphenchar\font=0 |
|
|
% |
|
|
% On the other hand, if an argument has two dashes (for instance), we |
|
|
- % want a way to get ttsl. Let's try @var for that. |
|
|
+ % want a way to get ttsl. We used to recommend @var for that, so |
|
|
+ % leave the code in, but it's strange for @var to lead to typewriter. |
|
|
+ % Nowadays we recommend @code, since the difference between a ttsl hyphen |
|
|
+ % and a tt hyphen is pretty tiny. @code also disables ?` !`. |
|
|
\def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% |
|
|
#1% |
|
|
\sl\hyphenchar\font=45 |
|
|
@@ -7338,7 +7499,7 @@ |
|
|
|
|
|
% Parse the optional {params} list. Set up \paramno and \paramlist |
|
|
% so \defmacro knows what to do. Define \macarg.BLAH for each BLAH |
|
|
-% in the params list to some hook where the argument si to be expanded. If |
|
|
+% in the params list to some hook where the argument is to be expanded. If |
|
|
% there are less than 10 arguments that hook is to be replaced by ##N where N |
|
|
% is the position in that list, that is to say the macro arguments are to be |
|
|
% defined `a la TeX in the macro body. |
|
|
@@ -7793,7 +7954,7 @@ |
|
|
\fi\fi |
|
|
} |
|
|
|
|
|
- |
|
|
+% |
|
|
% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is |
|
|
% the node name, #2 the name of the Info cross-reference, #3 the printed |
|
|
% node name, #4 the name of the Info file, #5 the name of the printed |
|
|
@@ -7803,16 +7964,21 @@ |
|
|
\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} |
|
|
\def\ref#1{\xrefX[#1,,,,,,,]} |
|
|
% |
|
|
-\newbox\topbox |
|
|
+\newbox\toprefbox |
|
|
\newbox\printedrefnamebox |
|
|
+\newbox\infofilenamebox |
|
|
\newbox\printedmanualbox |
|
|
% |
|
|
\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup |
|
|
\unsepspaces |
|
|
% |
|
|
+ % Get args without leading/trailing spaces. |
|
|
\def\printedrefname{\ignorespaces #3}% |
|
|
\setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% |
|
|
% |
|
|
+ \def\infofilename{\ignorespaces #4}% |
|
|
+ \setbox\infofilenamebox = \hbox{\infofilename\unskip}% |
|
|
+ % |
|
|
\def\printedmanual{\ignorespaces #5}% |
|
|
\setbox\printedmanualbox = \hbox{\printedmanual\unskip}% |
|
|
% |
|
|
@@ -7845,12 +8011,20 @@ |
|
|
\ifpdf |
|
|
{\indexnofonts |
|
|
\turnoffactive |
|
|
+ \makevalueexpandable |
|
|
% This expands tokens, so do it after making catcode changes, so _ |
|
|
- % etc. don't get their TeX definitions. |
|
|
+ % etc. don't get their TeX definitions. This ignores all spaces in |
|
|
+ % #4, including (wrongly) those in the middle of the filename. |
|
|
\getfilename{#4}% |
|
|
% |
|
|
+ % This (wrongly) does not take account of leading or trailing |
|
|
+ % spaces in #1, which should be ignored. |
|
|
\edef\pdfxrefdest{#1}% |
|
|
- \txiescapepdf\pdfxrefdest |
|
|
+ \ifx\pdfxrefdest\empty |
|
|
+ \def\pdfxrefdest{Top}% no empty targets |
|
|
+ \else |
|
|
+ \txiescapepdf\pdfxrefdest % escape PDF special chars |
|
|
+ \fi |
|
|
% |
|
|
\leavevmode |
|
|
\startlink attr{/Border [0 0 0]}% |
|
|
@@ -7883,7 +8057,7 @@ |
|
|
\printedrefname |
|
|
\fi |
|
|
% |
|
|
- % if the user also gave the printed manual name (fifth arg), append |
|
|
+ % If the user also gave the printed manual name (fifth arg), append |
|
|
% "in MANUALNAME". |
|
|
\ifdim \wd\printedmanualbox > 0pt |
|
|
\space \putwordin{} \cite{\printedmanual}% |
|
|
@@ -7898,32 +8072,20 @@ |
|
|
% this is a loss. Therefore, we give the text of the node name |
|
|
% again, so it is as if TeX is seeing it for the first time. |
|
|
% |
|
|
- % Cross-manual reference. Only include the "Section ``foo'' in" if |
|
|
- % the foo is neither missing or Top. Thus, @xref{,,,foo,The Foo Manual} |
|
|
- % outputs simply "see The Foo Manual". |
|
|
\ifdim \wd\printedmanualbox > 0pt |
|
|
- % What is the 7sp about? The idea is that we also want to omit |
|
|
- % the Section part if we would be printing "Top", since they are |
|
|
- % clearly trying to refer to the whole manual. But, this being |
|
|
- % TeX, we can't easily compare strings while ignoring the possible |
|
|
- % spaces before and after in the input. By adding the arbitrary |
|
|
- % 7sp, we make it much less likely that a real node name would |
|
|
- % happen to have the same width as "Top" (e.g., in a monospaced font). |
|
|
- % I hope it will never happen in practice. |
|
|
+ % Cross-manual reference with a printed manual name. |
|
|
% |
|
|
- % For the same basic reason, we retypeset the "Top" at every |
|
|
- % reference, since the current font is indeterminate. |
|
|
+ \crossmanualxref{\cite{\printedmanual\unskip}}% |
|
|
+ % |
|
|
+ \else\ifdim \wd\infofilenamebox > 0pt |
|
|
+ % Cross-manual reference with only an info filename (arg 4), no |
|
|
+ % printed manual name (arg 5). This is essentially the same as |
|
|
+ % the case above; we output the filename, since we have nothing else. |
|
|
% |
|
|
- \setbox\topbox = \hbox{Top\kern7sp}% |
|
|
- \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% |
|
|
- \ifdim \wd2 > 7sp |
|
|
- \ifdim \wd2 = \wd\topbox \else |
|
|
- \putwordSection{} ``\printedrefname'' \putwordin{}\space |
|
|
- \fi |
|
|
- \fi |
|
|
- \cite{\printedmanual}% |
|
|
+ \crossmanualxref{\code{\infofilename\unskip}}% |
|
|
+ % |
|
|
\else |
|
|
- % Reference in this manual. |
|
|
+ % Reference within this manual. |
|
|
% |
|
|
% _ (for example) has to be the character _ for the purposes of the |
|
|
% control sequence corresponding to the node, but it has to expand |
|
|
@@ -7944,11 +8106,37 @@ |
|
|
% |
|
|
% output the `page 3'. |
|
|
\turnoffactive \putwordpage\tie\refx{#1-pg}{}% |
|
|
- \fi |
|
|
+ \fi\fi |
|
|
\fi |
|
|
\endlink |
|
|
\endgroup} |
|
|
|
|
|
+% Output a cross-manual xref to #1. Used just above (twice). |
|
|
+% |
|
|
+% Only include the text "Section ``foo'' in" if the foo is neither |
|
|
+% missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply |
|
|
+% "see The Foo Manual", the idea being to refer to the whole manual. |
|
|
+% |
|
|
+% But, this being TeX, we can't easily compare our node name against the |
|
|
+% string "Top" while ignoring the possible spaces before and after in |
|
|
+% the input. By adding the arbitrary 7sp below, we make it much less |
|
|
+% likely that a real node name would have the same width as "Top" (e.g., |
|
|
+% in a monospaced font). Hopefully it will never happen in practice. |
|
|
+% |
|
|
+% For the same basic reason, we retypeset the "Top" at every |
|
|
+% reference, since the current font is indeterminate. |
|
|
+% |
|
|
+\def\crossmanualxref#1{% |
|
|
+ \setbox\toprefbox = \hbox{Top\kern7sp}% |
|
|
+ \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% |
|
|
+ \ifdim \wd2 > 7sp % nonempty? |
|
|
+ \ifdim \wd2 = \wd\toprefbox \else % same as Top? |
|
|
+ \putwordSection{} ``\printedrefname'' \putwordin{}\space |
|
|
+ \fi |
|
|
+ \fi |
|
|
+ #1% |
|
|
+} |
|
|
+ |
|
|
% This macro is called from \xrefX for the `[nodename]' part of xref |
|
|
% output. It's a separate macro only so it can be changed more easily, |
|
|
% since square brackets don't work well in some documents. Particularly |
|
|
@@ -8173,6 +8361,7 @@ |
|
|
\gdef\footnote{% |
|
|
\let\indent=\ptexindent |
|
|
\let\noindent=\ptexnoindent |
|
|
+ % |
|
|
\global\advance\footnoteno by \@ne |
|
|
\edef\thisfootno{$^{\the\footnoteno}$}% |
|
|
% |
|
|
@@ -8196,6 +8385,11 @@ |
|
|
% |
|
|
\gdef\dofootnote{% |
|
|
\insert\footins\bgroup |
|
|
+ % |
|
|
+ % Nested footnotes are not supported in TeX, that would take a lot |
|
|
+ % more work. (\startsavinginserts does not suffice.) |
|
|
+ \let\footnote=\errfootnote |
|
|
+ % |
|
|
% We want to typeset this text as a normal paragraph, even if the |
|
|
% footnote reference occurs in (for example) a display environment. |
|
|
% So reset some parameters. |
|
|
@@ -8233,13 +8427,19 @@ |
|
|
} |
|
|
}%end \catcode `\@=11 |
|
|
|
|
|
+\def\errfootnote{% |
|
|
+ \errhelp=\EMsimple |
|
|
+ \errmessage{Nested footnotes not supported in texinfo.tex, |
|
|
+ even though they work in makeinfo; sorry} |
|
|
+} |
|
|
+ |
|
|
% In case a @footnote appears in a vbox, save the footnote text and create |
|
|
% the real \insert just after the vbox finished. Otherwise, the insertion |
|
|
% would be lost. |
|
|
% Similarly, if a @footnote appears inside an alignment, save the footnote |
|
|
% text to a box and make the \insert when a row of the table is finished. |
|
|
% And the same can be done for other insert classes. --kasal, 16nov03. |
|
|
- |
|
|
+% |
|
|
% Replace the \insert primitive by a cheating macro. |
|
|
% Deeper inside, just make sure that the saved insertions are not spilled |
|
|
% out prematurely. |
|
|
@@ -8316,7 +8516,7 @@ |
|
|
it from ftp://tug.org/tex/epsf.tex.} |
|
|
% |
|
|
\def\image#1{% |
|
|
- \ifx\epsfbox\thisiundefined |
|
|
+ \ifx\epsfbox\thisisundefined |
|
|
\ifwarnednoepsf \else |
|
|
\errhelp = \noepsfhelp |
|
|
\errmessage{epsf.tex not found, images will be ignored}% |
|
|
@@ -8340,6 +8540,13 @@ |
|
|
% If the image is by itself, center it. |
|
|
\ifvmode |
|
|
\imagevmodetrue |
|
|
+ \else \ifx\centersub\centerV |
|
|
+ % for @center @image, we need a vbox so we can have our vertical space |
|
|
+ \imagevmodetrue |
|
|
+ \vbox\bgroup % vbox has better behavior than vtop herev |
|
|
+ \fi\fi |
|
|
+ % |
|
|
+ \ifimagevmode |
|
|
\nobreak\medskip |
|
|
% Usually we'll have text after the image which will insert |
|
|
% \parskip glue, so insert it here too to equalize the space |
|
|
@@ -8349,9 +8556,13 @@ |
|
|
\fi |
|
|
% |
|
|
% Leave vertical mode so that indentation from an enclosing |
|
|
- % environment such as @quotation is respected. On the other hand, if |
|
|
- % it's at the top level, we don't want the normal paragraph indentation. |
|
|
- \noindent |
|
|
+ % environment such as @quotation is respected. |
|
|
+ % However, if we're at the top level, we don't want the |
|
|
+ % normal paragraph indentation. |
|
|
+ % On the other hand, if we are in the case of @center @image, we don't |
|
|
+ % want to start a paragraph, which will create a hsize-width box and |
|
|
+ % eradicate the centering. |
|
|
+ \ifx\centersub\centerV\else \noindent \fi |
|
|
% |
|
|
% Output the image. |
|
|
\ifpdf |
|
|
@@ -8363,7 +8574,10 @@ |
|
|
\epsfbox{#1.eps}% |
|
|
\fi |
|
|
% |
|
|
- \ifimagevmode \medskip \fi % space after the standalone image |
|
|
+ \ifimagevmode |
|
|
+ \medskip % space after a standalone image |
|
|
+ \fi |
|
|
+ \ifx\centersub\centerV \egroup \fi |
|
|
\endgroup} |
|
|
|
|
|
|
|
|
@@ -9793,11 +10007,9 @@ |
|
|
\catcode`\"=\active |
|
|
\def\activedoublequote{{\tt\char34}} |
|
|
\let"=\activedoublequote |
|
|
-\catcode`\~=\active |
|
|
-\def~{{\tt\char126}} |
|
|
+\catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde |
|
|
\chardef\hat=`\^ |
|
|
-\catcode`\^=\active |
|
|
-\def^{{\tt \hat}} |
|
|
+\catcode`\^=\active \def\activehat{{\tt \hat}} \let^ = \activehat |
|
|
|
|
|
\catcode`\_=\active |
|
|
\def_{\ifusingtt\normalunderscore\_} |
|
|
@@ -9807,16 +10019,26 @@ |
|
|
|
|
|
\catcode`\|=\active |
|
|
\def|{{\tt\char124}} |
|
|
+ |
|
|
\chardef \less=`\< |
|
|
-\catcode`\<=\active |
|
|
-\def<{{\tt \less}} |
|
|
+\catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless |
|
|
\chardef \gtr=`\> |
|
|
-\catcode`\>=\active |
|
|
-\def>{{\tt \gtr}} |
|
|
-\catcode`\+=\active |
|
|
-\def+{{\tt \char 43}} |
|
|
-\catcode`\$=\active |
|
|
-\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix |
|
|
+\catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr |
|
|
+\catcode`\+=\active \def+{{\tt \char 43}} |
|
|
+\catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix |
|
|
+ |
|
|
+% used for headline/footline in the output routine, in case the page |
|
|
+% breaks in the middle of an @tex block. |
|
|
+\def\texinfochars{% |
|
|
+ \let< = \activeless |
|
|
+ \let> = \activegtr |
|
|
+ \let~ = \activetilde |
|
|
+ \let^ = \activehat |
|
|
+ \markupsetuplqdefault \markupsetuprqdefault |
|
|
+ \let\b = \strong |
|
|
+ \let\i = \smartitalic |
|
|
+ % in principle, all other definitions in \tex have to be undone too. |
|
|
+} |
|
|
|
|
|
% If a .fmt file is being used, characters that might appear in a file |
|
|
% name cannot be active until we have parsed the command line. |
|
|
@@ -9866,22 +10088,26 @@ |
|
|
@gdef@otherbackslash{@let\=@realbackslash} |
|
|
|
|
|
% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of |
|
|
-% the literal character `\'. |
|
|
+% the literal character `\'. Also revert - to its normal character, in |
|
|
+% case the active - from code has slipped in. |
|
|
% |
|
|
-@def@normalturnoffactive{% |
|
|
- @let"=@normaldoublequote |
|
|
- @let$=@normaldollar %$ font-lock fix |
|
|
- @let+=@normalplus |
|
|
- @let<=@normalless |
|
|
- @let>=@normalgreater |
|
|
- @let\=@normalbackslash |
|
|
- @let^=@normalcaret |
|
|
- @let_=@normalunderscore |
|
|
- @let|=@normalverticalbar |
|
|
- @let~=@normaltilde |
|
|
- @markupsetuplqdefault |
|
|
- @markupsetuprqdefault |
|
|
- @unsepspaces |
|
|
+{@catcode`- = @active |
|
|
+ @gdef@normalturnoffactive{% |
|
|
+ @let-=@normaldash |
|
|
+ @let"=@normaldoublequote |
|
|
+ @let$=@normaldollar %$ font-lock fix |
|
|
+ @let+=@normalplus |
|
|
+ @let<=@normalless |
|
|
+ @let>=@normalgreater |
|
|
+ @let\=@normalbackslash |
|
|
+ @let^=@normalcaret |
|
|
+ @let_=@normalunderscore |
|
|
+ @let|=@normalverticalbar |
|
|
+ @let~=@normaltilde |
|
|
+ @markupsetuplqdefault |
|
|
+ @markupsetuprqdefault |
|
|
+ @unsepspaces |
|
|
+ } |
|
|
} |
|
|
|
|
|
% Make _ and + \other characters, temporarily. |
|
|
diff -urN glibc-2.17-c758a686/manual/threads.texi glibc-2.17-c758a686/manual/threads.texi |
|
|
--- glibc-2.17-c758a686/manual/threads.texi 1969-12-31 19:00:00.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/threads.texi 2014-09-12 16:10:06.042792724 -0400 |
|
|
@@ -0,0 +1,254 @@ |
|
|
+@node POSIX Threads |
|
|
+@c @node POSIX Threads, Internal Probes, Cryptographic Functions, Top |
|
|
+@chapter POSIX Threads |
|
|
+@c %MENU% POSIX Threads |
|
|
+@cindex pthreads |
|
|
+ |
|
|
+This chapter describes the @glibcadj{} POSIX Thread implementation. |
|
|
+ |
|
|
+@menu |
|
|
+* Thread-specific Data:: Support for creating and |
|
|
+ managing thread-specific data |
|
|
+* Non-POSIX Extensions:: Additional functions to extend |
|
|
+ POSIX Thread functionality |
|
|
+@end menu |
|
|
+ |
|
|
+@node Thread-specific Data |
|
|
+@section Thread-specific Data |
|
|
+ |
|
|
+The @glibcadj{} implements functions to allow users to create and manage |
|
|
+data specific to a thread. Such data may be destroyed at thread exit, |
|
|
+if a destructor is provided. The following functions are defined: |
|
|
+ |
|
|
+@comment pthread.h |
|
|
+@comment POSIX |
|
|
+@deftypefun int pthread_key_create (pthread_key_t *@var{key}, void (*@var{destructor})(void*)) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c pthread_key_create ok |
|
|
+@c KEY_UNUSED ok |
|
|
+@c KEY_USABLE ok |
|
|
+Create a thread-specific data key for the calling thread, referenced by |
|
|
+@var{key}. |
|
|
+ |
|
|
+Objects declared with the C++11 @code{thread_local} keyword are destroyed |
|
|
+before thread-specific data, so they should not be used in thread-specific |
|
|
+data destructors or even as members of the thread-specific data, since the |
|
|
+latter is passed as an argument to the destructor function. |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@comment pthread.h |
|
|
+@comment POSIX |
|
|
+@deftypefun int pthread_key_delete (pthread_key_t @var{key}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c pthread_key_delete ok |
|
|
+@c This uses atomic compare and exchange to increment the seq number |
|
|
+@c after testing it's not a KEY_UNUSED seq number. |
|
|
+@c KEY_UNUSED dup ok |
|
|
+Destroy the thread-specific data @var{key} in the calling thread. The |
|
|
+destructor for the thread-specific data is not called during destruction, nor |
|
|
+is it called during thread exit. |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@comment pthread.h |
|
|
+@comment POSIX |
|
|
+@deftypefun void *pthread_getspecific (pthread_key_t @var{key}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c pthread_getspecific ok |
|
|
+Return the thread-specific data associated with @var{key} in the calling |
|
|
+thread. |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@comment pthread.h |
|
|
+@comment POSIX |
|
|
+@deftypefun int pthread_setspecific (pthread_key_t @var{key}, const void *@var{value}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}} |
|
|
+@c pthread_setspecific @asucorrupt @ascuheap @acucorrupt @acsmem |
|
|
+@c a level2 block may be allocated by a signal handler after |
|
|
+@c another call already made a decision to allocate it, thus losing |
|
|
+@c the allocated value. the seq number is updated before the |
|
|
+@c value, which might cause an earlier-generation value to seem |
|
|
+@c current if setspecific is cancelled or interrupted by a signal |
|
|
+@c KEY_UNUSED ok |
|
|
+@c calloc dup @ascuheap @acsmem |
|
|
+Associate the thread-specific @var{value} with @var{key} in the calling thread. |
|
|
+@end deftypefun |
|
|
+ |
|
|
+ |
|
|
+@node Non-POSIX Extensions |
|
|
+@section Non-POSIX Extensions |
|
|
+ |
|
|
+In addition to implementing the POSIX API for threads, @theglibc{} provides |
|
|
+additional functions and interfaces to provide functionality not specified in |
|
|
+the standard. |
|
|
+ |
|
|
+@menu |
|
|
+* Default Thread Attributes:: Setting default attributes for |
|
|
+ threads in a process. |
|
|
+@end menu |
|
|
+ |
|
|
+@node Default Thread Attributes |
|
|
+@subsection Setting Process-wide defaults for thread attributes |
|
|
+ |
|
|
+@Theglibc{} provides non-standard API functions to set and get the default |
|
|
+attributes used in the creation of threads in a process. |
|
|
+ |
|
|
+@comment pthread.h |
|
|
+@comment GNU |
|
|
+@deftypefun int pthread_getattr_default_np (pthread_attr_t *@var{attr}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c Takes lock around read from default_pthread_attr. |
|
|
+Get the default attribute values and set @var{attr} to match. This |
|
|
+function returns @math{0} on success and a non-zero error code on |
|
|
+failure. |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@comment pthread.h |
|
|
+@comment GNU |
|
|
+@deftypefun int pthread_setattr_default_np (pthread_attr_t *@var{attr}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
+@c pthread_setattr_default_np @ascuheap @asulock @aculock @acsmem |
|
|
+@c check_sched_policy_attr ok |
|
|
+@c check_sched_priority_attr ok |
|
|
+@c sched_get_priority_min dup ok |
|
|
+@c sched_get_priority_max dup ok |
|
|
+@c check_cpuset_attr ok |
|
|
+@c determine_cpumask_size ok |
|
|
+@c check_stacksize_attr ok |
|
|
+@c lll_lock @asulock @aculock |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c memcpy dup ok |
|
|
+@c lll_unlock @asulock @aculock |
|
|
+Set the default attribute values to match the values in @var{attr}. The |
|
|
+function returns @math{0} on success and a non-zero error code on failure. |
|
|
+The following error codes are defined for this function: |
|
|
+ |
|
|
+@table @code |
|
|
+@item EINVAL |
|
|
+At least one of the values in @var{attr} does not qualify as valid for the |
|
|
+attributes or the stack address is set in the attribute. |
|
|
+@item ENOMEM |
|
|
+The system does not have sufficient memory. |
|
|
+@end table |
|
|
+@end deftypefun |
|
|
+ |
|
|
+@c FIXME these are undocumented: |
|
|
+@c pthread_atfork |
|
|
+@c pthread_attr_destroy |
|
|
+@c pthread_attr_getaffinity_np |
|
|
+@c pthread_attr_getdetachstate |
|
|
+@c pthread_attr_getguardsize |
|
|
+@c pthread_attr_getinheritsched |
|
|
+@c pthread_attr_getschedparam |
|
|
+@c pthread_attr_getschedpolicy |
|
|
+@c pthread_attr_getscope |
|
|
+@c pthread_attr_getstack |
|
|
+@c pthread_attr_getstackaddr |
|
|
+@c pthread_attr_getstacksize |
|
|
+@c pthread_attr_init |
|
|
+@c pthread_attr_setaffinity_np |
|
|
+@c pthread_attr_setdetachstate |
|
|
+@c pthread_attr_setguardsize |
|
|
+@c pthread_attr_setinheritsched |
|
|
+@c pthread_attr_setschedparam |
|
|
+@c pthread_attr_setschedpolicy |
|
|
+@c pthread_attr_setscope |
|
|
+@c pthread_attr_setstack |
|
|
+@c pthread_attr_setstackaddr |
|
|
+@c pthread_attr_setstacksize |
|
|
+@c pthread_barrierattr_destroy |
|
|
+@c pthread_barrierattr_getpshared |
|
|
+@c pthread_barrierattr_init |
|
|
+@c pthread_barrierattr_setpshared |
|
|
+@c pthread_barrier_destroy |
|
|
+@c pthread_barrier_init |
|
|
+@c pthread_barrier_wait |
|
|
+@c pthread_cancel |
|
|
+@c pthread_cleanup_push |
|
|
+@c pthread_cleanup_pop |
|
|
+@c pthread_condattr_destroy |
|
|
+@c pthread_condattr_getclock |
|
|
+@c pthread_condattr_getpshared |
|
|
+@c pthread_condattr_init |
|
|
+@c pthread_condattr_setclock |
|
|
+@c pthread_condattr_setpshared |
|
|
+@c pthread_cond_broadcast |
|
|
+@c pthread_cond_destroy |
|
|
+@c pthread_cond_init |
|
|
+@c pthread_cond_signal |
|
|
+@c pthread_cond_timedwait |
|
|
+@c pthread_cond_wait |
|
|
+@c pthread_create |
|
|
+@c pthread_detach |
|
|
+@c pthread_equal |
|
|
+@c pthread_exit |
|
|
+@c pthread_getaffinity_np |
|
|
+@c pthread_getattr_np |
|
|
+@c pthread_getconcurrency |
|
|
+@c pthread_getcpuclockid |
|
|
+@c pthread_getname_np |
|
|
+@c pthread_getschedparam |
|
|
+@c pthread_join |
|
|
+@c pthread_kill |
|
|
+@c pthread_kill_other_threads_np |
|
|
+@c pthread_mutexattr_destroy |
|
|
+@c pthread_mutexattr_getkind_np |
|
|
+@c pthread_mutexattr_getprioceiling |
|
|
+@c pthread_mutexattr_getprotocol |
|
|
+@c pthread_mutexattr_getpshared |
|
|
+@c pthread_mutexattr_getrobust |
|
|
+@c pthread_mutexattr_getrobust_np |
|
|
+@c pthread_mutexattr_gettype |
|
|
+@c pthread_mutexattr_init |
|
|
+@c pthread_mutexattr_setkind_np |
|
|
+@c pthread_mutexattr_setprioceiling |
|
|
+@c pthread_mutexattr_setprotocol |
|
|
+@c pthread_mutexattr_setpshared |
|
|
+@c pthread_mutexattr_setrobust |
|
|
+@c pthread_mutexattr_setrobust_np |
|
|
+@c pthread_mutexattr_settype |
|
|
+@c pthread_mutex_consistent |
|
|
+@c pthread_mutex_consistent_np |
|
|
+@c pthread_mutex_destroy |
|
|
+@c pthread_mutex_getprioceiling |
|
|
+@c pthread_mutex_init |
|
|
+@c pthread_mutex_lock |
|
|
+@c pthread_mutex_setprioceiling |
|
|
+@c pthread_mutex_timedlock |
|
|
+@c pthread_mutex_trylock |
|
|
+@c pthread_mutex_unlock |
|
|
+@c pthread_once |
|
|
+@c pthread_rwlockattr_destroy |
|
|
+@c pthread_rwlockattr_getkind_np |
|
|
+@c pthread_rwlockattr_getpshared |
|
|
+@c pthread_rwlockattr_init |
|
|
+@c pthread_rwlockattr_setkind_np |
|
|
+@c pthread_rwlockattr_setpshared |
|
|
+@c pthread_rwlock_destroy |
|
|
+@c pthread_rwlock_init |
|
|
+@c pthread_rwlock_rdlock |
|
|
+@c pthread_rwlock_timedrdlock |
|
|
+@c pthread_rwlock_timedwrlock |
|
|
+@c pthread_rwlock_tryrdlock |
|
|
+@c pthread_rwlock_trywrlock |
|
|
+@c pthread_rwlock_unlock |
|
|
+@c pthread_rwlock_wrlock |
|
|
+@c pthread_self |
|
|
+@c pthread_setaffinity_np |
|
|
+@c pthread_setcancelstate |
|
|
+@c pthread_setcanceltype |
|
|
+@c pthread_setconcurrency |
|
|
+@c pthread_setname_np |
|
|
+@c pthread_setschedparam |
|
|
+@c pthread_setschedprio |
|
|
+@c pthread_sigmask |
|
|
+@c pthread_sigqueue |
|
|
+@c pthread_spin_destroy |
|
|
+@c pthread_spin_init |
|
|
+@c pthread_spin_lock |
|
|
+@c pthread_spin_trylock |
|
|
+@c pthread_spin_unlock |
|
|
+@c pthread_testcancel |
|
|
+@c pthread_timedjoin_np |
|
|
+@c pthread_tryjoin_np |
|
|
+@c pthread_yield |
|
|
diff -urN glibc-2.17-c758a686/manual/time.texi glibc-2.17-c758a686/manual/time.texi |
|
|
--- glibc-2.17-c758a686/manual/time.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/time.texi 2014-09-12 16:10:06.044792719 -0400 |
|
|
@@ -79,6 +79,7 @@ |
|
|
@comment time.h |
|
|
@comment ISO |
|
|
@deftypefun double difftime (time_t @var{time1}, time_t @var{time0}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{difftime} function returns the number of seconds of elapsed |
|
|
time between calendar time @var{time1} and calendar time @var{time0}, as |
|
|
a value of type @code{double}. The difference ignores leap seconds |
|
|
@@ -246,6 +247,12 @@ |
|
|
@comment time.h |
|
|
@comment ISO |
|
|
@deftypefun clock_t clock (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c On Hurd, this calls task_info twice and adds user and system time |
|
|
+@c from both basic and thread time info structs. On generic posix, |
|
|
+@c calls times and adds utime and stime. On bsd, calls getrusage and |
|
|
+@c safely converts stime and utime to clock. On linux, calls |
|
|
+@c clock_gettime. |
|
|
This function returns the calling process' current CPU time. If the CPU |
|
|
time is not available or cannot be represented, @code{clock} returns the |
|
|
value @code{(clock_t)(-1)}. |
|
|
@@ -310,6 +317,12 @@ |
|
|
@comment sys/times.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun clock_t times (struct tms *@var{buffer}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c On HURD, this calls task_info twice, for basic and thread times info, |
|
|
+@c adding user and system times into tms, and then gettimeofday, to |
|
|
+@c compute the real time. On BSD, it calls getclktck, getrusage (twice) |
|
|
+@c and time. On Linux, it's a syscall with special handling to account |
|
|
+@c for clock_t counts that look like error values. |
|
|
The @code{times} function stores the processor time information for |
|
|
the calling process in @var{buffer}. |
|
|
|
|
|
@@ -409,6 +422,7 @@ |
|
|
@comment time.h |
|
|
@comment ISO |
|
|
@deftypefun time_t time (time_t *@var{result}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{time} function returns the current calendar time as a value of |
|
|
type @code{time_t}. If the argument @var{result} is not a null pointer, |
|
|
the calendar time value is also stored in @code{*@var{result}}. If the |
|
|
@@ -420,7 +434,9 @@ |
|
|
@c Linux. |
|
|
@comment time.h |
|
|
@comment SVID, XPG |
|
|
-@deftypefun int stime (time_t *@var{newtime}) |
|
|
+@deftypefun int stime (const time_t *@var{newtime}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c On unix, this is implemented in terms of settimeofday. |
|
|
@code{stime} sets the system clock, i.e., it tells the system that the |
|
|
current calendar time is @var{newtime}, where @code{newtime} is |
|
|
interpreted as described in the above definition of @code{time_t}. |
|
|
@@ -475,6 +491,12 @@ |
|
|
@comment sys/time.h |
|
|
@comment BSD |
|
|
@deftypefun int gettimeofday (struct timeval *@var{tp}, struct timezone *@var{tzp}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c On most GNU/Linux systems this is a direct syscall, but the posix/ |
|
|
+@c implementation (not used on GNU/Linux or GNU/Hurd) relies on time and |
|
|
+@c localtime_r, saving and restoring tzname in an unsafe manner. |
|
|
+@c On some GNU/Linux variants, ifunc resolvers are used in shared libc |
|
|
+@c for vdso resolution. ifunc-vdso-revisit. |
|
|
The @code{gettimeofday} function returns the current calendar time as |
|
|
the elapsed time since the epoch in the @code{struct timeval} structure |
|
|
indicated by @var{tp}. (@pxref{Elapsed Time} for a description of |
|
|
@@ -498,6 +520,9 @@ |
|
|
@comment sys/time.h |
|
|
@comment BSD |
|
|
@deftypefun int settimeofday (const struct timeval *@var{tp}, const struct timezone *@var{tzp}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c On HURD, it calls host_set_time with a privileged port. On other |
|
|
+@c unix systems, it's a syscall. |
|
|
The @code{settimeofday} function sets the current calendar time in the |
|
|
system clock according to the arguments. As for @code{gettimeofday}, |
|
|
the calendar time is represented as the elapsed time since the epoch. |
|
|
@@ -539,6 +564,10 @@ |
|
|
@comment sys/time.h |
|
|
@comment BSD |
|
|
@deftypefun int adjtime (const struct timeval *@var{delta}, struct timeval *@var{olddelta}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c On hurd and mach, call host_adjust_time with a privileged port. On |
|
|
+@c Linux, it's implemented in terms of adjtimex. On other unixen, it's |
|
|
+@c a syscall. |
|
|
This function speeds up or slows down the system clock in order to make |
|
|
a gradual adjustment. This ensures that the calendar time reported by |
|
|
the system clock is always monotonically increasing, which might not |
|
|
@@ -577,6 +606,8 @@ |
|
|
@comment sys/timex.h |
|
|
@comment GNU |
|
|
@deftypefun int adjtimex (struct timex *@var{timex}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c It's a syscall, only available on linux. |
|
|
|
|
|
@code{adjtimex} is functionally identical to @code{ntp_adjtime}. |
|
|
@xref{High Accuracy Clock}. |
|
|
@@ -674,6 +705,10 @@ |
|
|
@comment time.h |
|
|
@comment ISO |
|
|
@deftypefun {struct tm *} localtime (const time_t *@var{time}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:tmbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c Calls tz_convert with a static buffer. |
|
|
+@c localtime @mtasurace:tmbuf @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c tz_convert dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
The @code{localtime} function converts the simple time pointed to by |
|
|
@var{time} to broken-down time representation, expressed relative to the |
|
|
user's specified time zone. |
|
|
@@ -687,9 +722,8 @@ |
|
|
as a broken-down time; typically this is because the year cannot fit into |
|
|
an @code{int}. |
|
|
|
|
|
-Calling @code{localtime} has one other effect: it sets the variable |
|
|
-@code{tzname} with information about the current time zone. @xref{Time |
|
|
-Zone Functions}. |
|
|
+Calling @code{localtime} also sets the current time zone as if |
|
|
+@code{tzset} were called. @xref{Time Zone Functions}. |
|
|
@end deftypefun |
|
|
|
|
|
Using the @code{localtime} function is a big problem in multi-threaded |
|
|
@@ -699,6 +733,87 @@ |
|
|
@comment time.h |
|
|
@comment POSIX.1c |
|
|
@deftypefun {struct tm *} localtime_r (const time_t *@var{time}, struct tm *@var{resultp}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c localtime_r @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c tz_convert(use_localtime) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c tzset_internal @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c always called with tzset_lock held |
|
|
+@c sets static is_initialized before initialization; |
|
|
+@c reads and sets old_tz; sets tz_rules. |
|
|
+@c some of the issues only apply on the first call. |
|
|
+@c subsequent calls only trigger these when called by localtime; |
|
|
+@c otherwise, they're ok. |
|
|
+@c getenv dup @mtsenv |
|
|
+@c strcmp dup ok |
|
|
+@c strdup @ascuheap |
|
|
+@c tzfile_read @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c memcmp dup ok |
|
|
+@c strstr dup ok |
|
|
+@c getenv dup @mtsenv |
|
|
+@c asprintf dup @mtslocale @ascuheap @acsmem |
|
|
+@c stat64 dup ok |
|
|
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c fileno dup ok |
|
|
+@c fstat64 dup ok |
|
|
+@c fclose dup @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c fsetlocking dup ok [no @mtasurace:stream @asulock, exclusive] |
|
|
+@c fread_unlocked dup ok [no @mtasurace:stream @asucorrupt @acucorrupt] |
|
|
+@c memcpy dup ok |
|
|
+@c decode ok |
|
|
+@c bswap_32 dup ok |
|
|
+@c fseek dup ok [no @mtasurace:stream @asucorrupt @acucorrupt] |
|
|
+@c ftello dup ok [no @mtasurace:stream @asucorrupt @acucorrupt] |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c decode64 ok |
|
|
+@c bswap_64 dup ok |
|
|
+@c getc_unlocked ok [no @mtasurace:stream @asucorrupt @acucorrupt] |
|
|
+@c tzstring dup @ascuheap @acsmem |
|
|
+@c compute_tzname_max dup ok [guarded by tzset_lock] |
|
|
+@c memset dup ok |
|
|
+@c update_vars ok [guarded by tzset_lock] |
|
|
+@c sets daylight, timezone, tzname and tzname_cur_max; |
|
|
+@c called only with tzset_lock held, unless tzset_parse_tz |
|
|
+@c (internal, but not static) gets called by users; given the its |
|
|
+@c double-underscore-prefixed name, this interface violation could |
|
|
+@c be regarded as undefined behavior. |
|
|
+@c strlen ok |
|
|
+@c tzset_parse_tz @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c sscanf dup @mtslocale @ascuheap @acsmem |
|
|
+@c isalnum dup @mtsenv |
|
|
+@c tzstring @ascuheap @acsmem |
|
|
+@c reads and changes tzstring_list without synchronization, but |
|
|
+@c only called with tzset_lock held (save for interface violations) |
|
|
+@c strlen dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c strcpy dup ok |
|
|
+@c isdigit dup @mtslocale |
|
|
+@c compute_offset ok |
|
|
+@c tzfile_default @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c sets tzname, timezone, types, zone_names, rule_*off, etc; no guards |
|
|
+@c strlen dup ok |
|
|
+@c tzfile_read dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c mempcpy dup ok |
|
|
+@c compute_tzname_max ok [if guarded by tzset_lock] |
|
|
+@c iterates over zone_names; no guards |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c strtoul dup @mtslocale |
|
|
+@c update_vars dup ok |
|
|
+@c tzfile_compute(use_localtime) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c sets tzname; no guards. with !use_localtime, as in gmtime, it's ok |
|
|
+@c tzstring dup @acsuheap @acsmem |
|
|
+@c tzset_parse_tz dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c offtime dup ok |
|
|
+@c tz_compute dup ok |
|
|
+@c strcmp dup ok |
|
|
+@c offtime ok |
|
|
+@c isleap dup ok |
|
|
+@c tz_compute ok |
|
|
+@c compute_change ok |
|
|
+@c isleap ok |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+ |
|
|
The @code{localtime_r} function works just like the @code{localtime} |
|
|
function. It takes a pointer to a variable containing a simple time |
|
|
and converts it to the broken-down time format. |
|
|
@@ -715,6 +830,9 @@ |
|
|
@comment time.h |
|
|
@comment ISO |
|
|
@deftypefun {struct tm *} gmtime (const time_t *@var{time}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:tmbuf} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c gmtime @mtasurace:tmbuf @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c tz_convert dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
This function is similar to @code{localtime}, except that the broken-down |
|
|
time is expressed as Coordinated Universal Time (UTC) (formerly called |
|
|
Greenwich Mean Time (GMT)) rather than relative to a local time zone. |
|
|
@@ -728,6 +846,15 @@ |
|
|
@comment time.h |
|
|
@comment POSIX.1c |
|
|
@deftypefun {struct tm *} gmtime_r (const time_t *@var{time}, struct tm *@var{resultp}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c You'd think tz_convert could avoid some safety issues with |
|
|
+@c !use_localtime, but no such luck: tzset_internal will always bring |
|
|
+@c about all possible AS and AC problems when it's first called. |
|
|
+@c Calling any of localtime,gmtime_r once would run the initialization |
|
|
+@c and avoid the heap, mem and fd issues in gmtime* in subsequent calls, |
|
|
+@c but the unsafe locking would remain. |
|
|
+@c gmtime_r @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c tz_convert(gmtime_r) dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
This function is similar to @code{localtime_r}, except that it converts |
|
|
just like @code{gmtime} the given time as Coordinated Universal Time. |
|
|
|
|
|
@@ -739,30 +866,58 @@ |
|
|
@comment time.h |
|
|
@comment ISO |
|
|
@deftypefun time_t mktime (struct tm *@var{brokentime}) |
|
|
-The @code{mktime} function is used to convert a broken-down time structure |
|
|
-to a simple time representation. It also ``normalizes'' the contents of |
|
|
-the broken-down time structure, by filling in the day of week and day of |
|
|
-year based on the other date and time components. |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c mktime @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c passes a static localtime_offset to mktime_internal; it is read |
|
|
+@c once, used as an initial guess, and updated at the end, but not |
|
|
+@c used except as a guess for subsequent calls, so it should be safe. |
|
|
+@c Even though a compiler might delay the load and perform it multiple |
|
|
+@c times (bug 16346), there are at least two unconditional uses of the |
|
|
+@c auto variable in which the first load is stored, separated by a |
|
|
+@c call to an external function, and a conditional change of the |
|
|
+@c variable before the external call, so refraining from allocating a |
|
|
+@c local variable at the first load would be a very bad optimization. |
|
|
+@c tzset dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c mktime_internal(localtime_r) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c ydhms_diff ok |
|
|
+@c ranged_convert(localtime_r) @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c *convert = localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c time_t_avg dup ok |
|
|
+@c guess_time_tm dup ok |
|
|
+@c ydhms_diff dup ok |
|
|
+@c time_t_add_ok ok |
|
|
+@c time_t_avg ok |
|
|
+@c isdst_differ ok |
|
|
+@c time_t_int_add_ok ok |
|
|
+The @code{mktime} function converts a broken-down time structure to a |
|
|
+simple time representation. It also normalizes the contents of the |
|
|
+broken-down time structure, and fills in some components based on the |
|
|
+values of the others. |
|
|
|
|
|
The @code{mktime} function ignores the specified contents of the |
|
|
-@code{tm_wday} and @code{tm_yday} members of the broken-down time |
|
|
+@code{tm_wday}, @code{tm_yday}, @code{tm_gmtoff}, and @code{tm_zone} |
|
|
+members of the broken-down time |
|
|
structure. It uses the values of the other components to determine the |
|
|
calendar time; it's permissible for these components to have |
|
|
unnormalized values outside their normal ranges. The last thing that |
|
|
@code{mktime} does is adjust the components of the @var{brokentime} |
|
|
-structure (including the @code{tm_wday} and @code{tm_yday}). |
|
|
+structure, including the members that were initially ignored. |
|
|
|
|
|
If the specified broken-down time cannot be represented as a simple time, |
|
|
@code{mktime} returns a value of @code{(time_t)(-1)} and does not modify |
|
|
the contents of @var{brokentime}. |
|
|
|
|
|
-Calling @code{mktime} also sets the variable @code{tzname} with |
|
|
-information about the current time zone. @xref{Time Zone Functions}. |
|
|
+Calling @code{mktime} also sets the current time zone as if |
|
|
+@code{tzset} were called; @code{mktime} uses this information instead |
|
|
+of @var{brokentime}'s initial @code{tm_gmtoff} and @code{tm_zone} |
|
|
+members. @xref{Time Zone Functions}. |
|
|
@end deftypefun |
|
|
|
|
|
@comment time.h |
|
|
@comment ??? |
|
|
@deftypefun time_t timelocal (struct tm *@var{brokentime}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c Alias to mktime. |
|
|
|
|
|
@code{timelocal} is functionally identical to @code{mktime}, but more |
|
|
mnemonically named. Note that it is the inverse of the @code{localtime} |
|
|
@@ -776,6 +931,19 @@ |
|
|
@comment time.h |
|
|
@comment ??? |
|
|
@deftypefun time_t timegm (struct tm *@var{brokentime}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c timegm @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c gmtime_offset triggers the same caveats as localtime_offset in mktime. |
|
|
+@c although gmtime_r, as called by mktime, might save some issues, |
|
|
+@c tzset calls tzset_internal with always, which forces |
|
|
+@c reinitialization, so all issues may arise. |
|
|
+@c tzset dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c mktime_internal(gmtime_r) @asulock @aculock |
|
|
+@c ..gmtime_r @asulock @aculock |
|
|
+@c ... dup ok |
|
|
+@c tz_convert(!use_localtime) @asulock @aculock |
|
|
+@c ... dup @asulock @aculock |
|
|
+@c tzfile_compute(!use_localtime) ok |
|
|
|
|
|
@code{timegm} is functionally identical to @code{mktime} except it |
|
|
always takes the input values to be Coordinated Universal Time (UTC) |
|
|
@@ -837,6 +1005,8 @@ |
|
|
@comment sys/timex.h |
|
|
@comment GNU |
|
|
@deftypefun int ntp_gettime (struct ntptimeval *@var{tptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Wrapper for adjtimex. |
|
|
The @code{ntp_gettime} function sets the structure pointed to by |
|
|
@var{tptr} to current values. The elements of the structure afterwards |
|
|
contain the values the timer implementation in the kernel assumes. They |
|
|
@@ -954,6 +1124,8 @@ |
|
|
@comment sys/timex.h |
|
|
@comment GNU |
|
|
@deftypefun int ntp_adjtime (struct timex *@var{tptr}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Alias to adjtimex syscall. |
|
|
The @code{ntp_adjtime} function sets the structure specified by |
|
|
@var{tptr} to current values. |
|
|
|
|
|
@@ -1008,6 +1180,13 @@ |
|
|
@comment time.h |
|
|
@comment ISO |
|
|
@deftypefun {char *} asctime (const struct tm *@var{brokentime}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:asctime} @mtslocale{}}@asunsafe{}@acsafe{}} |
|
|
+@c asctime @mtasurace:asctime @mtslocale |
|
|
+@c Uses a static buffer. |
|
|
+@c asctime_internal @mtslocale |
|
|
+@c snprintf dup @mtslocale [no @acsuheap @acsmem] |
|
|
+@c ab_day_name @mtslocale |
|
|
+@c ab_month_name @mtslocale |
|
|
The @code{asctime} function converts the broken-down time value that |
|
|
@var{brokentime} points to into a string in a standard format: |
|
|
|
|
|
@@ -1031,6 +1210,9 @@ |
|
|
@comment time.h |
|
|
@comment POSIX.1c |
|
|
@deftypefun {char *} asctime_r (const struct tm *@var{brokentime}, char *@var{buffer}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}} |
|
|
+@c asctime_r @mtslocale |
|
|
+@c asctime_internal dup @mtslocale |
|
|
This function is similar to @code{asctime} but instead of placing the |
|
|
result in a static buffer it writes the string in the buffer pointed to |
|
|
by the parameter @var{buffer}. This buffer should have room |
|
|
@@ -1045,6 +1227,10 @@ |
|
|
@comment time.h |
|
|
@comment ISO |
|
|
@deftypefun {char *} ctime (const time_t *@var{time}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:tmbuf} @mtasurace{:asctime} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c ctime @mtasurace:tmbuf @mtasurace:asctime @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c localtime dup @mtasurace:tmbuf @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c asctime dup @mtasurace:asctime @mtslocale |
|
|
The @code{ctime} function is similar to @code{asctime}, except that you |
|
|
specify the calendar time argument as a @code{time_t} simple time value |
|
|
rather than in broken-down local time format. It is equivalent to |
|
|
@@ -1053,13 +1239,17 @@ |
|
|
asctime (localtime (@var{time})) |
|
|
@end smallexample |
|
|
|
|
|
-@code{ctime} sets the variable @code{tzname}, because @code{localtime} |
|
|
-does so. @xref{Time Zone Functions}. |
|
|
+Calling @code{ctime} also sets the current time zone as if |
|
|
+@code{tzset} were called. @xref{Time Zone Functions}. |
|
|
@end deftypefun |
|
|
|
|
|
@comment time.h |
|
|
@comment POSIX.1c |
|
|
@deftypefun {char *} ctime_r (const time_t *@var{time}, char *@var{buffer}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c ctime_r @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c asctime_r dup @mtslocale |
|
|
This function is similar to @code{ctime}, but places the result in the |
|
|
string pointed to by @var{buffer}. It is equivalent to (written using |
|
|
gcc extensions, @pxref{Statement Exprs,,,gcc,Porting and Using gcc}): |
|
|
@@ -1077,17 +1267,75 @@ |
|
|
@comment time.h |
|
|
@comment ISO |
|
|
@deftypefun size_t strftime (char *@var{s}, size_t @var{size}, const char *@var{template}, const struct tm *@var{brokentime}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c strftime @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c strftime_l @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c strftime_internal @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c add ok |
|
|
+@c memset_zero dup ok |
|
|
+@c memset_space dup ok |
|
|
+@c strlen dup ok |
|
|
+@c mbrlen @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd [no @mtasurace:mbstate/!ps] |
|
|
+@c mbsinit dup ok |
|
|
+@c cpy ok |
|
|
+@c add dup ok |
|
|
+@c memcpy_lowcase ok |
|
|
+@c TOLOWER ok |
|
|
+@c tolower_l ok |
|
|
+@c memcpy_uppcase ok |
|
|
+@c TOUPPER ok |
|
|
+@c toupper_l ok |
|
|
+@c MEMCPY ok |
|
|
+@c memcpy dup ok |
|
|
+@c ISDIGIT ok |
|
|
+@c STRLEN ok |
|
|
+@c strlen dup ok |
|
|
+@c strftime_internal dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c TOUPPER dup ok |
|
|
+@c nl_get_era_entry @ascuheap @asulock @acsmem @aculock |
|
|
+@c nl_init_era_entries @ascuheap @asulock @acsmem @aculock |
|
|
+@c libc_rwlock_wrlock dup @asulock @aculock |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c memset dup ok |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c memcpy dup ok |
|
|
+@c strchr dup ok |
|
|
+@c wcschr dup ok |
|
|
+@c libc_rwlock_unlock dup @asulock @aculock |
|
|
+@c ERA_DATE_CMP ok |
|
|
+@c DO_NUMBER ok |
|
|
+@c DO_NUMBER_SPACEPAD ok |
|
|
+@c nl_get_alt_digit @ascuheap @asulock @acsmem @aculock |
|
|
+@c libc_rwlock_wrlock dup @asulock @aculock |
|
|
+@c nl_init_alt_digit @ascuheap @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c memset dup ok |
|
|
+@c strchr dup ok |
|
|
+@c libc_rwlock_unlock dup @aculock |
|
|
+@c memset_space ok |
|
|
+@c memset dup ok |
|
|
+@c memset_zero ok |
|
|
+@c memset dup ok |
|
|
+@c mktime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c iso_week_days ok |
|
|
+@c isleap ok |
|
|
+@c tzset dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c gmtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c tm_diff ok |
|
|
This function is similar to the @code{sprintf} function (@pxref{Formatted |
|
|
Input}), but the conversion specifications that can appear in the format |
|
|
template @var{template} are specialized for printing components of the date |
|
|
and time @var{brokentime} according to the locale currently specified for |
|
|
-time conversion (@pxref{Locales}). |
|
|
+time conversion (@pxref{Locales}) and the current time zone |
|
|
+(@pxref{Time Zone Functions}). |
|
|
|
|
|
Ordinary characters appearing in the @var{template} are copied to the |
|
|
output string @var{s}; this can include multibyte character sequences. |
|
|
Conversion specifiers are introduced by a @samp{%} character, followed |
|
|
by an optional flag which can be one of the following. These flags |
|
|
-are all GNU extensions. The first three affect only the output of |
|
|
+are all GNU extensions. The first three affect only the output of |
|
|
numbers: |
|
|
|
|
|
@table @code |
|
|
@@ -1392,9 +1640,10 @@ |
|
|
If @var{s} is a null pointer, @code{strftime} does not actually write |
|
|
anything, but instead returns the number of characters it would have written. |
|
|
|
|
|
-According to POSIX.1 every call to @code{strftime} implies a call to |
|
|
-@code{tzset}. So the contents of the environment variable @code{TZ} |
|
|
-is examined before any output is produced. |
|
|
+Calling @code{strftime} also sets the current time zone as if |
|
|
+@code{tzset} were called; @code{strftime} uses this information |
|
|
+instead of @var{brokentime}'s @code{tm_gmtoff} and @code{tm_zone} |
|
|
+members. @xref{Time Zone Functions}. |
|
|
|
|
|
For an example of @code{strftime}, see @ref{Time Functions Example}. |
|
|
@end deftypefun |
|
|
@@ -1402,6 +1651,53 @@ |
|
|
@comment time.h |
|
|
@comment ISO/Amend1 |
|
|
@deftypefun size_t wcsftime (wchar_t *@var{s}, size_t @var{size}, const wchar_t *@var{template}, const struct tm *@var{brokentime}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{} @asulock{} @ascudlopen{}}@acunsafe{@acucorrupt{} @aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c wcsftime @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c wcsftime_l @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c wcsftime_internal @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c add ok |
|
|
+@c memset_zero dup ok |
|
|
+@c memset_space dup ok |
|
|
+@c wcslen dup ok |
|
|
+@c cpy ok |
|
|
+@c add dup ok |
|
|
+@c memcpy_lowcase ok |
|
|
+@c TOLOWER ok |
|
|
+@c towlower_l dup ok |
|
|
+@c memcpy_uppcase ok |
|
|
+@c TOUPPER ok |
|
|
+@c towupper_l dup ok |
|
|
+@c MEMCPY ok |
|
|
+@c wmemcpy dup ok |
|
|
+@c widen @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c memset dup ok |
|
|
+@c mbsrtowcs_l @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd [no @mtasurace:mbstate/!ps] |
|
|
+@c ISDIGIT ok |
|
|
+@c STRLEN ok |
|
|
+@c wcslen dup ok |
|
|
+@c wcsftime_internal dup @mtsenv @mtslocale @asucorrupt @ascuheap @asulock @ascudlopen @acucorrupt @aculock @acsmem @acsfd |
|
|
+@c TOUPPER dup ok |
|
|
+@c nl_get_era_entry dup @ascuheap @asulock @acsmem @aculock |
|
|
+@c DO_NUMBER ok |
|
|
+@c DO_NUMBER_SPACEPAD ok |
|
|
+@c nl_get_walt_digit dup @ascuheap @asulock @acsmem @aculock |
|
|
+@c libc_rwlock_wrlock dup @asulock @aculock |
|
|
+@c nl_init_alt_digit dup @ascuheap @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c memset dup ok |
|
|
+@c wcschr dup ok |
|
|
+@c libc_rwlock_unlock dup @aculock |
|
|
+@c memset_space ok |
|
|
+@c wmemset dup ok |
|
|
+@c memset_zero ok |
|
|
+@c wmemset dup ok |
|
|
+@c mktime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c iso_week_days ok |
|
|
+@c isleap ok |
|
|
+@c tzset dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c gmtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c tm_diff ok |
|
|
The @code{wcsftime} function is equivalent to the @code{strftime} |
|
|
function with the difference that it operates on wide character |
|
|
strings. The buffer where the result is stored, pointed to by @var{s}, |
|
|
@@ -1452,6 +1748,32 @@ |
|
|
@comment time.h |
|
|
@comment XPG4 |
|
|
@deftypefun {char *} strptime (const char *@var{s}, const char *@var{fmt}, struct tm *@var{tp}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c strptime @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c strptime_internal @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c memset dup ok |
|
|
+@c ISSPACE ok |
|
|
+@c isspace_l dup ok |
|
|
+@c match_char ok |
|
|
+@c match_string ok |
|
|
+@c strlen dup ok |
|
|
+@c strncasecmp_l dup ok |
|
|
+@c strcmp dup ok |
|
|
+@c recursive @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c strptime_internal dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c get_number ok |
|
|
+@c ISSPACE dup ok |
|
|
+@c localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c nl_select_era_entry @ascuheap @asulock @acsmem @aculock |
|
|
+@c nl_init_era_entries dup @ascuheap @asulock @acsmem @aculock |
|
|
+@c get_alt_number dup @ascuheap @asulock @acsmem @aculock |
|
|
+@c nl_parse_alt_digit dup @ascuheap @asulock @acsmem @aculock |
|
|
+@c libc_rwlock_wrlock dup @asulock @aculock |
|
|
+@c nl_init_alt_digit dup @ascuheap @acsmem |
|
|
+@c libc_rwlock_unlock dup @aculock |
|
|
+@c get_number dup ok |
|
|
+@c day_of_the_week ok |
|
|
+@c day_of_the_year ok |
|
|
The @code{strptime} function parses the input string @var{s} according |
|
|
to the format string @var{fmt} and stores its results in the |
|
|
structure @var{tp}. |
|
|
@@ -1865,6 +2187,9 @@ |
|
|
@comment time.h |
|
|
@comment Unix98 |
|
|
@deftypefun {struct tm *} getdate (const char *@var{string}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:getdate} @mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c getdate @mtasurace:getdate @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c getdate_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
The interface to @code{getdate} is the simplest possible for a function |
|
|
to parse a string and return the value. @var{string} is the input |
|
|
string and the result is returned in a statically-allocated variable. |
|
|
@@ -1976,6 +2301,30 @@ |
|
|
@comment time.h |
|
|
@comment GNU |
|
|
@deftypefun int getdate_r (const char *@var{string}, struct tm *@var{tp}) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c getdate_r @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c getenv dup @mtsenv |
|
|
+@c stat64 dup ok |
|
|
+@c access dup ok |
|
|
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c fsetlocking dup ok [no @mtasurace:stream @asulock, exclusive] |
|
|
+@c isspace dup @mtslocale |
|
|
+@c strlen dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c fclose dup @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c memcpy dup ok |
|
|
+@c getline dup @ascuheap @acsmem [no @asucorrupt @aculock @acucorrupt, exclusive] |
|
|
+@c strptime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c feof_unlocked dup ok |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c ferror_unlocked dup dup ok |
|
|
+@c time dup ok |
|
|
+@c localtime_r dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c first_wday @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c memset dup ok |
|
|
+@c mktime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c check_mday ok |
|
|
+@c mktime dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
The @code{getdate_r} function is the reentrant counterpart of |
|
|
@code{getdate}. It does not use the global variable @code{getdate_err} |
|
|
to signal an error, but instead returns an error code. The same error |
|
|
@@ -2037,7 +2386,7 @@ |
|
|
[@code{+}|@code{-}]@var{hh}[@code{:}@var{mm}[@code{:}@var{ss}]]. This |
|
|
is positive if the local time zone is west of the Prime Meridian and |
|
|
negative if it is east. The hour must be between @code{0} and |
|
|
-@code{23}, and the minute and seconds between @code{0} and @code{59}. |
|
|
+@code{24}, and the minute and seconds between @code{0} and @code{59}. |
|
|
|
|
|
For example, here is how we would specify Eastern Standard Time, but |
|
|
without any Daylight Saving Time alternative: |
|
|
@@ -2082,17 +2431,51 @@ |
|
|
|
|
|
The @var{time} fields specify when, in the local time currently in |
|
|
effect, the change to the other time occurs. If omitted, the default is |
|
|
-@code{02:00:00}. |
|
|
- |
|
|
-For example, here is how you would specify the Eastern time zone in the |
|
|
-United States, including the appropriate Daylight Saving Time and its dates |
|
|
-of applicability. The normal offset from UTC is 5 hours; since this is |
|
|
+@code{02:00:00}. The hours part of the time fields can range from |
|
|
+@minus{}167 through 167; this is an extension to POSIX.1, which allows |
|
|
+only the range 0 through 24. |
|
|
+ |
|
|
+Here are some example @code{TZ} values, including the appropriate |
|
|
+Daylight Saving Time and its dates of applicability. In North |
|
|
+American Eastern Standard Time (EST) and Eastern Daylight Time (EDT), |
|
|
+the normal offset from UTC is 5 hours; since this is |
|
|
west of the prime meridian, the sign is positive. Summer time begins on |
|
|
-the first Sunday in April at 2:00am, and ends on the last Sunday in October |
|
|
+March's second Sunday at 2:00am, and ends on November's first Sunday |
|
|
at 2:00am. |
|
|
|
|
|
@smallexample |
|
|
-EST+5EDT,M4.1.0/2,M10.5.0/2 |
|
|
+EST+5EDT,M3.2.0/2,M11.1.0/2 |
|
|
+@end smallexample |
|
|
+ |
|
|
+Israel Standard Time (IST) and Israel Daylight Time (IDT) are 2 hours |
|
|
+ahead of the prime meridian in winter, springing forward an hour on |
|
|
+March's fourth Thursday at 26:00 (i.e., 02:00 on the first Friday on or |
|
|
+after March 23), and falling back on October's last Sunday at 02:00. |
|
|
+ |
|
|
+@smallexample |
|
|
+IST-2IDT,M3.4.4/26,M10.5.0 |
|
|
+@end smallexample |
|
|
+ |
|
|
+Western Argentina Summer Time (WARST) is 3 hours behind the prime |
|
|
+meridian all year. There is a dummy fall-back transition on December |
|
|
+31 at 25:00 daylight saving time (i.e., 24:00 standard time, |
|
|
+equivalent to January 1 at 00:00 standard time), and a simultaneous |
|
|
+spring-forward transition on January 1 at 00:00 standard time, so |
|
|
+daylight saving time is in effect all year and the initial @code{WART} |
|
|
+is a placeholder. |
|
|
+ |
|
|
+@smallexample |
|
|
+WART4WARST,J1/0,J365/25 |
|
|
+@end smallexample |
|
|
+ |
|
|
+Western Greenland Time (WGT) and Western Greenland Summer Time (WGST) |
|
|
+are 3 hours behind UTC in the winter. Its clocks follow the European |
|
|
+Union rules of springing forward by one hour on March's last Sunday at |
|
|
+01:00 UTC (@minus{}02:00 local time) and falling back on October's |
|
|
+last Sunday at 01:00 UTC (@minus{}01:00 local time). |
|
|
+ |
|
|
+@smallexample |
|
|
+WGT3WGST,M3.5.0/-2,M10.5.0/-1 |
|
|
@end smallexample |
|
|
|
|
|
The schedule of Daylight Saving Time in any particular jurisdiction has |
|
|
@@ -2177,6 +2560,11 @@ |
|
|
@comment time.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun void tzset (void) |
|
|
+@safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c tzset @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c tzset_internal dup @mtsenv @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
The @code{tzset} function initializes the @code{tzname} variable from |
|
|
the value of the @code{TZ} environment variable. It is not usually |
|
|
necessary for your program to call this function, because it is called |
|
|
@@ -2314,7 +2702,16 @@ |
|
|
|
|
|
@comment sys/time.h |
|
|
@comment BSD |
|
|
-@deftypefun int setitimer (int @var{which}, struct itimerval *@var{new}, struct itimerval *@var{old}) |
|
|
+@deftypefun int setitimer (int @var{which}, const struct itimerval *@var{new}, struct itimerval *@var{old}) |
|
|
+@safety{@prelim{}@mtsafe{@mtstimer{}}@assafe{}@acsafe{}} |
|
|
+@c This function is marked with @mtstimer because the same set of timers |
|
|
+@c is shared by all threads of a process, so calling it in one thread |
|
|
+@c may interfere with timers set by another thread. This interference |
|
|
+@c is not regarded as destructive, because the interface specification |
|
|
+@c makes this overriding while returning the previous value the expected |
|
|
+@c behavior, and the kernel will serialize concurrent calls so that the |
|
|
+@c last one prevails, with each call getting the timer information from |
|
|
+@c the timer installed by the previous call in that serialization. |
|
|
The @code{setitimer} function sets the timer specified by @var{which} |
|
|
according to @var{new}. The @var{which} argument can have a value of |
|
|
@code{ITIMER_REAL}, @code{ITIMER_VIRTUAL}, or @code{ITIMER_PROF}. |
|
|
@@ -2335,6 +2732,7 @@ |
|
|
@comment sys/time.h |
|
|
@comment BSD |
|
|
@deftypefun int getitimer (int @var{which}, struct itimerval *@var{old}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{getitimer} function stores information about the timer specified |
|
|
by @var{which} in the structure pointed at by @var{old}. |
|
|
|
|
|
@@ -2367,6 +2765,8 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun {unsigned int} alarm (unsigned int @var{seconds}) |
|
|
+@safety{@prelim{}@mtsafe{@mtstimer{}}@assafe{}@acsafe{}} |
|
|
+@c Wrapper for setitimer. |
|
|
The @code{alarm} function sets the real-time timer to expire in |
|
|
@var{seconds} seconds. If you want to cancel any existing alarm, you |
|
|
can do this by calling @code{alarm} with a @var{seconds} argument of |
|
|
@@ -2426,6 +2826,10 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun {unsigned int} sleep (unsigned int @var{seconds}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtascusig{:SIGCHLD/linux}}@asunsafe{}@acunsafe{}} |
|
|
+@c On Mach, it uses ports and calls time. On generic posix, it calls |
|
|
+@c nanosleep. On Linux, it temporarily blocks SIGCHLD, which is MT- and |
|
|
+@c AS-Unsafe, and in a way that makes it AC-Unsafe (C-unsafe, even!). |
|
|
The @code{sleep} function waits for @var{seconds} or until a signal |
|
|
is delivered, whichever happens first. |
|
|
|
|
|
@@ -2470,6 +2874,9 @@ |
|
|
@comment time.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int nanosleep (const struct timespec *@var{requested_time}, struct timespec *@var{remaining}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c On Linux, it's a syscall. On Mach, it calls gettimeofday and uses |
|
|
+@c ports. |
|
|
If resolution to seconds is not enough the @code{nanosleep} function can |
|
|
be used. As the name suggests the sleep interval can be specified in |
|
|
nanoseconds. The actual elapsed time of the sleep interval might be |
|
|
diff -urN glibc-2.17-c758a686/manual/tsort.awk glibc-2.17-c758a686/manual/tsort.awk |
|
|
--- glibc-2.17-c758a686/manual/tsort.awk 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/tsort.awk 2014-09-12 16:10:06.043792722 -0400 |
|
|
@@ -1,6 +1,6 @@ |
|
|
#! /usr/bin/awk -f |
|
|
# Generate topologically sorted list of manual chapters. |
|
|
-# (C) Copyright 1998, 1999 Free Software Foundation, Inc. |
|
|
+# Copyright (C) 1998-2014 Free Software Foundation, Inc. |
|
|
# Written by Ulrich Drepper <drepper@cygnus.com>, 1998. |
|
|
|
|
|
BEGIN { |
|
|
diff -urN glibc-2.17-c758a686/manual/users.texi glibc-2.17-c758a686/manual/users.texi |
|
|
--- glibc-2.17-c758a686/manual/users.texi 2012-12-24 22:02:13.000000000 -0500 |
|
|
+++ glibc-2.17-c758a686/manual/users.texi 2014-09-12 16:10:06.043792722 -0400 |
|
|
@@ -71,7 +71,7 @@ |
|
|
@cindex group ID |
|
|
Users are classified in @dfn{groups}. Each user name belongs to one |
|
|
@dfn{default group} and may also belong to any number of |
|
|
-@dfn{supplementary groups}. Users who are members of the same group can |
|
|
+@dfn{supplementary groups}. Users who are members of the same group can |
|
|
share resources (such as files) that are not accessible to users who are |
|
|
not a member of that group. Each group has a @dfn{group name} and |
|
|
@dfn{group ID}. @xref{Group Database}, for how to find information |
|
|
@@ -221,30 +221,37 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun uid_t getuid (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
+@c Atomic syscall, except on hurd, where it takes a lock within a hurd |
|
|
+@c critical section. |
|
|
The @code{getuid} function returns the real user ID of the process. |
|
|
@end deftypefun |
|
|
|
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun gid_t getgid (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{getgid} function returns the real group ID of the process. |
|
|
@end deftypefun |
|
|
|
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun uid_t geteuid (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{geteuid} function returns the effective user ID of the process. |
|
|
@end deftypefun |
|
|
|
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun gid_t getegid (void) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{getegid} function returns the effective group ID of the process. |
|
|
@end deftypefun |
|
|
|
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int getgroups (int @var{count}, gid_t *@var{groups}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
The @code{getgroups} function is used to inquire about the supplementary |
|
|
group IDs of the process. Up to @var{count} of these group IDs are |
|
|
stored in the array @var{groups}; the return value from the function is |
|
|
@@ -291,6 +298,34 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int seteuid (uid_t @var{neweuid}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c seteuid @asulock @aculock |
|
|
+@c INLINE_SETXID_SYSCALL @asulock @aculock |
|
|
+@c This may be just a unix syscall, or the ugliness below used by |
|
|
+@c nptl to propagate the syscall to all cloned processes used to |
|
|
+@c implement threads. |
|
|
+@c nptl_setxid @asulock @aculock |
|
|
+@c while holding the stack_alloc_lock, mark with SETXID_BITMASK all |
|
|
+@c threads that are not exiting, signal them until no thread remains |
|
|
+@c marked, clear the marks and run the syscall, then release the lock. |
|
|
+@c lll_lock @asulock @aculock |
|
|
+@c list_for_each ok |
|
|
+@c list_entry ok |
|
|
+@c setxid_mark_thread ok |
|
|
+@c if a thread is initializing, wait for it to be cloned. |
|
|
+@c mark it with SETXID_BITMASK if it's not exiting |
|
|
+@c setxid_signal_thread ok |
|
|
+@c if a thread is marked with SETXID_BITMASK, |
|
|
+@c send it the SIGSETXID signal |
|
|
+@c setxid_unmark_thread ok |
|
|
+@c clear SETXID_BITMASK and release the futex if SETXID_BITMASK is |
|
|
+@c set. |
|
|
+@c <syscall> ok |
|
|
+@c lll_unlock @aculock |
|
|
+@c |
|
|
+@c sighandler_setxid ok |
|
|
+@c issue the syscall, clear SETXID_BITMASK, release the futex, and |
|
|
+@c wake up the signaller loop if the counter reached zero. |
|
|
This function sets the effective user ID of a process to @var{neweuid}, |
|
|
provided that the process is allowed to change its effective user ID. A |
|
|
privileged process (effective user ID zero) can change its effective |
|
|
@@ -318,6 +353,9 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int setuid (uid_t @var{newuid}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c setuid @asulock @aculock |
|
|
+@c INLINE_SETXID_SYSCALL dup @asulock @aculock |
|
|
If the calling process is privileged, this function sets both the real |
|
|
and effective user ID of the process to @var{newuid}. It also deletes |
|
|
the file user ID of the process, if any. @var{newuid} may be any |
|
|
@@ -334,6 +372,9 @@ |
|
|
@comment unistd.h |
|
|
@comment BSD |
|
|
@deftypefun int setreuid (uid_t @var{ruid}, uid_t @var{euid}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c setreuid @asulock @aculock |
|
|
+@c INLINE_SETXID_SYSCALL dup @asulock @aculock |
|
|
This function sets the real user ID of the process to @var{ruid} and the |
|
|
effective user ID to @var{euid}. If @var{ruid} is @code{-1}, it means |
|
|
not to change the real user ID; likewise if @var{euid} is @code{-1}, it |
|
|
@@ -369,6 +410,9 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int setegid (gid_t @var{newgid}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c setegid @asulock @aculock |
|
|
+@c INLINE_SETXID_SYSCALL dup @asulock @aculock |
|
|
This function sets the effective group ID of the process to |
|
|
@var{newgid}, provided that the process is allowed to change its group |
|
|
ID. Just as with @code{seteuid}, if the process is privileged it may |
|
|
@@ -388,6 +432,9 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun int setgid (gid_t @var{newgid}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c setgid @asulock @aculock |
|
|
+@c INLINE_SETXID_SYSCALL dup @asulock @aculock |
|
|
This function sets both the real and effective group ID of the process |
|
|
to @var{newgid}, provided that the process is privileged. It also |
|
|
deletes the file group ID, if any. |
|
|
@@ -402,6 +449,9 @@ |
|
|
@comment unistd.h |
|
|
@comment BSD |
|
|
@deftypefun int setregid (gid_t @var{rgid}, gid_t @var{egid}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c setregid @asulock @aculock |
|
|
+@c INLINE_SETXID_SYSCALL dup @asulock @aculock |
|
|
This function sets the real group ID of the process to @var{rgid} and |
|
|
the effective group ID to @var{egid}. If @var{rgid} is @code{-1}, it |
|
|
means not to change the real group ID; likewise if @var{egid} is |
|
|
@@ -437,7 +487,10 @@ |
|
|
|
|
|
@comment grp.h |
|
|
@comment BSD |
|
|
-@deftypefun int setgroups (size_t @var{count}, gid_t *@var{groups}) |
|
|
+@deftypefun int setgroups (size_t @var{count}, const gid_t *@var{groups}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
+@c setgroups @asulock @aculock |
|
|
+@c INLINE_SETXID_SYSCALL dup @asulock @aculock |
|
|
This function sets the process's supplementary group IDs. It can only |
|
|
be called from privileged processes. The @var{count} argument specifies |
|
|
the number of group IDs in the array @var{groups}. |
|
|
@@ -455,6 +508,36 @@ |
|
|
@comment grp.h |
|
|
@comment BSD |
|
|
@deftypefun int initgroups (const char *@var{user}, gid_t @var{group}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @acsmem{} @acsfd{} @aculock{}}} |
|
|
+@c initgroups @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c sysconf(_SC_NGROUPS_MAX) dup @acsfd |
|
|
+@c MIN dup ok |
|
|
+@c malloc @ascuheap @acsmem |
|
|
+@c internal_getgrouplist @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nscd_getgrouplist @ascuheap @acsfd @acsmem |
|
|
+@c nscd_get_map_ref dup @ascuheap @acsfd @acsmem |
|
|
+@c nscd_cache_search dup ok |
|
|
+@c nscd_open_socket dup @acsfd |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c readall dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c close_not_cancel_no_status dup @acsfd |
|
|
+@c nscd_drop_map_ref dup @ascuheap @acsmem |
|
|
+@c nscd_unmap dup @ascuheap @acsmem |
|
|
+@c nss_database_lookup dup @mtslocale @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock |
|
|
+@c nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c compat_call @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c sysconf(_SC_GETGR_R_SIZE_MAX) ok |
|
|
+@c nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *getgrent_fct @ascuplugin |
|
|
+@c *setgrent_fct @ascuplugin |
|
|
+@c *endgrent_fct @ascuplugin |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c *initgroups_dyn_fct @ascuplugin |
|
|
+@c nss_next_action dup ok |
|
|
+@c setgroups dup @asulock @aculock |
|
|
+@c free dup @ascuheap @acsmem |
|
|
The @code{initgroups} function sets the process's supplementary group |
|
|
IDs to be the normal default for the user name @var{user}. The group |
|
|
@var{group} is automatically included. |
|
|
@@ -476,6 +559,13 @@ |
|
|
@comment grp.h |
|
|
@comment BSD |
|
|
@deftypefun int getgrouplist (const char *@var{user}, gid_t @var{group}, gid_t *@var{groups}, int *@var{ngroups}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @acsmem{} @acsfd{} @aculock{}}} |
|
|
+@c getgrouplist @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c MAX dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c internal_getgrouplist dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c memcpy dup ok |
|
|
+@c free dup @ascuheap @acsmem |
|
|
The @code{getgrouplist} function scans the group database for all the |
|
|
groups @var{user} belongs to. Up to *@var{ngroups} group IDs |
|
|
corresponding to these groups are stored in the array @var{groups}; the |
|
|
@@ -740,7 +830,7 @@ |
|
|
Be cautious about using the @code{exec} functions in combination with |
|
|
changing the effective user ID. Don't let users of your program execute |
|
|
arbitrary programs under a changed user ID. Executing a shell is |
|
|
-especially bad news. Less obviously, the @code{execlp} and @code{execvp} |
|
|
+especially bad news. Less obviously, the @code{execlp} and @code{execvp} |
|
|
functions are a potential risk (since the program they execute depends |
|
|
on the user's @code{PATH} environment variable). |
|
|
|
|
|
@@ -792,6 +882,41 @@ |
|
|
@comment unistd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun {char *} getlogin (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:getlogin} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getlogin (linux) @mtasurace:getlogin @mtasurace:utent @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c getlogin_r_loginuid dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c getlogin_fd0 (unix) @mtasurace:getlogin @mtasurace:utent @mtascusig:ALRM @mtascutimer @ascuheap @asulock @aculock @acsfd @acsmem |
|
|
+@c uses static buffer name => @mtasurace:getlogin |
|
|
+@c ttyname_r dup @ascuheap @acsmem @acsfd |
|
|
+@c strncpy dup ok |
|
|
+@c setutent dup @mtasurace:utent @asulock @aculock @acsfd |
|
|
+@c getutline_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd |
|
|
+@c endutent dup @mtasurace:utent @asulock @aculock |
|
|
+@c libc_lock_unlock dup ok |
|
|
+@c strlen dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c |
|
|
+@c getlogin_r (linux) @mtasurace:utent @mtascusig:ALRM @mtascutimer @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c getlogin_r_loginuid @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c open_not_cancel_2 dup @acsfd |
|
|
+@c read_not_cancel dup ok |
|
|
+@c close_not_cancel_no_status dup @acsfd |
|
|
+@c strtoul @mtslocale |
|
|
+@c getpwuid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c realloc dup @asulock @aculock @acsfd @acsmem |
|
|
+@c strlen dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c free dup @asulock @aculock @acsfd @acsmem |
|
|
+@c getlogin_r_fd0 (unix) @mtasurace:utent @mtascusig:ALRM @mtascutimer @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c ttyname_r dup @ascuheap @acsmem @acsfd |
|
|
+@c strncpy dup ok |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c *libc_utmp_jump_table->setutent dup @mtasurace:utent @acsfd |
|
|
+@c *libc_utmp_jump_table->getutline_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer |
|
|
+@c *libc_utmp_jump_table->endutent dup @mtasurace:utent @asulock @aculock |
|
|
+@c libc_lock_unlock dup ok |
|
|
+@c strlen dup ok |
|
|
+@c memcpy dup ok |
|
|
The @code{getlogin} function returns a pointer to a string containing the |
|
|
name of the user logged in on the controlling terminal of the process, |
|
|
or a null pointer if this information cannot be determined. The string |
|
|
@@ -802,6 +927,11 @@ |
|
|
@comment stdio.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun {char *} cuserid (char *@var{string}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c cuserid @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c geteuid dup ok |
|
|
+@c getpwuid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c strncpy dup ok |
|
|
The @code{cuserid} function returns a pointer to a string containing a |
|
|
user name associated with the effective ID of the process. If |
|
|
@var{string} is not a null pointer, it should be an array that can hold |
|
|
@@ -1013,6 +1143,22 @@ |
|
|
@comment utmp.h |
|
|
@comment SVID |
|
|
@deftypefun void setutent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}} |
|
|
+@c Besides the static variables in utmp_file.c, there's the jump_table. |
|
|
+@c They're both modified while holding a lock, but other threads may |
|
|
+@c cause the variables to be modified between calling this function and |
|
|
+@c others that rely on the internal state it sets up. |
|
|
+ |
|
|
+@c setutent @mtasurace:utent @asulock @aculock @acsfd |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c *libc_utmp_jump_table->setutent @mtasurace:utent @acsfd |
|
|
+@c setutent_unknown @mtasurace:utent @acsfd |
|
|
+@c *libc_utmp_file_functions.setutent = setutent_file @mtasurace:utent @acsfd |
|
|
+@c open_not_cancel_2 dup @acsfd |
|
|
+@c fcntl_not_cancel dup ok |
|
|
+@c close_not_cancel_no_status dup @acsfd |
|
|
+@c lseek64 dup ok |
|
|
+@c libc_lock_unlock dup ok |
|
|
This function opens the user accounting database to begin scanning it. |
|
|
You can then call @code{getutent}, @code{getutid} or @code{getutline} to |
|
|
read entries and @code{pututline} to write entries. |
|
|
@@ -1024,6 +1170,14 @@ |
|
|
@comment utmp.h |
|
|
@comment SVID |
|
|
@deftypefun {struct utmp *} getutent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtasurace{:utentbuf} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c The static buffer that holds results is allocated with malloc at |
|
|
+@c the first call; the test is not thread-safe, so multiple concurrent |
|
|
+@c calls could malloc multiple buffers. |
|
|
+ |
|
|
+@c getutent @mtuinit @mtasurace:utent @mtasurace:utentbuf @mtascusig:ALRM @mtascutimer @ascuheap @asulock @aculock @acsfd @acsmem |
|
|
+@c malloc @asulock @aculock @acsfd @acsmem |
|
|
+@c getutent_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd |
|
|
The @code{getutent} function reads the next entry from the user |
|
|
accounting database. It returns a pointer to the entry, which is |
|
|
statically allocated and may be overwritten by subsequent calls to |
|
|
@@ -1037,12 +1191,27 @@ |
|
|
@comment utmp.h |
|
|
@comment SVID |
|
|
@deftypefun void endutent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}} |
|
|
+@c endutent @mtasurace:utent @asulock @aculock @acsfd |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c *libc_utmp_jump_table->endutent @mtasurace:utent @acsfd |
|
|
+@c endutent_unknown ok |
|
|
+@c endutent_file @mtasurace:utent @acsfd |
|
|
+@c close_not_cancel_no_status dup @acsfd |
|
|
+@c libc_lock_unlock dup ok |
|
|
This function closes the user accounting database. |
|
|
@end deftypefun |
|
|
|
|
|
@comment utmp.h |
|
|
@comment SVID |
|
|
@deftypefun {struct utmp *} getutid (const struct utmp *@var{id}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
+@c Same caveats as getutline. |
|
|
+@c |
|
|
+@c getutid @mtuinit @mtasurace:utent @mtascusig:ALRM @mtascutimer @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c uses a static buffer malloced on the first call |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c getutid_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd |
|
|
This function searches forward from the current point in the database |
|
|
for an entry that matches @var{id}. If the @code{ut_type} member of the |
|
|
@var{id} structure is one of @code{RUN_LVL}, @code{BOOT_TIME}, |
|
|
@@ -1073,6 +1242,14 @@ |
|
|
@comment utmp.h |
|
|
@comment SVID |
|
|
@deftypefun {struct utmp *} getutline (const struct utmp *@var{line}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c The static buffer that holds results is allocated with malloc at |
|
|
+@c the first call; the test is not thread-safe, so multiple concurrent |
|
|
+@c calls could malloc multiple buffers. |
|
|
+ |
|
|
+@c getutline @mtuinit @mtasurace:utent @mtascusig:ALRM @mtascutimer @ascuheap @asulock @aculock @acsfd @acsmem |
|
|
+@c malloc @asulock @aculock @acsfd @acsmem |
|
|
+@c getutline_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd |
|
|
This function searches forward from the current point in the database |
|
|
until it finds an entry whose @code{ut_type} value is |
|
|
@code{LOGIN_PROCESS} or @code{USER_PROCESS}, and whose @code{ut_line} |
|
|
@@ -1095,6 +1272,29 @@ |
|
|
@comment utmp.h |
|
|
@comment SVID |
|
|
@deftypefun {struct utmp *} pututline (const struct utmp *@var{utmp}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}} |
|
|
+@c pututline @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c *libc_utmp_jump_table->pututline @mtasurace:utent @mtascusig:ALRM @mtascutimer @acsfd |
|
|
+@c pututline_unknown @mtasurace:utent @acsfd |
|
|
+@c setutent_unknown dup @mtasurace:utent @acsfd |
|
|
+@c pututline_file @mtascusig:ALRM @mtascutimer @acsfd |
|
|
+@c TRANSFORM_UTMP_FILE_NAME ok |
|
|
+@c strcmp dup ok |
|
|
+@c acesss dup ok |
|
|
+@c open_not_cancel_2 dup @acsfd |
|
|
+@c fcntl_not_cancel dup ok |
|
|
+@c close_not_cancel_no_status dup @acsfd |
|
|
+@c llseek dup ok |
|
|
+@c dup2 dup ok |
|
|
+@c utmp_equal dup ok |
|
|
+@c internal_getut_r dup @mtascusig:ALRM @mtascutimer |
|
|
+@c LOCK_FILE dup @mtascusig:ALRM @mtasctimer |
|
|
+@c LOCKING_FAILED dup ok |
|
|
+@c ftruncate64 dup ok |
|
|
+@c write_not_cancel dup ok |
|
|
+@c UNLOCK_FILE dup @mtasctimer |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
The @code{pututline} function inserts the entry @code{*@var{utmp}} at |
|
|
the appropriate place in the user accounting database. If it finds that |
|
|
it is not already at the correct place in the database, it uses |
|
|
@@ -1125,6 +1325,27 @@ |
|
|
@comment utmp.h |
|
|
@comment GNU |
|
|
@deftypefun int getutent_r (struct utmp *@var{buffer}, struct utmp **@var{result}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}} |
|
|
+@c getutent_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c *libc_utmp_jump_table->getutent_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @acsfd |
|
|
+@c getutent_r_unknown @mtasurace:utent @acsfd |
|
|
+@c setutent_unknown dup @mtasurace:utent @acsfd |
|
|
+@c getutent_r_file @mtasurace:utent @mtascusig:ALRM @mtascutimer |
|
|
+@c LOCK_FILE @mtascusig:ALRM @mtascutimer |
|
|
+@c alarm dup @mtascutimer |
|
|
+@c sigemptyset dup ok |
|
|
+@c sigaction dup ok |
|
|
+@c memset dup ok |
|
|
+@c fcntl_not_cancel dup ok |
|
|
+@c LOCKING_FAILED ok |
|
|
+@c read_not_cancel dup ok |
|
|
+@c UNLOCK_FILE @mtascutimer |
|
|
+@c fcntl_not_cancel dup ok |
|
|
+@c alarm dup @mtascutimer |
|
|
+@c sigaction dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c libc_lock_unlock dup ok |
|
|
The @code{getutent_r} is equivalent to the @code{getutent} function. It |
|
|
returns the next entry from the database. But instead of storing the |
|
|
information in a static buffer it stores it in the buffer pointed to by |
|
|
@@ -1142,6 +1363,22 @@ |
|
|
@comment utmp.h |
|
|
@comment GNU |
|
|
@deftypefun int getutid_r (const struct utmp *@var{id}, struct utmp *@var{buffer}, struct utmp **@var{result}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}} |
|
|
+@c getutid_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c *libc_utmp_jump_table->getutid_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @acsfd |
|
|
+@c getutid_r_unknown @mtasurace:utent @acsfd |
|
|
+@c setutent_unknown dup @mtasurace:utent @acsfd |
|
|
+@c getutid_r_file @mtascusig:ALRM @mtascutimer |
|
|
+@c internal_getut_r @mtascusig:ALRM @mtascutimer |
|
|
+@c LOCK_FILE dup @mtascusig:ALRM @mtascutimer |
|
|
+@c LOCKING_FAILED dup ok |
|
|
+@c read_not_cancel dup ok |
|
|
+@c utmp_equal ok |
|
|
+@c strncmp dup ok |
|
|
+@c UNLOCK_FILE dup @mtascutimer |
|
|
+@c memcpy dup ok |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
This function retrieves just like @code{getutid} the next entry matching |
|
|
the information stored in @var{id}. But the result is stored in the |
|
|
buffer pointed to by the parameter @var{buffer}. |
|
|
@@ -1157,6 +1394,28 @@ |
|
|
@comment utmp.h |
|
|
@comment GNU |
|
|
@deftypefun int getutline_r (const struct utmp *@var{line}, struct utmp *@var{buffer}, struct utmp **@var{result}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}} |
|
|
+@c getutline_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c *libc_utmp_jump_table->getutline_r @mtasurace:utent @mtascusig:ALRM @mtascutimer @acsfd |
|
|
+@c getutline_r_unknown @mtasurace:utent @acsfd |
|
|
+@c setutent_unknown dup @mtasurace:utent @acsfd |
|
|
+@c getutline_r_file @mtasurace:utent @mtascusig:ALRM @mtascutimer |
|
|
+@c LOCK_FILE @mtascusig:ALRM @mtascutimer |
|
|
+@c alarm dup @mtascutimer |
|
|
+@c sigemptyset dup ok |
|
|
+@c sigaction dup ok |
|
|
+@c memset dup ok |
|
|
+@c fcntl_not_cancel dup ok |
|
|
+@c LOCKING_FAILED ok |
|
|
+@c read_not_cancel dup ok |
|
|
+@c strncmp dup ok |
|
|
+@c UNLOCK_FILE @mtascutimer |
|
|
+@c fcntl_not_cancel dup ok |
|
|
+@c alarm dup @mtascutimer |
|
|
+@c sigaction dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c libc_lock_unlock dup ok |
|
|
This function retrieves just like @code{getutline} the next entry |
|
|
matching the information stored in @var{line}. But the result is stored |
|
|
in the buffer pointed to by the parameter @var{buffer}. |
|
|
@@ -1180,6 +1439,14 @@ |
|
|
@comment utmp.h |
|
|
@comment SVID |
|
|
@deftypefun int utmpname (const char *@var{file}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
+@c utmpname @mtasurace:utent @asulock @ascuheap @aculock @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c *libc_utmp_jump_table->endutent dup @mtasurace:utent |
|
|
+@c strcmp dup ok |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c strdup dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
The @code{utmpname} function changes the name of the database to be |
|
|
examined to @var{file}, and closes any previously opened database. By |
|
|
default @code{getutent}, @code{getutid}, @code{getutline} and |
|
|
@@ -1208,6 +1475,18 @@ |
|
|
@comment utmp.h |
|
|
@comment SVID |
|
|
@deftypefun void updwtmp (const char *@var{wtmp_file}, const struct utmp *@var{utmp}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtascusig{:ALRM} @mtascutimer{}}@asunsafe{}@acunsafe{@acsfd{}}} |
|
|
+@c updwtmp @mtascusig:ALRM @mtascutimer @acsfd |
|
|
+@c TRANSFORM_UTMP_FILE_NAME dup ok |
|
|
+@c *libc_utmp_file_functions->updwtmp = updwtmp_file @mtascusig:ALRM @mtascutimer @acsfd |
|
|
+@c open_not_cancel_2 dup @acsfd |
|
|
+@c LOCK_FILE dup @mtascusig:ALRM @mtascutimer |
|
|
+@c LOCKING_FAILED dup ok |
|
|
+@c lseek64 dup ok |
|
|
+@c ftruncate64 dup ok |
|
|
+@c write_not_cancel dup ok |
|
|
+@c UNLOCK_FILE dup @mtascutimer |
|
|
+@c close_not_cancel_no_status dup @acsfd |
|
|
The @code{updwtmp} function appends the entry *@var{utmp} to the |
|
|
database specified by @var{wtmp_file}. For possible values for the |
|
|
@var{wtmp_file} argument see the @code{utmpname} function. |
|
|
@@ -1330,6 +1609,7 @@ |
|
|
@comment utmpx.h |
|
|
@comment XPG4.2 |
|
|
@deftypefun void setutxent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}} |
|
|
This function is similar to @code{setutent}. In @theglibc{} it is |
|
|
simply an alias for @code{setutent}. |
|
|
@end deftypefun |
|
|
@@ -1337,6 +1617,7 @@ |
|
|
@comment utmpx.h |
|
|
@comment XPG4.2 |
|
|
@deftypefun {struct utmpx *} getutxent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
The @code{getutxent} function is similar to @code{getutent}, but returns |
|
|
a pointer to a @code{struct utmpx} instead of @code{struct utmp}. In |
|
|
@theglibc{} it simply is an alias for @code{getutent}. |
|
|
@@ -1345,6 +1626,7 @@ |
|
|
@comment utmpx.h |
|
|
@comment XPG4.2 |
|
|
@deftypefun void endutxent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{}}@acunsafe{@aculock{}}} |
|
|
This function is similar to @code{endutent}. In @theglibc{} it is |
|
|
simply an alias for @code{endutent}. |
|
|
@end deftypefun |
|
|
@@ -1352,6 +1634,7 @@ |
|
|
@comment utmpx.h |
|
|
@comment XPG4.2 |
|
|
@deftypefun {struct utmpx *} getutxid (const struct utmpx *@var{id}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}} |
|
|
This function is similar to @code{getutid}, but uses @code{struct utmpx} |
|
|
instead of @code{struct utmp}. In @theglibc{} it is simply an alias |
|
|
for @code{getutid}. |
|
|
@@ -1360,6 +1643,7 @@ |
|
|
@comment utmpx.h |
|
|
@comment XPG4.2 |
|
|
@deftypefun {struct utmpx *} getutxline (const struct utmpx *@var{line}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtuinit{} @mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
This function is similar to @code{getutid}, but uses @code{struct utmpx} |
|
|
instead of @code{struct utmp}. In @theglibc{} it is simply an alias |
|
|
for @code{getutline}. |
|
|
@@ -1368,6 +1652,7 @@ |
|
|
@comment utmpx.h |
|
|
@comment XPG4.2 |
|
|
@deftypefun {struct utmpx *} pututxline (const struct utmpx *@var{utmp}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{}}@acunsafe{@aculock{} @acsfd{}}} |
|
|
The @code{pututxline} function is functionally identical to |
|
|
@code{pututline}, but uses @code{struct utmpx} instead of @code{struct |
|
|
utmp}. In @theglibc{}, @code{pututxline} is simply an alias for |
|
|
@@ -1377,6 +1662,7 @@ |
|
|
@comment utmpx.h |
|
|
@comment XPG4.2 |
|
|
@deftypefun int utmpxname (const char *@var{file}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{}}} |
|
|
The @code{utmpxname} function is functionally identical to |
|
|
@code{utmpname}. In @theglibc{}, @code{utmpxname} is simply an |
|
|
alias for @code{utmpname}. |
|
|
@@ -1391,6 +1677,7 @@ |
|
|
@comment utmp.h |
|
|
@comment GNU |
|
|
@deftypefun int getutmp (const struct utmpx *@var{utmpx}, struct utmp *@var{utmp}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{getutmp} copies the information, insofar as the structures are |
|
|
compatible, from @var{utmpx} to @var{utmp}. |
|
|
@end deftypefun |
|
|
@@ -1399,6 +1686,7 @@ |
|
|
@comment utmp.h |
|
|
@comment GNU |
|
|
@deftypefun int getutmpx (const struct utmp *@var{utmp}, struct utmpx *@var{utmpx}) |
|
|
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} |
|
|
@code{getutmpx} copies the information, insofar as the structures are |
|
|
compatible, from @var{utmp} to @var{utmpx}. |
|
|
@end deftypefun |
|
|
@@ -1418,6 +1706,17 @@ |
|
|
@comment utmp.h |
|
|
@comment BSD |
|
|
@deftypefun int login_tty (int @var{filedes}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:ttyname}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c If this function is canceled, it may have succeeded in redirecting |
|
|
+@c only some of the standard streams to the newly opened terminal. |
|
|
+@c Should there be a safety annotation for this? |
|
|
+@c login_tty @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c setsid dup ok |
|
|
+@c ioctl dup ok |
|
|
+@c ttyname dup @mtasurace:ttyname @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c close dup @acsfd |
|
|
+@c open dup @acsfd |
|
|
+@c dup2 dup ok |
|
|
This function makes @var{filedes} the controlling terminal of the |
|
|
current process, redirects standard input, standard output and |
|
|
standard error output to this terminal, and closes @var{filedes}. |
|
|
@@ -1429,6 +1728,24 @@ |
|
|
@comment utmp.h |
|
|
@comment BSD |
|
|
@deftypefun void login (const struct utmp *@var{entry}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acucorrupt{} @acsfd{} @acsmem{}}} |
|
|
+@c login @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @ascuheap @aculock @acucorrupt @acsfd @acsmem |
|
|
+@c getpid dup ok |
|
|
+@c tty_name @ascuheap @acucorrupt @acsmem @acsfd |
|
|
+@c ttyname_r dup @ascuheap @acsmem @acsfd |
|
|
+@c memchr dup ok |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c strncmp dup ok |
|
|
+@c basename dup ok |
|
|
+@c strncpy dup ok |
|
|
+@c utmpname dup @mtasurace:utent @asulock @ascuheap @aculock @acsmem |
|
|
+@c setutent dup @mtasurace:utent @asulock @aculock @acsfd |
|
|
+@c pututline dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd |
|
|
+@c endutent dup @mtasurace:utent @asulock @aculock |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c updwtmp dup @mtascusig:ALRM @mtascutimer @acsfd |
|
|
The @code{login} functions inserts an entry into the user accounting |
|
|
database. The @code{ut_line} member is set to the name of the terminal |
|
|
on standard input. If standard input is not a terminal @code{login} |
|
|
@@ -1444,6 +1761,17 @@ |
|
|
@comment utmp.h |
|
|
@comment BSD |
|
|
@deftypefun int logout (const char *@var{ut_line}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:utent} @mtascusig{:ALRM} @mtascutimer{}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c logout @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @ascuheap @aculock @acsfd @acsmem |
|
|
+@c utmpname dup @mtasurace:utent @asulock @ascuheap @aculock @acsmem |
|
|
+@c setutent dup @mtasurace:utent @asulock @aculock @acsfd |
|
|
+@c strncpy dup ok |
|
|
+@c getutline_r dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd |
|
|
+@c bzero dup ok |
|
|
+@c gettimeofday dup ok |
|
|
+@c time dup ok |
|
|
+@c pututline dup @mtasurace:utent @mtascusig:ALRM @mtascutimer @asulock @aculock @acsfd |
|
|
+@c endutent dup @mtasurace:utent @asulock @aculock |
|
|
This function modifies the user accounting database to indicate that the |
|
|
user on @var{ut_line} has logged out. |
|
|
|
|
|
@@ -1454,6 +1782,14 @@ |
|
|
@comment utmp.h |
|
|
@comment BSD |
|
|
@deftypefun void logwtmp (const char *@var{ut_line}, const char *@var{ut_name}, const char *@var{ut_host}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtascusig{:ALRM} @mtascutimer{}}@asunsafe{}@acunsafe{@acsfd{}}} |
|
|
+@c logwtmp @mtascusig:ALRM @mtascutimer @acsfd |
|
|
+@c memset dup ok |
|
|
+@c getpid dup ok |
|
|
+@c strncpy dup ok |
|
|
+@c gettimeofday dup ok |
|
|
+@c time dup ok |
|
|
+@c updwtmp dup @mtascusig:ALRM @mtascutimer @acsfd |
|
|
The @code{logwtmp} function appends an entry to the user accounting log |
|
|
file, for the current time and the information provided in the |
|
|
@var{ut_line}, @var{ut_name} and @var{ut_host} arguments. |
|
|
@@ -1535,6 +1871,14 @@ |
|
|
@comment pwd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun {struct passwd *} getpwuid (uid_t @var{uid}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:pwuid} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getpwuid @mtasurace:pwuid @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c getpwuid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
This function returns a pointer to a statically-allocated structure |
|
|
containing information about the user whose user ID is @var{uid}. This |
|
|
structure may be overwritten on subsequent calls to @code{getpwuid}. |
|
|
@@ -1546,6 +1890,208 @@ |
|
|
@comment pwd.h |
|
|
@comment POSIX.1c |
|
|
@deftypefun int getpwuid_r (uid_t @var{uid}, struct passwd *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct passwd **@var{result}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getpwuid_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nscd_getpwuid_r @ascuheap @acsfd @acsmem |
|
|
+@c itoa_word dup ok |
|
|
+@c nscd_getpw_r @ascuheap @acsfd @acsmem |
|
|
+@c nscd_get_map_ref @ascuheap @acsfd @acsmem |
|
|
+@c nscd_acquire_maplock ok |
|
|
+@c nscd_get_mapping @ascuheap @acsfd @acsmem |
|
|
+@c open_socket dup @acsfd |
|
|
+@c memset dup ok |
|
|
+@c wait_on_socket dup ok |
|
|
+@c recvmsg dup ok |
|
|
+@c strcmp dup ok |
|
|
+@c fstat64 dup ok |
|
|
+@c mmap dup @acsmem |
|
|
+@c munmap dup @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c close dup ok |
|
|
+@c nscd_unmap dup @ascuheap @acsmem |
|
|
+@c nscd_cache_search ok |
|
|
+@c nis_hash ok |
|
|
+@c memcmp dup ok |
|
|
+@c nscd_open_socket @acsfd |
|
|
+@c open_socket @acsfd |
|
|
+@c socket dup @acsfd |
|
|
+@c fcntl dup ok |
|
|
+@c strcpy dup ok |
|
|
+@c connect dup ok |
|
|
+@c send dup ok |
|
|
+@c gettimeofday dup ok |
|
|
+@c poll dup ok |
|
|
+@c close_not_cancel_no_status dup @acsfd |
|
|
+@c wait_on_socket dup ok |
|
|
+@c read dup ok |
|
|
+@c close_not_cancel_no_status dup @acsfd |
|
|
+@c readall ok |
|
|
+@c read dup ok |
|
|
+@c wait_on_socket ok |
|
|
+@c poll dup ok |
|
|
+@c gettimeofday dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c close_not_cancel_no_status dup @acsfd |
|
|
+@c nscd_drop_map_ref @ascuheap @acsmem |
|
|
+@c nscd_unmap dup @ascuheap @acsmem |
|
|
+@c nscd_unmap @ascuheap @acsmem |
|
|
+@c munmap dup ok |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c nss_passwd_lookup2 @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_database_lookup @mtslocale @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c libc_lock_unlock @aculock |
|
|
+@c nss_parse_file @mtslocale @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock |
|
|
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c fsetlocking dup ok [no concurrent uses] |
|
|
+@c malloc dup @asulock @aculock @acsfd @acsmem |
|
|
+@c fclose dup @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c getline dup @ascuheap @aculock @acucorrupt @acsmem |
|
|
+@c strchrnul dup ok |
|
|
+@c nss_getline @mtslocale @ascuheap @acsmem |
|
|
+@c isspace @mtslocale^^ |
|
|
+@c strlen dup ok |
|
|
+@c malloc dup @asulock @aculock @acsfd @acsmem |
|
|
+@c memcpy dup ok |
|
|
+@c nss_parse_service_list dup @mtslocale^, @ascuheap @acsmem |
|
|
+@c feof_unlocked dup ok |
|
|
+@c free dup @asulock @aculock @acsfd @acsmem |
|
|
+@c strcmp dup ok |
|
|
+@c nss_parse_service_list @mtslocale^, @ascuheap @acsmem |
|
|
+@c isspace @mtslocale^^ |
|
|
+@c malloc dup @asulock @aculock @acsfd @acsmem |
|
|
+@c mempcpy dup ok |
|
|
+@c strncasecmp dup ok |
|
|
+@c free dup @asulock @aculock @acsfd @acsmem |
|
|
+@c malloc dup @asulock @aculock @acsfd @acsmem |
|
|
+@c nss_lookup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_lookup_function @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c tsearch @ascuheap @acucorrupt @acsmem [no @mtsrace or @asucorrupt due to locking] |
|
|
+@c known_compare ok |
|
|
+@c strcmp dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c tdelete @ascuheap @acucorrupt @acsmem [no @mtsrace or @asucorrupt due to locking] |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c nss_load_library @ascudlopen @ascuplugin @ascuheap @asulock @aculock @acsfd @acsmem |
|
|
+@c nss_new_service @ascuheap @acsmem |
|
|
+@c strcmp dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c strlen dup ok |
|
|
+@c stpcpy dup ok |
|
|
+@c libc_dlopen @ascudlopen @ascuheap @asulock @aculock @acsfd @acsmem |
|
|
+@c libc_dlsym dup @asulock @aculock @acsfd @acsmem |
|
|
+@c *ifct(*nscd_init_cb) @ascuplugin |
|
|
+@c stpcpy dup ok |
|
|
+@c libc_dlsym dup @asulock @aculock @acsfd @acsmem |
|
|
+@c libc_lock_unlock dup ok |
|
|
+@c nss_next_action ok |
|
|
+@c *fct.l -> _nss_*_getpwuid_r @ascuplugin |
|
|
+@c nss_next2 @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_next_action dup ok |
|
|
+@c nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+ |
|
|
+@c _nss_files_getpwuid_r @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c internal_setent @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c fileno dup ok |
|
|
+@c fcntl dup ok |
|
|
+@c fclose dup @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c rewind dup @aculock [stream guarded by non-recursive pwent lock] |
|
|
+@c internal_getent @mtslocale^ |
|
|
+@c fgets_unlocked dup ok [stream guarded by non-recursive pwent lock] |
|
|
+@c isspace dup @mtslocale^^ |
|
|
+@c _nss_files_parse_pwent = parse_line ok |
|
|
+@c strpbrk dup ok |
|
|
+@c internal_endent @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c fclose dup @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+ |
|
|
+@c _nss_nis_getpwuid_r ... not fully reviewed (assumed) @asuinit @asulock @acucorrupt @aculock |
|
|
+@c yp_get_default_domain @asulock @aculock |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c getdomainname dup ok |
|
|
+@c strcmp dup ok |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+@c snprintf dup @ascuheap @acsmem |
|
|
+@c yp_match |
|
|
+@c do_ypcall_tr(xdr_ypreq_key,xdr_ypresp_val) |
|
|
+@c do_ypcall(xdr_ypreq_key,xdr_ypresp_val) |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c strcmp |
|
|
+@c yp_bind |
|
|
+@c ypclnt_call |
|
|
+@c clnt_call |
|
|
+@c clnt_perror |
|
|
+@c libc_lock_unlock @aculock |
|
|
+@c yp_unbind_locked |
|
|
+@c yp_unbind |
|
|
+@c strcmp dup ok |
|
|
+@c calloc dup @asulock @aculock @acsfd @acsmem |
|
|
+@c yp_bind_file |
|
|
+@c strlen dup ok |
|
|
+@c snprintf dup @ascuheap @acsmem |
|
|
+@c open dup @acsfd [cancelpt] |
|
|
+@c pread dup [cancelpt] |
|
|
+@c yp_bind_client_create |
|
|
+@c close dup @acsfd [cancelpt] |
|
|
+@c yp_bind_ypbindprog |
|
|
+@c clnttcp_create |
|
|
+@c clnt_destroy |
|
|
+@c clnt_call(xdr_domainname,xdr_ypbind_resp) |
|
|
+@c memset dup ok |
|
|
+@c yp_bind_client_create |
|
|
+@c free dup @asulock @aculock @acsfd @acsmem |
|
|
+@c calloc dup @asulock @aculock @acsfd @acsmem |
|
|
+@c free dup @asulock @aculock @acsfd @acsmem |
|
|
+@c ypprot_err |
|
|
+@c memcpy dup ok |
|
|
+@c xdr_free(xdr_ypresp_val) |
|
|
+@c xdr_ypresp_val |
|
|
+@c xdr_ypstat |
|
|
+@c xdr_enum |
|
|
+@c XDR_PUTLONG |
|
|
+@c *x_putlong |
|
|
+@c XDR_GETLONG |
|
|
+@c *x_getlong |
|
|
+@c xdr_long |
|
|
+@c XDR_PUTLONG dup |
|
|
+@c XDR_GETLONG dup |
|
|
+@c xdr_short |
|
|
+@c XDR_PUTLONG dup |
|
|
+@c XDR_GETLONG dup |
|
|
+@c xdr_valdat |
|
|
+@c xdr_bytes |
|
|
+@c xdr_u_int |
|
|
+@c XDR_PUTLONG dup |
|
|
+@c XDR_GETLONG dup |
|
|
+@c mem_alloc @ascuheap @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c xdr_opaque |
|
|
+@c XDR_GETBYTES |
|
|
+@c *x_getbytes |
|
|
+@c XDR_PUTBYTES |
|
|
+@c *x_putbytes |
|
|
+@c mem_free @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c yperr2nss ok |
|
|
+@c strchr dup ok |
|
|
+@c _nls_default_nss @asuinit @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock |
|
|
+@c init @asuinit^, @ascuheap @asulock @acucorrupt @acsmem @acsfd @aculock |
|
|
+@c fopen dup @ascuheap @asulock @acsmem @acsfd @aculock |
|
|
+@c fsetlocking ok [no concurrent uses] |
|
|
+@c feof_unlocked dup ok |
|
|
+@c getline dup @ascuheap @aculock @acucorrupt @acsmem |
|
|
+@c isspace dup @mtslocale^^ |
|
|
+@c strncmp dup ok |
|
|
+@c free dup @asulock @acsmem @acsfd @aculock |
|
|
+@c fclose dup @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c free dup @asulock @acsmem @acsfd @aculock |
|
|
+@c mempcpy dup ok |
|
|
+@c strncpy dup ok |
|
|
+@c isspace dup @mtslocale^^ |
|
|
+@c _nss_files_parse_pwent ok |
|
|
This function is similar to @code{getpwuid} in that it returns |
|
|
information about the user whose user ID is @var{uid}. However, it |
|
|
fills the user supplied structure pointed to by @var{result_buf} with |
|
|
@@ -1568,6 +2114,14 @@ |
|
|
@comment pwd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun {struct passwd *} getpwnam (const char *@var{name}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:pwnam} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getpwnam @mtasurace:pwnam @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c getpwnam_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
This function returns a pointer to a statically-allocated structure |
|
|
containing information about the user whose user name is @var{name}. |
|
|
This structure may be overwritten on subsequent calls to |
|
|
@@ -1579,6 +2133,25 @@ |
|
|
@comment pwd.h |
|
|
@comment POSIX.1c |
|
|
@deftypefun int getpwnam_r (const char *@var{name}, struct passwd *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct passwd **@var{result}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getpwnam_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nscd_getpwnam_r @ascuheap @asulock @aculock @acsfd @acsmem |
|
|
+@c strlen dup ok |
|
|
+@c nscd_getpw_r dup @ascuheap @asulock @aculock @acsfd @acsmem |
|
|
+@c nss_passwd_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.l @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c |
|
|
+@c _nss_files_getpwnam_r @mtslocale @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c internal_setent dup @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c internal_getent dup @mtslocale^ |
|
|
+@c strcmp dup ok |
|
|
+@c internal_endent dup @ascuheap @asulock @aculock @acsmem @acsfd |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
+@c |
|
|
+@c _nss_*_getpwnam_r (assumed) @asuinit @asulock @acucorrupt @aculock |
|
|
+ |
|
|
This function is similar to @code{getpwnam} in that is returns |
|
|
information about the user whose user name is @var{name}. However, like |
|
|
@code{getpwuid_r}, it fills the user supplied buffers in |
|
|
@@ -1603,6 +2176,16 @@ |
|
|
@comment pwd.h |
|
|
@comment SVID |
|
|
@deftypefun {struct passwd *} fgetpwent (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:fpwent}}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{}}} |
|
|
+@c fgetpwent @mtasurace:fpwent @asucorrupt @asulock @acucorrupt @aculock |
|
|
+@c fgetpos dup @asucorrupt @aculock @acucorrupt |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c fgetpwent_r dup @asucorrupt @acucorrupt @aculock |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c fsetpos dup @asucorrupt @aculock @acucorrupt |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
This function reads the next user entry from @var{stream} and returns a |
|
|
pointer to the entry. The structure is statically allocated and is |
|
|
rewritten on subsequent calls to @code{fgetpwent}. You must copy the |
|
|
@@ -1615,6 +2198,14 @@ |
|
|
@comment pwd.h |
|
|
@comment GNU |
|
|
@deftypefun int fgetpwent_r (FILE *@var{stream}, struct passwd *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct passwd **@var{result}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}} |
|
|
+@c fgetpwent_r @asucorrupt @acucorrupt @aculock |
|
|
+@c flockfile dup @aculock |
|
|
+@c fgets_unlocked @asucorrupt @acucorrupt [no @mtsrace due to explicit locking] |
|
|
+@c feof_unlocked dup ok |
|
|
+@c funlockfile dup @aculock |
|
|
+@c isspace dup @mtslocale^^ |
|
|
+@c parse_line dup ok |
|
|
This function is similar to @code{fgetpwent} in that it reads the next |
|
|
user entry from @var{stream}. But the result is returned in the |
|
|
structure pointed to by @var{result_buf}. The |
|
|
@@ -1637,6 +2228,17 @@ |
|
|
@comment pwd.h |
|
|
@comment SVID, BSD |
|
|
@deftypefun void setpwent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:pwent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c setpwent @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c nss_setent(nss_passwd_lookup2) @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c ** resolv's res_maybe_init not called here |
|
|
+@c setup(nss_passwd_lookup2) @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *lookup_fct = nss_passwd_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.f @mtasurace:pwent @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_unlock @aculock |
|
|
This function initializes a stream which @code{getpwent} and |
|
|
@code{getpwent_r} use to read the user database. |
|
|
@end deftypefun |
|
|
@@ -1644,6 +2246,15 @@ |
|
|
@comment pwd.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun {struct passwd *} getpwent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:pwent} @mtasurace{:pwentbuf} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getpwent @mtasurace:pwent @mtasurace:pwentbuf @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c nss_getent(getpwent_r) @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c *func = getpwent_r dup @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
The @code{getpwent} function reads the next entry from the stream |
|
|
initialized by @code{setpwent}. It returns a pointer to the entry. The |
|
|
structure is statically allocated and is rewritten on subsequent calls |
|
|
@@ -1655,7 +2266,21 @@ |
|
|
|
|
|
@comment pwd.h |
|
|
@comment GNU |
|
|
-@deftypefun int getpwent_r (struct passwd *@var{result_buf}, char *@var{buffer}, int @var{buflen}, struct passwd **@var{result}) |
|
|
+@deftypefun int getpwent_r (struct passwd *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct passwd **@var{result}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:pwent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c The static buffer here is not the result_buf, but rather the |
|
|
+@c variables that keep track of what nss backend we've last used, and |
|
|
+@c whatever internal state the nss backend uses to keep track of the |
|
|
+@c last read entry. |
|
|
+@c getpwent_r @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c nss_getent_r(nss_passwd_lookup2) @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c setup(nss_passwd_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.f @mtasurace:pwent @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *sfct.f @mtasurace:pwent @ascuplugin |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
This function is similar to @code{getpwent} in that it returns the next |
|
|
entry from the stream initialized by @code{setpwent}. Like |
|
|
@code{fgetpwent_r}, it uses the user-supplied buffers in |
|
|
@@ -1668,6 +2293,15 @@ |
|
|
@comment pwd.h |
|
|
@comment SVID, BSD |
|
|
@deftypefun void endpwent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:pwent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c endpwent @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock @asulock @aculock |
|
|
+@c nss_endent(nss_passwd_lookup2) @mtasurace:pwent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c ** resolv's res_maybe_init not called here |
|
|
+@c setup(nss_passwd_lookup2) dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.f @mtasurace:pwent @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_unlock @aculock |
|
|
This function closes the internal stream used by @code{getpwent} or |
|
|
@code{getpwent_r}. |
|
|
@end deftypefun |
|
|
@@ -1678,6 +2312,9 @@ |
|
|
@comment pwd.h |
|
|
@comment SVID |
|
|
@deftypefun int putpwent (const struct passwd *@var{p}, FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}} |
|
|
+@c putpwent @mtslocale @asucorrupt @aculock @acucorrupt |
|
|
+@c fprintf dup @mtslocale @asucorrupt @aculock @acucorrupt [no @ascuheap @acsmem] |
|
|
This function writes the user entry @code{*@var{p}} to the stream |
|
|
@var{stream}, in the format used for the standard user database |
|
|
file. The return value is zero on success and nonzero on failure. |
|
|
@@ -1751,6 +2388,9 @@ |
|
|
@comment grp.h |
|
|
@comment POSIX.1 |
|
|
@deftypefun {struct group *} getgrgid (gid_t @var{gid}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:grgid} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getgrgid =~ getpwuid dup @mtasurace:grgid @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c getgrgid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
This function returns a pointer to a statically-allocated structure |
|
|
containing information about the group whose group ID is @var{gid}. |
|
|
This structure may be overwritten by subsequent calls to |
|
|
@@ -1762,6 +2402,26 @@ |
|
|
@comment grp.h |
|
|
@comment POSIX.1c |
|
|
@deftypefun int getgrgid_r (gid_t @var{gid}, struct group *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct group **@var{result}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getgrgid_r =~ getpwuid_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nscd_getgrgid_r @ascuheap @acsfd @acsmem |
|
|
+@c itoa_word dup ok |
|
|
+@c nscd_getgr_r @ascuheap @acsfd @acsmem |
|
|
+@c nscd_get_map_ref dup @ascuheap @acsfd @acsmem |
|
|
+@c nscd_cache_search dup ok |
|
|
+@c nscd_open_socket dup @acsfd |
|
|
+@c readvall ok |
|
|
+@c readv dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c wait_on_socket dup ok |
|
|
+@c memcpy dup ok |
|
|
+@c readall dup ok |
|
|
+@c close_not_cancel_no_status dup @acsfd |
|
|
+@c nscd_drop_map_ref dup @ascuheap @acsmem |
|
|
+@c nscd_unmap dup @ascuheap @acsmem |
|
|
+@c nss_group_lookup2 =~ nss_passwd_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.l -> _nss_*_getgrgid_r @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
This function is similar to @code{getgrgid} in that it returns |
|
|
information about the group whose group ID is @var{gid}. However, it |
|
|
fills the user supplied structure pointed to by @var{result_buf} with |
|
|
@@ -1783,6 +2443,9 @@ |
|
|
@comment grp.h |
|
|
@comment SVID, BSD |
|
|
@deftypefun {struct group *} getgrnam (const char *@var{name}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:grnam} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getgrnam =~ getpwnam dup @mtasurace:grnam @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c getgrnam_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
This function returns a pointer to a statically-allocated structure |
|
|
containing information about the group whose group name is @var{name}. |
|
|
This structure may be overwritten by subsequent calls to |
|
|
@@ -1794,6 +2457,14 @@ |
|
|
@comment grp.h |
|
|
@comment POSIX.1c |
|
|
@deftypefun int getgrnam_r (const char *@var{name}, struct group *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct group **@var{result}) |
|
|
+@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getgrnam_r =~ getpwnam_r dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nscd_getgrnam_r @ascuheap @asulock @aculock @acsfd @acsmem |
|
|
+@c strlen dup ok |
|
|
+@c nscd_getgr_r dup @ascuheap @asulock @aculock @acsfd @acsmem |
|
|
+@c nss_group_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.l @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
This function is similar to @code{getgrnam} in that is returns |
|
|
information about the group whose group name is @var{name}. Like |
|
|
@code{getgrgid_r}, it uses the user supplied buffers in |
|
|
@@ -1817,6 +2488,16 @@ |
|
|
@comment grp.h |
|
|
@comment SVID |
|
|
@deftypefun {struct group *} fgetgrent (FILE *@var{stream}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:fgrent}}@asunsafe{@asucorrupt{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{}}} |
|
|
+@c fgetgrent @mtasurace:fgrent @asucorrupt @asulock @acucorrupt @aculock |
|
|
+@c fgetpos dup @asucorrupt @aculock @acucorrupt |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c fgetgrent_r dup @asucorrupt @acucorrupt @aculock |
|
|
+@c realloc dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c fsetpos dup @asucorrupt @aculock @acucorrupt |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
The @code{fgetgrent} function reads the next entry from @var{stream}. |
|
|
It returns a pointer to the entry. The structure is statically |
|
|
allocated and is overwritten on subsequent calls to @code{fgetgrent}. You |
|
|
@@ -1830,6 +2511,14 @@ |
|
|
@comment grp.h |
|
|
@comment GNU |
|
|
@deftypefun int fgetgrent_r (FILE *@var{stream}, struct group *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct group **@var{result}) |
|
|
+@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}} |
|
|
+@c fgetgrent_r @asucorrupt @acucorrupt @aculock |
|
|
+@c flockfile dup @aculock |
|
|
+@c fgets_unlocked @asucorrupt @acucorrupt [no @mtsrace due to explicit locking] |
|
|
+@c feof_unlocked dup ok |
|
|
+@c funlockfile dup @aculock |
|
|
+@c isspace dup @mtslocale^^ |
|
|
+@c parse_line dup ok |
|
|
This function is similar to @code{fgetgrent} in that it reads the next |
|
|
user entry from @var{stream}. But the result is returned in the |
|
|
structure pointed to by @var{result_buf}. The first @var{buflen} bytes |
|
|
@@ -1852,6 +2541,9 @@ |
|
|
@comment grp.h |
|
|
@comment SVID, BSD |
|
|
@deftypefun void setgrent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:grent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c setgrent =~ setpwent dup @mtasurace:grent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c ...*lookup_fct = nss_group_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
This function initializes a stream for reading from the group data base. |
|
|
You use this stream by calling @code{getgrent} or @code{getgrent_r}. |
|
|
@end deftypefun |
|
|
@@ -1859,6 +2551,9 @@ |
|
|
@comment grp.h |
|
|
@comment SVID, BSD |
|
|
@deftypefun {struct group *} getgrent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:grent} @mtasurace{:grentbuf} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getgrent =~ getpwent dup @mtasurace:grent @mtasurace:grentbuf @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *func = getgrent_r dup @mtasurace:grent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
The @code{getgrent} function reads the next entry from the stream |
|
|
initialized by @code{setgrent}. It returns a pointer to the entry. The |
|
|
structure is statically allocated and is overwritten on subsequent calls |
|
|
@@ -1869,6 +2564,8 @@ |
|
|
@comment grp.h |
|
|
@comment GNU |
|
|
@deftypefun int getgrent_r (struct group *@var{result_buf}, char *@var{buffer}, size_t @var{buflen}, struct group **@var{result}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:grent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getgrent_r =~ getpwent_r dup @mtasurace:grent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
This function is similar to @code{getgrent} in that it returns the next |
|
|
entry from the stream initialized by @code{setgrent}. Like |
|
|
@code{fgetgrent_r}, it places the result in user-supplied buffers |
|
|
@@ -1882,6 +2579,8 @@ |
|
|
@comment grp.h |
|
|
@comment SVID, BSD |
|
|
@deftypefun void endgrent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:grent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c endgrent =~ endpwent dup @mtasurace:grent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
This function closes the internal stream used by @code{getgrent} or |
|
|
@code{getgrent_r}. |
|
|
@end deftypefun |
|
|
@@ -1966,6 +2665,40 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun int setnetgrent (const char *@var{netgroup}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:netgrent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c setnetgrent @mtasurace:netgrent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c nscd_setnetgrent @ascuheap @acsfd @acsmem |
|
|
+@c __nscd_setnetgrent @ascuheap @acsfd @acsmem |
|
|
+@c strlen dup ok |
|
|
+@c nscd_get_map_ref dup @ascuheap @acsfd @acsmem |
|
|
+@c nscd_cache_search dup ok |
|
|
+@c nscd_open_socket dup @acsfd |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c readall dup ok |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c close_not_cancel_no_status dup @acsfd |
|
|
+@c nscd_drop_map_ref dup @ascuheap @acsmem |
|
|
+@c nscd_unmap dup @ascuheap @acsmem |
|
|
+@c internal_setnetgrent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c free_memory dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c internal_setnetgrent_reuse @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c endnetgrent_hook dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *endfct @ascuplugin |
|
|
+@c (netgroup::)setup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_netgroup_lookup dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_netgroup_lookup2 =~ nss_passwd_lookup2 dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_lookup dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct.f @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *endfct @ascuplugin |
|
|
+@c strlen dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c memcpy dup ok |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
A call to this function initializes the internal state of the library to |
|
|
allow following calls of the @code{getnetgrent} to iterate over all entries |
|
|
in the netgroup with name @var{netgroup}. |
|
|
@@ -1991,6 +2724,12 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun int getnetgrent (char **@var{hostp}, char **@var{userp}, char **@var{domainp}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:netgrent} @mtasurace{:netgrentbuf} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getnetgrent @mtasurace:netgrent @mtasurace:netgrentbuf @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c uses unsafely a static buffer allocated within a libc_once call |
|
|
+@c allocate (libc_once) @ascuheap @acsmem |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c getnetgrent_r dup @mtasurace:netgrent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
This function returns the next unprocessed entry of the currently |
|
|
selected netgroup. The string pointers, in which addresses are passed in |
|
|
the arguments @var{hostp}, @var{userp}, and @var{domainp}, will contain |
|
|
@@ -2005,7 +2744,20 @@ |
|
|
|
|
|
@comment netdb.h |
|
|
@comment GNU |
|
|
-@deftypefun int getnetgrent_r (char **@var{hostp}, char **@var{userp}, char **@var{domainp}, char *@var{buffer}, int @var{buflen}) |
|
|
+@deftypefun int getnetgrent_r (char **@var{hostp}, char **@var{userp}, char **@var{domainp}, char *@var{buffer}, size_t @var{buflen}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:netgrent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c getnetgrent_r @mtasurace:netgrent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c internal_getnetgrent_r @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *fct @ascuplugin |
|
|
+@c nscd_getnetgrent ok |
|
|
+@c rawmemchr dup ok |
|
|
+@c internal_setnetgrent_reuse dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c strcmp dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c memcpy dup ok |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
This function is similar to @code{getnetgrent} with only one exception: |
|
|
the strings the three string pointers @var{hostp}, @var{userp}, and |
|
|
@var{domainp} point to, are placed in the buffer of @var{buflen} bytes |
|
|
@@ -2024,6 +2776,13 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun void endnetgrent (void) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:netgrent}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c endnetgrent @mtasurace:netgrent @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c libc_lock_lock dup @asulock @aculock |
|
|
+@c internal_endnetgrent @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c endnetgrent_hook dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c free_memory dup @ascuheap @acsmem |
|
|
+@c libc_lock_unlock dup @aculock |
|
|
This function frees all buffers which were allocated to process the last |
|
|
selected netgroup. As a result all string pointers returned by calls |
|
|
to @code{getnetgrent} are invalid afterwards. |
|
|
@@ -2039,6 +2798,37 @@ |
|
|
@comment netdb.h |
|
|
@comment BSD |
|
|
@deftypefun int innetgr (const char *@var{netgroup}, const char *@var{host}, const char *@var{user}, const char *@var{domain}) |
|
|
+@safety{@prelim{}@mtunsafe{@mtasurace{:netgrent} @mtslocale{}}@asunsafe{@ascudlopen{} @ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@acucorrupt{} @aculock{} @acsfd{} @acsmem{}}} |
|
|
+@c This function does not use the static data structure that the |
|
|
+@c *netgrent* ones do, but since each nss must maintains internal state |
|
|
+@c to support iteration and concurrent iteration will interfere |
|
|
+@c destructively, we regard this internal state as a static buffer. |
|
|
+@c getnetgrent_r iteration in each nss backend. |
|
|
+@c innetgr @mtasurace:netgrent @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c nscd_innetgr @ascuheap @acsfd @acsmem |
|
|
+@c strlen dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c stpcpy dup ok |
|
|
+@c nscd_get_map_ref dup @ascuheap @acsfd @acsmem |
|
|
+@c nscd_cache_search dup ok |
|
|
+@c nscd_open_socket dup @acsfd |
|
|
+@c close_not_cancel_no_status dup @acsfd |
|
|
+@c nscd_drop_map_ref dup @ascuheap @acsmem |
|
|
+@c nscd_unmap dup @ascuheap @acsmem |
|
|
+@c free dup @ascuheap @acsmem |
|
|
+@c memset dup ok |
|
|
+@c (netgroup::)setup dup @mtslocale @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *setfct.f @ascuplugin |
|
|
+@c nss_lookup_function dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c *getfct @ascuplugin |
|
|
+@c strcmp dup ok |
|
|
+@c strlen dup ok |
|
|
+@c malloc dup @ascuheap @acsmem |
|
|
+@c memcpy dup ok |
|
|
+@c strcasecmp dup |
|
|
+@c *endfct @ascuplugin |
|
|
+@c nss_next2 dup @ascudlopen @ascuplugin @ascuheap @asulock @acucorrupt @aculock @acsfd @acsmem |
|
|
+@c free_memory dup @ascuheap @acsmem |
|
|
This function tests whether the triple specified by the parameters |
|
|
@var{hostp}, @var{userp}, and @var{domainp} is part of the netgroup |
|
|
@var{netgroup}. Using this function has the advantage that |
|
|
@@ -2062,3 +2852,7 @@ |
|
|
itself is not found, the netgroup does not contain the triple or |
|
|
internal errors occurred. |
|
|
@end deftypefun |
|
|
+ |
|
|
+@c FIXME these are undocumented: |
|
|
+@c setresgid |
|
|
+@c setresuid
|
|
|
|