| @c Define common macros used to keep phrasing consistent in the manual. | 
 |  | 
 | @ifclear MACROS | 
 | @set MACROS | 
 |  | 
 | @c Names used to refer to the library, as noun phrases at the start or | 
 | @c not at the start of a sentence. | 
 | @macro Theglibc | 
 | The GNU C Library | 
 | @end macro | 
 | @macro theglibc | 
 | the GNU C Library | 
 | @end macro | 
 |  | 
 | @c Name used to refer to the library as an adjective. | 
 | @macro glibcadj | 
 | GNU C Library | 
 | @end macro | 
 |  | 
 | @c Description applying to all GNU systems; that is, used in | 
 | @c describing a property of a system such that no system without that | 
 | @c property would be considered a variant of the GNU system. | 
 | @macro gnusystems | 
 | GNU systems | 
 | @end macro | 
 |  | 
 | @c Systems that are not GNU systems. | 
 | @macro nongnusystems | 
 | non-GNU systems | 
 | @end macro | 
 |  | 
 | @c Description applying to GNU/Linux and GNU/Hurd systems, but not | 
 | @c necessarily to other variants of the GNU system. | 
 | @macro gnulinuxhurdsystems | 
 | GNU/Linux and GNU/Hurd systems | 
 | @end macro | 
 |  | 
 | @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 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 | 
 |  | 
 | @iftex | 
 | @macro twoexp{exp} | 
 | @math{2^{{\exp\}}} | 
 | @end macro | 
 | @end iftex | 
 | @ifnottex | 
 | @macro twoexp{exp} | 
 | 2^\exp\ | 
 | @end macro | 
 | @end ifnottex | 
 |  | 
 | @end ifclear |