about summary refs log tree commit diff
path: root/manual/pattern.texi
diff options
context:
space:
mode:
Diffstat (limited to 'manual/pattern.texi')
-rw-r--r--manual/pattern.texi219
1 files changed, 73 insertions, 146 deletions
diff --git a/manual/pattern.texi b/manual/pattern.texi
index 069a6a23ea..39ae97a3c4 100644
--- a/manual/pattern.texi
+++ b/manual/pattern.texi
@@ -25,9 +25,8 @@ particular string.  The result is a yes or no answer: does the
 string fit the pattern or not.  The symbols described here are all
 declared in @file{fnmatch.h}.
 
-@comment fnmatch.h
-@comment POSIX.2
 @deftypefun int fnmatch (const char *@var{pattern}, const char *@var{string}, int @var{flags})
+@standards{POSIX.2, fnmatch.h}
 @safety{@prelim{}@mtsafe{@mtsenv{} @mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
 @c fnmatch @mtsenv @mtslocale @ascuheap @acsmem
 @c  strnlen dup ok
@@ -75,24 +74,21 @@ returning nonzero values that are not equal to @code{FNM_NOMATCH}.
 These are the available flags for the @var{flags} argument:
 
 @vtable @code
-@comment fnmatch.h
-@comment GNU
 @item FNM_FILE_NAME
+@standards{GNU, fnmatch.h}
 Treat the @samp{/} character specially, for matching file names.  If
 this flag is set, wildcard constructs in @var{pattern} cannot match
 @samp{/} in @var{string}.  Thus, the only way to match @samp{/} is with
 an explicit @samp{/} in @var{pattern}.
 
-@comment fnmatch.h
-@comment POSIX.2
 @item FNM_PATHNAME
+@standards{POSIX.2, fnmatch.h}
 This is an alias for @code{FNM_FILE_NAME}; it comes from POSIX.2.  We
 don't recommend this name because we don't use the term ``pathname'' for
 file names.
 
-@comment fnmatch.h
-@comment POSIX.2
 @item FNM_PERIOD
+@standards{POSIX.2, fnmatch.h}
 Treat the @samp{.} character specially if it appears at the beginning of
 @var{string}.  If this flag is set, wildcard constructs in @var{pattern}
 cannot match @samp{.} as the first character of @var{string}.
@@ -103,9 +99,8 @@ special treatment applies to @samp{.} following @samp{/} as well as to
 @code{FNM_PERIOD} and @code{FNM_FILE_NAME} flags together for matching
 file names.)
 
-@comment fnmatch.h
-@comment POSIX.2
 @item FNM_NOESCAPE
+@standards{POSIX.2, fnmatch.h}
 Don't treat the @samp{\} character specially in patterns.  Normally,
 @samp{\} quotes the following character, turning off its special meaning
 (if any) so that it matches only itself.  When quoting is enabled, the
@@ -114,9 +109,8 @@ mark in the pattern acts like an ordinary character.
 
 If you use @code{FNM_NOESCAPE}, then @samp{\} is an ordinary character.
 
-@comment fnmatch.h
-@comment GNU
 @item FNM_LEADING_DIR
+@standards{GNU, fnmatch.h}
 Ignore a trailing sequence of characters starting with a @samp{/} in
 @var{string}; that is to say, test whether @var{string} starts with a
 directory name that @var{pattern} matches.
@@ -124,14 +118,12 @@ directory name that @var{pattern} matches.
 If this flag is set, either @samp{foo*} or @samp{foobar} as a pattern
 would match the string @samp{foobar/frobozz}.
 
-@comment fnmatch.h
-@comment GNU
 @item FNM_CASEFOLD
+@standards{GNU, fnmatch.h}
 Ignore case in comparing @var{string} to @var{pattern}.
 
-@comment fnmatch.h
-@comment GNU
 @item FNM_EXTMATCH
+@standards{GNU, fnmatch.h}
 @cindex Korn Shell
 @pindex ksh
 Besides the normal patterns, also recognize the extended patterns
@@ -193,9 +185,8 @@ this vector, @code{glob} uses a special data type, @code{glob_t}, which
 is a structure.  You pass @code{glob} the address of the structure, and
 it fills in the structure's fields to tell you about the results.
 
-@comment glob.h
-@comment POSIX.2
 @deftp {Data Type} glob_t
+@standards{POSIX.2, glob.h}
 This data type holds a pointer to a word vector.  More precisely, it
 records both the address of the word vector and its size.  The GNU
 implementation contains some more fields which are non-standard
@@ -314,9 +305,8 @@ definition for a very similar type.  @code{glob64_t} differs from
 @code{glob_t} only in the types of the members @code{gl_readdir},
 @code{gl_stat}, and @code{gl_lstat}.
 
-@comment glob.h
-@comment GNU
 @deftp {Data Type} glob64_t
+@standards{GNU, glob.h}
 This data type holds a pointer to a word vector.  More precisely, it
 records both the address of the word vector and its size.  The GNU
 implementation contains some more fields which are non-standard
@@ -393,9 +383,8 @@ 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})
+@standards{POSIX.2, glob.h}
 @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
@@ -480,9 +469,8 @@ If @code{glob} succeeds, it returns 0.  Otherwise, it returns one
 of these error codes:
 
 @vtable @code
-@comment glob.h
-@comment POSIX.2
 @item GLOB_ABORTED
+@standards{POSIX.2, glob.h}
 There was an error opening a directory, and you used the flag
 @code{GLOB_ERR} or your specified @var{errfunc} returned a nonzero
 value.
@@ -494,17 +482,15 @@ See below
 @end ifinfo
 for an explanation of the @code{GLOB_ERR} flag and @var{errfunc}.
 
-@comment glob.h
-@comment POSIX.2
 @item GLOB_NOMATCH
+@standards{POSIX.2, glob.h}
 The pattern didn't match any existing files.  If you use the
 @code{GLOB_NOCHECK} flag, then you never get this error code, because
 that flag tells @code{glob} to @emph{pretend} that the pattern matched
 at least one file.
 
-@comment glob.h
-@comment POSIX.2
 @item GLOB_NOSPACE
+@standards{POSIX.2, glob.h}
 It was impossible to allocate memory to hold the result.
 @end vtable
 
@@ -521,9 +507,8 @@ bit.  If these callback functions are used and a large file or directory
 is encountered @code{glob} @emph{can} fail.
 @end deftypefun
 
-@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})
+@standards{GNU, glob.h}
 @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
@@ -552,9 +537,8 @@ 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
 @item GLOB_APPEND
+@standards{POSIX.2, glob.h}
 Append the words from this expansion to the vector of words produced by
 previous calls to @code{glob}.  This way you can effectively expand
 several words as if they were concatenated with spaces between them.
@@ -570,16 +554,14 @@ have relocated the vector.  So always fetch @code{gl_pathv} from the
 @code{glob_t} structure after each @code{glob} call; @strong{never} save
 the pointer across calls.
 
-@comment glob.h
-@comment POSIX.2
 @item GLOB_DOOFFS
+@standards{POSIX.2, glob.h}
 Leave blank slots at the beginning of the vector of words.
 The @code{gl_offs} field says how many slots to leave.
 The blank slots contain null pointers.
 
-@comment glob.h
-@comment POSIX.2
 @item GLOB_ERR
+@standards{POSIX.2, glob.h}
 Give up right away and report an error if there is any difficulty
 reading the directories that must be read in order to expand @var{pattern}
 fully.  Such difficulties might include a directory in which you don't
@@ -604,23 +586,20 @@ The argument @var{filename} is the name of the directory that
 If the error handler function returns nonzero, then @code{glob} gives up
 right away.  Otherwise, it continues.
 
-@comment glob.h
-@comment POSIX.2
 @item GLOB_MARK
+@standards{POSIX.2, glob.h}
 If the pattern matches the name of a directory, append @samp{/} to the
 directory's name when returning it.
 
-@comment glob.h
-@comment POSIX.2
 @item GLOB_NOCHECK
+@standards{POSIX.2, glob.h}
 If the pattern doesn't match any file names, return the pattern itself
 as if it were a file name that had been matched.  (Normally, when the
 pattern doesn't match anything, @code{glob} returns that there were no
 matches.)
 
-@comment glob.h
-@comment POSIX.2
 @item GLOB_NOESCAPE
+@standards{POSIX.2, glob.h}
 Don't treat the @samp{\} character specially in patterns.  Normally,
 @samp{\} quotes the following character, turning off its special meaning
 (if any) so that it matches only itself.  When quoting is enabled, the
@@ -633,9 +612,8 @@ If you use @code{GLOB_NOESCAPE}, then @samp{\} is an ordinary character.
 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
+@standards{POSIX.2, glob.h}
 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.
@@ -650,23 +628,20 @@ Beside the flags described in the last section, the GNU implementation of
 which is available in modern shell implementations.
 
 @vtable @code
-@comment glob.h
-@comment GNU
 @item GLOB_PERIOD
+@standards{GNU, glob.h}
 The @code{.} character (period) is treated special.  It cannot be
 matched by wildcards.  @xref{Wildcard Matching}, @code{FNM_PERIOD}.
 
-@comment glob.h
-@comment GNU
 @item GLOB_MAGCHAR
+@standards{GNU, glob.h}
 The @code{GLOB_MAGCHAR} value is not to be given to @code{glob} in the
 @var{flags} parameter.  Instead, @code{glob} sets this bit in the
 @var{gl_flags} element of the @var{glob_t} structure provided as the
 result if the pattern used for matching contains any wildcard character.
 
-@comment glob.h
-@comment GNU
 @item GLOB_ALTDIRFUNC
+@standards{GNU, glob.h}
 Instead of using the normal functions for accessing the
 filesystem the @code{glob} implementation uses the user-supplied
 functions specified in the structure pointed to by @var{pglob}
@@ -674,9 +649,8 @@ parameter.  For more information about the functions refer to the
 sections about directory handling see @ref{Accessing Directories}, and
 @ref{Reading Attributes}.
 
-@comment glob.h
-@comment GNU
 @item GLOB_BRACE
+@standards{GNU, glob.h}
 If this flag is given, the handling of braces in the pattern is changed.
 It is now required that braces appear correctly grouped.  I.e., for each
 opening brace there must be a closing one.  Braces can be used
@@ -710,15 +684,13 @@ glob ("baz", GLOB_BRACE|GLOB_APPEND, NULL, &result)
 @noindent
 if we leave aside error handling.
 
-@comment glob.h
-@comment GNU
 @item GLOB_NOMAGIC
+@standards{GNU, glob.h}
 If the pattern contains no wildcard constructs (it is a literal file name),
 return it as the sole ``matching'' word, even if no file exists by that name.
 
-@comment glob.h
-@comment GNU
 @item GLOB_TILDE
+@standards{GNU, glob.h}
 If this flag is used the character @code{~} (tilde) is handled specially
 if it appears at the beginning of the pattern.  Instead of being taken
 verbatim it is used to represent the home directory of a known user.
@@ -753,9 +725,8 @@ looking for a directory named @code{~homer}.
 This functionality is equivalent to what is available in C-shells if the
 @code{nonomatch} flag is set.
 
-@comment glob.h
-@comment GNU
 @item GLOB_TILDE_CHECK
+@standards{GNU, glob.h}
 If this flag is used @code{glob} behaves as if @code{GLOB_TILDE} is
 given.  The only difference is that if the user name is not available or
 the home directory cannot be determined for other reasons this leads to
@@ -765,9 +736,8 @@ the pattern itself as the name.
 This functionality is equivalent to what is available in C-shells if
 the @code{nonomatch} flag is not set.
 
-@comment glob.h
-@comment GNU
 @item GLOB_ONLYDIR
+@standards{GNU, glob.h}
 If this flag is used the globbing function takes this as a
 @strong{hint} that the caller is only interested in directories
 matching the pattern.  If the information about the type of the file
@@ -787,9 +757,8 @@ type @code{glob_t} is used in multiple call to @code{glob} the resources
 are freed or reused so that no leaks appear.  But this does not include
 the time when all @code{glob} calls are done.
 
-@comment glob.h
-@comment POSIX.2
 @deftypefun void globfree (glob_t *@var{pglob})
+@standards{POSIX.2, glob.h}
 @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
 @c globfree dup @asucorrupt @ascuheap @acucorrupt @acsmem
 @c  free dup @ascuheap @acsmem
@@ -799,9 +768,8 @@ calls to @code{glob} associated with the object pointed to by
 @code{glob_t} typed object isn't used anymore.
 @end deftypefun
 
-@comment glob.h
-@comment GNU
 @deftypefun void globfree64 (glob64_t *@var{pglob})
+@standards{GNU, glob.h}
 @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}.
@@ -842,9 +810,8 @@ compiled regular expression for matching.)
 
 There is a special data type for compiled regular expressions:
 
-@comment regex.h
-@comment POSIX.2
 @deftp {Data Type} regex_t
+@standards{POSIX.2, regex.h}
 This type of object holds a compiled regular expression.
 It is actually a structure.  It has just one field that your programs
 should look at:
@@ -862,9 +829,8 @@ only the functions in the library should use them.
 After you create a @code{regex_t} object, you can compile a regular
 expression into it by calling @code{regcomp}.
 
-@comment regex.h
-@comment POSIX.2
 @deftypefun int regcomp (regex_t *restrict @var{compiled}, const char *restrict @var{pattern}, int @var{cflags})
+@standards{POSIX.2, regex.h}
 @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
@@ -1144,71 +1110,59 @@ describing the reason for a nonzero value; see @ref{Regexp Cleanup}.
 Here are the possible nonzero values that @code{regcomp} can return:
 
 @vtable @code
-@comment regex.h
-@comment POSIX.2
 @item REG_BADBR
+@standards{POSIX.2, regex.h}
 There was an invalid @samp{\@{@dots{}\@}} construct in the regular
 expression.  A valid @samp{\@{@dots{}\@}} construct must contain either
 a single number, or two numbers in increasing order separated by a
 comma.
 
-@comment regex.h
-@comment POSIX.2
 @item REG_BADPAT
+@standards{POSIX.2, regex.h}
 There was a syntax error in the regular expression.
 
-@comment regex.h
-@comment POSIX.2
 @item REG_BADRPT
+@standards{POSIX.2, regex.h}
 A repetition operator such as @samp{?} or @samp{*} appeared in a bad
 position (with no preceding subexpression to act on).
 
-@comment regex.h
-@comment POSIX.2
 @item REG_ECOLLATE
+@standards{POSIX.2, regex.h}
 The regular expression referred to an invalid collating element (one not
 defined in the current locale for string collation).  @xref{Locale
 Categories}.
 
-@comment regex.h
-@comment POSIX.2
 @item REG_ECTYPE
+@standards{POSIX.2, regex.h}
 The regular expression referred to an invalid character class name.
 
-@comment regex.h
-@comment POSIX.2
 @item REG_EESCAPE
+@standards{POSIX.2, regex.h}
 The regular expression ended with @samp{\}.
 
-@comment regex.h
-@comment POSIX.2
 @item REG_ESUBREG
+@standards{POSIX.2, regex.h}
 There was an invalid number in the @samp{\@var{digit}} construct.
 
-@comment regex.h
-@comment POSIX.2
 @item REG_EBRACK
+@standards{POSIX.2, regex.h}
 There were unbalanced square brackets in the regular expression.
 
-@comment regex.h
-@comment POSIX.2
 @item REG_EPAREN
+@standards{POSIX.2, regex.h}
 An extended regular expression had unbalanced parentheses,
 or a basic regular expression had unbalanced @samp{\(} and @samp{\)}.
 
-@comment regex.h
-@comment POSIX.2
 @item REG_EBRACE
+@standards{POSIX.2, regex.h}
 The regular expression had unbalanced @samp{\@{} and @samp{\@}}.
 
-@comment regex.h
-@comment POSIX.2
 @item REG_ERANGE
+@standards{POSIX.2, regex.h}
 One of the endpoints in a range expression was invalid.
 
-@comment regex.h
-@comment POSIX.2
 @item REG_ESPACE
+@standards{POSIX.2, regex.h}
 @code{regcomp} ran out of memory.
 @end vtable
 
@@ -1219,25 +1173,21 @@ These are the bit flags that you can use in the @var{cflags} operand when
 compiling a regular expression with @code{regcomp}.
 
 @vtable @code
-@comment regex.h
-@comment POSIX.2
 @item REG_EXTENDED
+@standards{POSIX.2, regex.h}
 Treat the pattern as an extended regular expression, rather than as a
 basic regular expression.
 
-@comment regex.h
-@comment POSIX.2
 @item REG_ICASE
+@standards{POSIX.2, regex.h}
 Ignore case when matching letters.
 
-@comment regex.h
-@comment POSIX.2
 @item REG_NOSUB
+@standards{POSIX.2, regex.h}
 Don't bother storing the contents of the @var{matchptr} array.
 
-@comment regex.h
-@comment POSIX.2
 @item REG_NEWLINE
+@standards{POSIX.2, regex.h}
 Treat a newline in @var{string} as dividing @var{string} into multiple
 lines, so that @samp{$} can match before the newline and @samp{^} can
 match after.  Also, don't permit @samp{.} to match a newline, and don't
@@ -1255,9 +1205,8 @@ Regexp Compilation}, you can match it against strings using
 unless the regular expression contains anchor characters (@samp{^} or
 @samp{$}).
 
-@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})
+@standards{POSIX.2, regex.h}
 @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
@@ -1525,16 +1474,14 @@ The function @code{regexec} accepts the following flags in the
 @var{eflags} argument:
 
 @vtable @code
-@comment regex.h
-@comment POSIX.2
 @item REG_NOTBOL
+@standards{POSIX.2, regex.h}
 Do not regard the beginning of the specified string as the beginning of
 a line; more generally, don't make any assumptions about what text might
 precede it.
 
-@comment regex.h
-@comment POSIX.2
 @item REG_NOTEOL
+@standards{POSIX.2, regex.h}
 Do not regard the end of the specified string as the end of a line; more
 generally, don't make any assumptions about what text might follow it.
 @end vtable
@@ -1542,14 +1489,12 @@ generally, don't make any assumptions about what text might follow it.
 Here are the possible nonzero values that @code{regexec} can return:
 
 @vtable @code
-@comment regex.h
-@comment POSIX.2
 @item REG_NOMATCH
+@standards{POSIX.2, regex.h}
 The pattern didn't match the string.  This isn't really an error.
 
-@comment regex.h
-@comment POSIX.2
 @item REG_ESPACE
+@standards{POSIX.2, regex.h}
 @code{regexec} ran out of memory.
 @end vtable
 
@@ -1565,9 +1510,8 @@ the entire regular expression.  Each other element of the array records
 the beginning and end of the part that matched a single parenthetical
 subexpression.
 
-@comment regex.h
-@comment POSIX.2
 @deftp {Data Type} regmatch_t
+@standards{POSIX.2, regex.h}
 This is the data type of the @var{matchptr} array that you pass to
 @code{regexec}.  It contains two structure fields, as follows:
 
@@ -1581,9 +1525,8 @@ The offset in @var{string} of the end of the substring.
 @end table
 @end deftp
 
-@comment regex.h
-@comment POSIX.2
 @deftp {Data Type} regoff_t
+@standards{POSIX.2, regex.h}
 @code{regoff_t} is an alias for another signed integer type.
 The fields of @code{regmatch_t} have type @code{regoff_t}.
 @end deftp
@@ -1658,9 +1601,8 @@ reports nonuse of the ``na'' subexpression.
 When you are finished using a compiled regular expression, you can
 free the storage it uses by calling @code{regfree}.
 
-@comment regex.h
-@comment POSIX.2
 @deftypefun void regfree (regex_t *@var{compiled})
+@standards{POSIX.2, regex.h}
 @safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
 @c (re_)free dup @ascuheap @acsmem
 @c free_dfa_content dup @ascuheap @acsmem
@@ -1678,9 +1620,8 @@ expression.
 When @code{regcomp} or @code{regexec} reports an error, you can use
 the function @code{regerror} to turn it into an error message string.
 
-@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})
+@standards{POSIX.2, regex.h}
 @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
@@ -1816,9 +1757,8 @@ vector, @code{wordexp} uses a special data type, @code{wordexp_t}, which
 is a structure.  You pass @code{wordexp} the address of the structure,
 and it fills in the structure's fields to tell you about the results.
 
-@comment wordexp.h
-@comment POSIX.2
 @deftp {Data Type} {wordexp_t}
+@standards{POSIX.2, wordexp.h}
 This data type holds a pointer to a word vector.  More precisely, it
 records both the address of the word vector and its size.
 
@@ -1845,9 +1785,8 @@ the beginning of the vector.
 @end table
 @end deftp
 
-@comment wordexp.h
-@comment POSIX.2
 @deftypefun int wordexp (const char *@var{words}, wordexp_t *@var{word-vector-ptr}, int @var{flags})
+@standards{POSIX.2, wordexp.h}
 @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
@@ -2014,43 +1953,37 @@ If @code{wordexp} succeeds, it returns 0.  Otherwise, it returns one
 of these error codes:
 
 @vtable @code
-@comment wordexp.h
-@comment POSIX.2
 @item WRDE_BADCHAR
+@standards{POSIX.2, wordexp.h}
 The input string @var{words} contains an unquoted invalid character such
 as @samp{|}.
 
-@comment wordexp.h
-@comment POSIX.2
 @item WRDE_BADVAL
+@standards{POSIX.2, wordexp.h}
 The input string refers to an undefined shell variable, and you used the flag
 @code{WRDE_UNDEF} to forbid such references.
 
-@comment wordexp.h
-@comment POSIX.2
 @item WRDE_CMDSUB
+@standards{POSIX.2, wordexp.h}
 The input string uses command substitution, and you used the flag
 @code{WRDE_NOCMD} to forbid command substitution.
 
-@comment wordexp.h
-@comment POSIX.2
 @item WRDE_NOSPACE
+@standards{POSIX.2, wordexp.h}
 It was impossible to allocate memory to hold the result.  In this case,
 @code{wordexp} can store part of the results---as much as it could
 allocate room for.
 
-@comment wordexp.h
-@comment POSIX.2
 @item WRDE_SYNTAX
+@standards{POSIX.2, wordexp.h}
 There was a syntax error in the input string.  For example, an unmatched
 quoting character is a syntax error.  This error code is also used to
 signal division by zero and overflow in arithmetic expansion.
 @end vtable
 @end deftypefun
 
-@comment wordexp.h
-@comment POSIX.2
 @deftypefun void wordfree (wordexp_t *@var{word-vector-ptr})
+@standards{POSIX.2, wordexp.h}
 @safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
 @c wordfree dup @asucorrupt @ascuheap @acucorrupt @acsmem
 @c  free dup @ascuheap @acsmem
@@ -2068,9 +2001,8 @@ This section describes the flags that you can specify in the
 and combine them with the C operator @code{|}.
 
 @vtable @code
-@comment wordexp.h
-@comment POSIX.2
 @item WRDE_APPEND
+@standards{POSIX.2, wordexp.h}
 Append the words from this expansion to the vector of words produced by
 previous calls to @code{wordexp}.  This way you can effectively expand
 several words as if they were concatenated with spaces between them.
@@ -2080,22 +2012,19 @@ word vector structure between calls to @code{wordexp}.  And, if you set
 @code{WRDE_DOOFFS} in the first call to @code{wordexp}, you must also
 set it when you append to the results.
 
-@comment wordexp.h
-@comment POSIX.2
 @item WRDE_DOOFFS
+@standards{POSIX.2, wordexp.h}
 Leave blank slots at the beginning of the vector of words.
 The @code{we_offs} field says how many slots to leave.
 The blank slots contain null pointers.
 
-@comment wordexp.h
-@comment POSIX.2
 @item WRDE_NOCMD
+@standards{POSIX.2, wordexp.h}
 Don't do command substitution; if the input requests command substitution,
 report an error.
 
-@comment wordexp.h
-@comment POSIX.2
 @item WRDE_REUSE
+@standards{POSIX.2, wordexp.h}
 Reuse a word vector made by a previous call to @code{wordexp}.
 Instead of allocating a new vector of words, this call to @code{wordexp}
 will use the vector that already exists (making it larger if necessary).
@@ -2104,17 +2033,15 @@ Note that the vector may move, so it is not safe to save an old pointer
 and use it again after calling @code{wordexp}.  You must fetch
 @code{we_pathv} anew after each call.
 
-@comment wordexp.h
-@comment POSIX.2
 @item WRDE_SHOWERR
+@standards{POSIX.2, wordexp.h}
 Do show any error messages printed by commands run by command substitution.
 More precisely, allow these commands to inherit the standard error output
 stream of the current process.  By default, @code{wordexp} gives these
 commands a standard error stream that discards all output.
 
-@comment wordexp.h
-@comment POSIX.2
 @item WRDE_UNDEF
+@standards{POSIX.2, wordexp.h}
 If the input refers to a shell variable that is not defined, report an
 error.
 @end vtable