Print this page
Ensured various XPG7 stuff are declared properly in sys/stat.h (and cleanup)
New documentation for wcslen, wcsnlen, wcscasecmp (and friends), wcsdup.
Various other tweaks and markup improvements.
Various tweaks -- add our sections, etc.
Fixes for wcstok.
Finished obsoleting interfaces for XPG7.

Split Close
Expand all
Collapse all
          --- old/usr/src/man/man3c/wcstring.3c
          +++ new/usr/src/man/man3c/wcstring.3c
   1      -'\" te
        1 +.\" Copyright 2014 Garrett D'Amore <garrett@damore.org>
   2    2  .\"  Copyright (c) 1992, X/Open Company Limited  All Rights Reserved  Portions Copyright (c) 2002, Sun Microsystems, Inc.  All Rights Reserved
   3    3  .\" Sun Microsystems, Inc. gratefully acknowledges The Open Group for permission to reproduce portions of its copyrighted documentation. Original documentation from The Open Group can be obtained online at
   4    4  .\" http://www.opengroup.org/bookstore/.
   5    5  .\" The Institute of Electrical and Electronics Engineers and The Open Group, have given us permission to reprint portions of their documentation. In the following statement, the phrase "this text" refers to portions of the system documentation. Portions of this text are reprinted and reproduced in electronic form in the Sun OS Reference Manual, from IEEE Std 1003.1, 2004 Edition, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2004 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. In the event of any discrepancy between these versions and the original IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee document. The original Standard can be obtained online at http://www.opengroup.org/unix/online.html.
   6    6  .\"  This notice shall appear on any product containing this material.
   7    7  .\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License.
   8    8  .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.  See the License for the specific language governing permissions and limitations under the License.
   9    9  .\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
  10      -.TH WCSTRING 3C "Aug 14, 2002"
  11      -.SH NAME
  12      -wcstring, wcscat, wscat, wcsncat, wsncat, wcscmp, wscmp, wcsncmp, wsncmp,
  13      -wcscpy, wscpy, wcsncpy, wsncpy, wcslen, wslen, wcschr, wschr, wcsrchr, wsrchr,
  14      -windex, wrindex, wcspbrk, wspbrk, wcswcs, wcsspn, wsspn, wcscspn, wscspn,
  15      -wcstok, wstok \- wide-character string operations
  16      -.SH SYNOPSIS
  17      -.LP
  18      -.nf
  19      -#include <wchar.h>
  20      -
  21      -\fBwchar_t *\fR\fBwcscat\fR(\fBwchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR);
  22      -.fi
  23      -
  24      -.LP
  25      -.nf
  26      -\fBwchar_t *\fR\fBwcsncat\fR(\fBwchar_t *restrict\fR \fIws1\fR, \fBconst wchar_t *restrict\fR \fIws2\fR,
  27      -     \fBsize_t\fR \fIn\fR);
  28      -.fi
  29      -
  30      -.LP
  31      -.nf
  32      -\fBint\fR \fBwcscmp\fR(\fBconst wchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR);
  33      -.fi
  34      -
  35      -.LP
  36      -.nf
  37      -\fBint\fR \fBwcsncmp\fR(\fBconst wchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR, \fBsize_t\fR \fIn\fR);
  38      -.fi
  39      -
  40      -.LP
  41      -.nf
  42      -\fBwchar_t *\fR\fBwcscpy\fR(\fBwchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR);
  43      -.fi
  44      -
  45      -.LP
  46      -.nf
  47      -\fBwchar_t *\fR\fBwcsncpy\fR(\fBwchar_t *restrict\fR \fIws1\fR, \fBconst wchar_t *restrict\fR \fIws2\fR,
  48      -     \fBsize_t\fR \fIn\fR);
  49      -.fi
  50      -
  51      -.LP
  52      -.nf
  53      -\fBsize_t\fR \fBwcslen\fR(\fBconst wchar_t *\fR\fIws\fR);
  54      -.fi
  55      -
  56      -.LP
  57      -.nf
  58      -\fBwchar_t *\fR\fBwcschr\fR(\fBconst wchar_t *\fR\fIws\fR, \fBwchar_t\fR \fIwc\fR);
  59      -.fi
  60      -
  61      -.LP
  62      -.nf
  63      -\fBwchar_t *\fR\fBwcsrchr\fR(\fBconst wchar_t *\fR\fIws\fR, \fBwchar_t\fR \fIwc\fR);
  64      -.fi
  65      -
  66      -.LP
  67      -.nf
  68      -\fBwchar_t *\fR\fBwcspbrk\fR(\fBconst wchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR);
  69      -.fi
  70      -
  71      -.LP
  72      -.nf
  73      -\fBwchar_t *\fR\fBwcswcs\fR(\fBconst wchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR);
  74      -.fi
  75      -
  76      -.LP
  77      -.nf
  78      -\fBsize_t\fR \fBwcsspn\fR(\fBconst wchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR);
  79      -.fi
  80      -
  81      -.LP
  82      -.nf
  83      -\fBsize_t\fR \fBwcscspn\fR(\fBconst wchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR);
  84      -.fi
  85      -
  86      -.SS "XPG4, SUS, SUSv2, SUSv3"
  87      -.LP
  88      -.nf
  89      -\fBwchar_t *\fR\fBwcstok\fR(\fBwchar_t *restrict\fR \fIws1\fR, \fBconst wchar_t *restrict\fR \fIws2\fR);
  90      -.fi
  91      -
  92      -.SS "Default and other standards"
  93      -.LP
  94      -.nf
  95      -\fBwchar_t *\fR\fBwcstok\fR(\fBwchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR, \fBwchar_t **\fR\fIptr\fR);
  96      -.fi
  97      -
  98      -.LP
  99      -.nf
 100      -#include <widec.h>
 101      -
 102      -\fBwchar_t *\fR\fBwscat\fR(\fBwchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR);
 103      -.fi
 104      -
 105      -.LP
 106      -.nf
 107      -\fBwchar_t *\fR\fBwsncat\fR(\fBwchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR, \fBsize_t\fR \fIn\fR);
 108      -.fi
 109      -
 110      -.LP
 111      -.nf
 112      -\fBint\fR \fBwscmp\fR(\fBconst wchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR);
 113      -.fi
 114      -
 115      -.LP
 116      -.nf
 117      -\fBint\fR \fBwsncmp\fR(\fBconst wchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR, \fBsize_t\fR \fIn\fR);
 118      -.fi
 119      -
 120      -.LP
 121      -.nf
 122      -\fBwchar_t *\fR\fBwscpy\fR(\fBwchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR);
 123      -.fi
 124      -
 125      -.LP
 126      -.nf
 127      -\fBwchar_t *\fR\fBwsncpy\fR(\fBwchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR, \fBsize_t\fR \fIn\fR);
 128      -.fi
 129      -
 130      -.LP
 131      -.nf
 132      -\fBsize_t\fR \fBwslen\fR(\fBconst wchar_t *\fR\fIws\fR);
 133      -.fi
 134      -
 135      -.LP
 136      -.nf
 137      -\fBwchar_t *\fR\fBwschr\fR(\fBconst wchar_t *\fR\fIws\fR, \fBwchat_t\fR \fIwc\fR);
 138      -.fi
 139      -
 140      -.LP
 141      -.nf
 142      -\fBwchar_t *\fR\fBwsrchr\fR(\fBconst wchar_t *\fR\fIws\fR, \fBwchat_t\fR \fIwc\fR);
 143      -.fi
 144      -
 145      -.LP
 146      -.nf
 147      -\fBwchar_t *\fR\fBwspbrk\fR(\fBconst wchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR);
 148      -.fi
 149      -
 150      -.LP
 151      -.nf
 152      -\fBsize_t\fR \fBwsspn\fR(\fBconst wchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR);
 153      -.fi
 154      -
 155      -.LP
 156      -.nf
 157      -\fBsize_t\fR \fBwscspn\fR(\fBconst wchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR);
 158      -.fi
 159      -
 160      -.LP
 161      -.nf
 162      -\fBwchar_t *\fR\fBwstok\fR(\fBwchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR);
 163      -.fi
 164      -
 165      -.LP
 166      -.nf
 167      -\fBwchar_t *\fR\fBwindex\fR(\fBconst wchar_t *\fR\fIws\fR, \fBwchar_t\fR \fIwc\fR);
 168      -.fi
 169      -
 170      -.LP
 171      -.nf
 172      -\fBwchar_t *\fR\fBwrindex\fR(\fBconst wchar_t *\fR\fIws\fR, \fBwchar_t\fR \fIwc\fR);
 173      -.fi
 174      -
 175      -.SS "ISO C++"
 176      -.LP
 177      -.nf
 178      -#include <wchar.h>
 179      -
 180      -\fBconst wchar_t *\fR\fBwcschr\fR(\fBconst wchar_t *\fR\fIws\fR, \fBwchar_t\fR \fIwc\fR);
 181      -.fi
 182      -
 183      -.LP
 184      -.nf
 185      -\fBconst wchar_t *\fR\fBwcspbrk\fR(\fBconst wchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR);
 186      -.fi
 187      -
 188      -.LP
 189      -.nf
 190      -\fBconst wchar_t *\fR\fBwcsrchr\fR(\fBconst wchar_t *\fR\fIws\fR, \fBwchar_t\fR \fIwc\fR);
 191      -.fi
 192      -
 193      -.LP
 194      -.nf
 195      -#include <cwchar>
 196      -
 197      -\fBwchar_t *std::\fR\fBwcschr\fR(\fBwchar_t *\fR\fIws\fR, \fBwchar_t\fR \fIwc\fR);
 198      -.fi
 199      -
 200      -.LP
 201      -.nf
 202      -\fBwchar_t *std::\fR\fBwcspbrk\fR(\fBwchar_t *\fR\fIws1\fR, \fBconst wchar_t *\fR\fIws2\fR);
 203      -.fi
 204      -
 205      -.LP
 206      -.nf
 207      -\fBwchar_t *std::\fR\fBwcsrchr\fR(\fBwchar_t *\fR\fIws\fR, \fBwchar_t\fR \fIwc\fR);
 208      -.fi
 209      -
 210      -.SH DESCRIPTION
 211      -.sp
 212      -.LP
 213      -These functions operate on wide-character strings terminated by \fBwchar_t\fR
 214      -\fINULL\fR characters. During appending or copying, these routines do not check
 215      -for an overflow condition of the receiving string. In the following, \fIws\fR,
 216      -\fIws1\fR, and \fIws2\fR point to wide-character strings terminated by a
 217      -\fBwchar_t NULL\fR.
 218      -.SS "wcscat(\|), wscat(\|)"
 219      -.sp
 220      -.LP
 221      -The \fBwcscat()\fR and \fBwscat()\fR functions append a copy of the
 222      -wide-character string pointed to by \fIws2\fR (including the terminating null
       10 +.Dd "Jul 22, 2014"
       11 +.Dt WCSTRING 3C
       12 +.Os
       13 +.Sh NAME
       14 +.Nm wcstring ,
       15 +.Nm wcscat ,
       16 +.Nm wscat ,
       17 +.Nm wcsncat ,
       18 +.Nm wsncat ,
       19 +.Nm wcscmp ,
       20 +.Nm wscmp ,
       21 +.Nm wcsncmp ,
       22 +.Nm wsncmp ,
       23 +.Nm wcscpy ,
       24 +.Nm wscpy ,
       25 +.Nm wcsncpy ,
       26 +.Nm wsncpy ,
       27 +.Nm wcschr ,
       28 +.Nm wschr ,
       29 +.Nm wcsrchr ,
       30 +.Nm wsrchr ,
       31 +.Nm windex ,
       32 +.Nm wrindex ,
       33 +.Nm wcspbrk ,
       34 +.Nm wspbrk ,
       35 +.Nm wcswcs ,
       36 +.Nm wcsspn ,
       37 +.Nm wsspn ,
       38 +.Nm wcscspn ,
       39 +.Nm wscspn ,
       40 +.Nm wcstok ,
       41 +.Nm wstok
       42 +.Nd wide-character string operations
       43 +.
       44 +.Sh SYNOPSIS
       45 +.In wchar.h
       46 +.
       47 +.Ft "wchar_t *"
       48 +.Fn wcscat "wchar_t *ws1" "const wchar_t *ws2"
       49 +.
       50 +.Ft "wchar_t *"
       51 +.Fn wcsncat "wchar_t *restrict ws1" "const wchar_t *restrict ws2" "size_t n"
       52 +.
       53 +.Ft int
       54 +.Fn wcscmp "const wchar_t *ws1" "const wchar_t *ws2"
       55 +.
       56 +.Ft int
       57 +.Fn wcsncmp "const wchar_t *ws1" "const wchar_t *ws2" "size_t n"
       58 +.
       59 +.Ft "wchar_t *"
       60 +.Fn wcscpy "wchar_t *ws1" "const wchar_t *ws2"
       61 +.
       62 +.Ft "wchar_t *"
       63 +.Fn wcsncpy "wchar_t *restrict ws1" "const wchar_t *restrict ws2" "size_t n"
       64 +.
       65 +.Ft "wchar_t *"
       66 +.Fn wcschr "const wchar_t *ws" "wchar_t wc"
       67 +.
       68 +.Ft "wchar_t *"
       69 +.Fn wcsrchr "const wchar_t *ws" "wchar_t wc"
       70 +.
       71 +.Ft "wchar_t *"
       72 +.Fn wcspbrk "const wchar_t *ws1" "const wchar_t *ws2"
       73 +.
       74 +.Ft "wchar_t *"
       75 +.Fn wcswcs "const wchar_t *ws1" "const wchar_t *ws2"
       76 +.
       77 +.Ft size_t
       78 +.Fn wcsspn "const wchar_t *ws1" "const wchar_t *ws2"
       79 +.
       80 +.Ft size_t
       81 +.Fn wcscspn "const wchar_t *ws1" "const wchar_t *ws2"
       82 +.
       83 +.Ss "XPG4 and SUS"
       84 +.
       85 +.Ft "wchar_t *"
       86 +.Fn wcstok "wchar_t *restrict ws1" "const wchar_t *restrict ws2"
       87 +.
       88 +.Ss "Default and other standards"
       89 +.
       90 +.Ft "wchar_t *"
       91 +.Fo wcstok
       92 +.Fa "wchar_t *restrict ws1"
       93 +.Fa "const wchar_t *restrict ws2"
       94 +.Fa "wchar_t **restrict ptr"
       95 +.Fc
       96 +.
       97 +.In widec.h
       98 +.
       99 +.Ft wchar_t *
      100 +.Fn wscat "wchar_t *ws1" "const wchar_t *ws2"
      101 +.
      102 +.Ft "wchar_t *"
      103 +.Fn wsncat "wchar_t *ws1" "const wchar_t *ws2" "size_t n"
      104 +.
      105 +.Ft int
      106 +.Fn wscmp "const wchar_t *ws1" "const wchar_t *ws2"
      107 +.
      108 +.Ft int
      109 +.Fn wsncmp "const wchar_t *ws1" "const wchar_t *ws2" "size_t n"
      110 +.
      111 +.Ft "wchar_t *"
      112 +.Fn wscpy "wchar_t *ws1" "const wchar_t *ws2"
      113 +.
      114 +.Ft "wchar_t *"
      115 +.Fn wsncpy "wchar_t *ws1" "const wchar_t *ws2" "size_t n"
      116 +.
      117 +.Ft "wchar_t *"
      118 +.Fn wschr "const wchar_t *ws" "wchat_t wc"
      119 +.
      120 +.Ft "wchar_t *"
      121 +.Fn wsrchr "const wchar_t *ws" "wchar_t wc"
      122 +.
      123 +.Ft "wchar_t *"
      124 +.Fn wspbrk "const wchar_t *ws1" "const wchar_t *ws2"
      125 +.
      126 +.Ft size_t
      127 +.Fn wsspn "const wchar_t *ws1" "const wchar_t *ws2"
      128 +.
      129 +.Ft size_t
      130 +.Fn wscspn "const wchar_t *ws1" "const wchar_t *ws2"
      131 +.
      132 +.Ft "wchar_t *"
      133 +.Fn wstok "wchar_t *ws1" "const wchar_t *ws2"
      134 +.
      135 +.Ft "wchar_t *"
      136 +.Fn windex "const wchar_t *ws" "wchar_t wc"
      137 +.
      138 +.Ft "wchar_t *"
      139 +.Fn wrindex "const wchar_t *ws" "wchar_t wc"
      140 +.
      141 +.Ss "ISO C++"
      142 +.
      143 +.In wchar.h
      144 +.
      145 +.Ft "const wchar_t *"
      146 +.Fn wcschr "const wchar_t *ws" "wchar_t wc"
      147 +.
      148 +.Ft "const wchar_t *"
      149 +.Fn wcspbrk "const wchar_t *ws1" "const wchar_t *ws2"
      150 +.
      151 +.Ft "const wchar_t *"
      152 +.Fn wcsrchr "const wchar_t *ws" "wchar_t wc"
      153 +.
      154 +.In cwchar
      155 +.
      156 +.Ft wchar_t *
      157 +.Fn std::wcschr "wchar_t *ws" "wchar_t wc"
      158 +.
      159 +.Ft "wchar_t *"
      160 +.Fn std::wcspbrk "wchar_t *ws1" "const wchar_t *ws2"
      161 +.
      162 +.Ft "wchar_t *"
      163 +.Fn std::wcsrchr "wchar_t *ws" "wchar_t wc"
      164 +.
      165 +.Sh DESCRIPTION
      166 +.
      167 +These functions operate on wide-character strings terminated by
      168 +.Ft wchar_t
      169 +null characters. During appending or copying, these routines do not check
      170 +for an overflow condition of the receiving string. In the following,
      171 +.Fa ws ,
      172 +.Fa ws1 ,
      173 +and
      174 +.Fa ws2
      175 +point to wide-character strings terminated by a
      176 +.Ft wchar_t
      177 +null, that is
      178 +.Pq Vt wchar_t
      179 +0.
      180 +.
      181 +.Ss Fn wcscat , wscat
      182 +.
      183 +The
      184 +.Fn wcscat and
      185 +.Fn wscat
      186 +functions append a copy of the
      187 +wide-character string pointed to by
      188 +.Fa ws2
      189 +(including the terminating null
 223  190  wide-character code) to the end of the wide-character string pointed to by
 224      -\fIws1\fR. The initial wide-character code of \fIws2\fR overwrites the null
 225      -wide-character code at the end of \fIws1\fR. If copying takes place between
      191 +.Fa ws1 .
      192 +The initial wide-character code of
      193 +.Fa ws2
      194 +overwrites the null wide-character code at the end of
      195 +.Fa ws1 .
      196 +If copying takes place between
 226  197  objects that overlap, the behavior is undefined. Both functions return
 227      -\fIs1\fR; no return value is reserved to indicate an error.
 228      -.SS "wcsncat(\|), wsncat(\|)"
 229      -.sp
 230      -.LP
 231      -The \fBwcsncat()\fR and \fBwsncat()\fR functions append not more than \fIn\fR
      198 +.Fa ws1 ;
      199 +no return value is reserved to indicate an error.
      200 +.
      201 +.Ss Fn wcsncat , wsncat
      202 +.
      203 +The
      204 +.Fn wcsncat
      205 +and
      206 +.Fn wsncat
      207 +functions append not more than
      208 +.Fa n
 232  209  wide-character codes (a null wide-character code and wide-character codes that
 233      -follow it are not appended) from the array pointed to by \fIws2\fR to the end
 234      -of the wide-character string pointed to by \fIws1\fR. The initial
 235      -wide-character code of \fIws2\fR overwrites the null wide-character code at the
 236      -end of \fIws1\fR. A terminating null wide-character code is always appended to
 237      -the result. Both functions return \fIws1\fR; no return value is reserved to
 238      -indicate an error.
 239      -.SS "wcscmp(\|), wscmp(\|)"
 240      -.sp
 241      -.LP
 242      -The \fBwcscmp()\fR and \fBwscmp()\fR functions compare the wide-character
 243      -string pointed to by \fIws1\fR to the wide-character string pointed to by
 244      -\fIws2\fR. The sign of a non-zero return value is determined by the sign of the
      210 +follow it are not appended) from the array pointed to by
      211 +.Fa ws2
      212 +to the end of the wide-character string pointed to by
      213 +.Fa ws1 .
      214 +The initial wide-character code of
      215 +.Fa ws2
      216 +overwrites the null wide-character code at the
      217 +end of
      218 +.Fa ws1 .
      219 +A terminating null wide-character code is always appended to
      220 +the result. Both functions return
      221 +.Fa ws1 ;
      222 +no return value is reserved to indicate an error.
      223 +.
      224 +.Ss Fn wcscmp , wscmp
      225 +.
      226 +The
      227 +.Fn wcscmp
      228 +and
      229 +.Fn wscmp
      230 +functions compare the wide-character string pointed to by
      231 +.Fa ws1
      232 +to the wide-character string pointed to by
      233 +.Fa ws2 .
      234 +The sign of a non-zero return value is determined by the sign of the
 245  235  difference between the values of the first pair of wide-character codes that
 246  236  differ in the objects being compared. Upon completion, both functions return an
 247  237  integer greater than, equal to, or less than zero, if the wide-character string
 248      -pointed to by \fIws1\fR is greater than, equal to, or less than the
 249      -wide-character string pointed to by \fIws2\fR.
 250      -.SS "wcsncmp(\|), wsncmp(\|)"
 251      -.sp
 252      -.LP
 253      -The \fBwcsncmp()\fR and \fBwsncmp()\fR functions compare not more than \fIn\fR
      238 +pointed to by
      239 +.Fa ws1
      240 +is greater than, equal to, or less than the
      241 +wide-character string pointed to by
      242 +.Fa ws2 .
      243 +.
      244 +.Ss Fn wcsncmp , wsncmp
      245 +.
      246 +The
      247 +.Fn wcsncmp
      248 +and
      249 +.Fn wsncmp
      250 +functions compare not more than
      251 +.Fa n
 254  252  wide-character codes (wide-character codes that follow a null wide character
 255      -code are not compared) from the array pointed to by \fIws1\fR to the array
 256      -pointed to by \fIws2\fR. The sign of a non-zero return value is determined by
      253 +code are not compared) from the array pointed to by
      254 +.Fa ws1
      255 +to the array pointed to by
      256 +.Fa ws2 .
      257 +The sign of a non-zero return value is determined by
 257  258  the sign of the difference between the values of the first pair of
 258  259  wide-character codes that differ in the objects being compared. Upon successful
 259  260  completion, both functions return an integer greater than, equal to, or less
 260      -than zero, if the possibly null-terminated array pointed to by \fIws1\fR is
      261 +than zero, if the possibly null-terminated array pointed to by
      262 +.Fa ws1
      263 +is
 261  264  greater than, equal to, or less than the possibly null-terminated array pointed
 262      -to by \fIws2\fR.
 263      -.SS "wcscpy(\|), wscpy(\|)"
 264      -.sp
 265      -.LP
 266      -The \fBwcscpy()\fR and \fBwscpy()\fR functions copy the wide-character string
 267      -pointed to by \fIws2\fR (including the terminating null wide-character code)
 268      -into the array pointed to by \fIws1\fR. If copying takes place between objects
 269      -that overlap, the behavior is undefined. Both functions return \fIws1\fR; no
 270      -return value is reserved to indicate an error.
 271      -.SS "wcsncpy(\|), wsncpy(\|)"
 272      -.sp
 273      -.LP
 274      -The \fBwcsncpy()\fR and \fBwsncpy()\fR functions  copy not more than \fIn\fR
      265 +to by
      266 +.Fa ws2 .
      267 +.
      268 +.Ss Fn wcscpy , wscpy
      269 +.
      270 +The
      271 +.Fn wcscpy
      272 +and
      273 +.Fn wscpy
      274 +functions copy the wide-character string
      275 +pointed to by
      276 +.Fa ws2
      277 +(including the terminating null wide-character code)
      278 +into the array pointed to by
      279 +.Fa ws1 .
      280 +If copying takes place between objects
      281 +that overlap, the behavior is undefined. Both functions return
      282 +.Fa ws1 ;
      283 +no return value is reserved to indicate an error.
      284 +.
      285 +.Ss Fn wcsncpy , wsncpy
      286 +.
      287 +The
      288 +.Fn wcsncpy
      289 +and
      290 +.Fn wsncpy
      291 +functions copy not more than
      292 +.Fa n
 275  293  wide-character codes (wide-character codes that follow a null wide character
 276      -code are not copied) from the array pointed to by \fIws2\fR to the array
 277      -pointed to by \fIws1\fR. If copying takes place between objects that overlap,
 278      -the behavior is undefined. If the array pointed to by \fIws2\fR is a
 279      -wide-character string that is shorter than \fIn\fR wide-character codes, null
      294 +code are not copied) from the array pointed to by
      295 +.Fa ws2
      296 +to the array pointed to by
      297 +.Fa ws1 .
      298 +If copying takes place between objects that overlap,
      299 +the behavior is undefined. If the array pointed to by
      300 +.Fa ws2
      301 +is a wide-character string that is shorter than
      302 +.Fa n
      303 +wide-character codes, null
 280  304  wide-character codes are appended to the copy in the array pointed to by
 281      -\fIws1\fR, until a total \fIn\fR wide-character codes are written. Both
 282      -functions return \fI ws1\fR; no return value is reserved to indicate an error.
 283      -.SS "wcslen(\|), wslen(\|)"
 284      -.sp
 285      -.LP
 286      -The \fBwcslen()\fR and \fBwslen()\fR functions compute the number of
 287      -wide-character codes in the wide-character string to which \fIws\fR points, not
 288      -including the terminating null wide-character code. Both functions return
 289      -\fIws\fR; no return value is reserved to indicate an error.
 290      -.SS "wcschr(\|), wschr(\|)"
 291      -.sp
 292      -.LP
 293      -The \fBwcschr()\fR and \fBwschr()\fR functions locate the first occurrence of
 294      -\fIwc\fR in the wide-character string pointed to by \fIws\fR. The value of
 295      -\fIwc\fR must be a character representable as a type \fBwchar_t\fR and must be
      305 +.Fa ws1 ,
      306 +until a total
      307 +.Fa n
      308 +wide-character codes are written. Both
      309 +functions return
      310 +.Fa ws1 ;
      311 +no return value is reserved to indicate an error.
      312 +.
      313 +.Ss Fn wcschr , wschr , windex
      314 +.
      315 +The
      316 +.Fn wcschr ,
      317 +.Fn wschr
      318 +and
      319 +.Fn windex
      320 +functions locate the first occurrence of
      321 +.Fa wc
      322 +in the wide-character string pointed to by
      323 +.Fa ws .
      324 +The value of
      325 +.Fa wc
      326 +must be a character representable as a type
      327 +.Vt wchar_t
      328 +and must be
 296  329  a wide-character code corresponding to a valid character in the current locale.
 297  330  The terminating null wide-character code is considered to be part of the
 298  331  wide-character string. Upon completion, both functions return a pointer to the
 299  332  wide-character code, or a null pointer if the wide-character code is not found.
 300      -.SS "wcsrchr(\|), wsrchr(\|)"
 301      -.sp
 302      -.LP
 303      -The \fBwcsrchr()\fR and \fBwsrchr()\fR functions locate the last occurrence of
 304      -\fIwc\fR in the wide-character string pointed to by \fIws\fR. The value of
 305      -\fIwc\fR must be a character representable as a type \fBwchar_t\fR and must be
      333 +.
      334 +.Ss Fn wcsrchr , wsrchr , wrindex
      335 +.
      336 +The
      337 +.Fn wcsrchr ,
      338 +.Fn wsrchr
      339 +and
      340 +.Fn wrindex
      341 +functions locate the last occurrence of
      342 +.Fa wc
      343 +in the wide-character string pointed to by
      344 +.Fa ws .
      345 +The value of
      346 +.Fa wc
      347 +must be a character representable as a type
      348 +.Vt wchar_t
      349 +and must be
 306  350  a wide-character code corresponding to a valid character in the current locale.
 307  351  The terminating null wide-character code is considered to be part of the
 308  352  wide-character string. Upon successful completion, both functions return a
 309      -pointer to the wide-character code, or a null pointer if \fIwc\fR does not
 310      -occur in the wide-character string.
 311      -.SS "windex(\|), wrindex(\|)"
 312      -.sp
 313      -.LP
 314      -The \fBwindex()\fR and \fBwrindex()\fR functions behave the same as
 315      -\fBwschr()\fR and \fBwsrchr()\fR, respectively.
 316      -.SS "wcspbrk(\|), wspbrk(\|)"
 317      -.sp
 318      -.LP
 319      -The \fBwcspbrk()\fR and \fBwspbrk()\fR functions locate the first occurrence in
 320      -the wide character string pointed to by \fIws1\fR of any wide-character code
 321      -from the wide-character string pointed to by \fIws2\fR. Upon successful
      353 +pointer to the wide-character code, or a null pointer if
      354 +.Fa wc
      355 +does not occur in the wide-character string.
      356 +.
      357 +.Ss wcspbrk , wspbrk
      358 +.
      359 +The
      360 +.Fn wcspbrk
      361 +and
      362 +.Fn wspbrk
      363 +functions locate the first occurrence in
      364 +the wide character string pointed to by
      365 +.Fa ws1
      366 +of any wide-character code
      367 +from the wide-character string pointed to by
      368 +.Fa ws2 .
      369 +Upon successful
 322  370  completion, the function returns a pointer to the wide-character code, or a
 323      -null pointer if no wide-character code from \fIws2\fR occurs in \fIws1\fR.
 324      -.SS "wcswcs(\|)"
 325      -.sp
 326      -.LP
 327      -The \fBwcswcs()\fR function locates the first occurrence in the wide-character
 328      -string pointed to by \fIws1\fR of the sequence of wide-character codes
      371 +null pointer if no wide-character code from
      372 +.Fa ws2
      373 +occurs in
      374 +.Fa ws1 .
      375 +.
      376 +.Ss "wcswcs(\|)"
      377 +.
      378 +The
      379 +.Fn wcswcs
      380 +function locates the first occurrence in the wide-character
      381 +string pointed to by
      382 +.Fa ws1
      383 +of the sequence of wide-character codes
 329  384  (excluding the terminating null wide-character code) in the wide-character
 330      -string pointed to by \fIws2\fR. Upon successful completion, the function
      385 +string pointed to by
      386 +.Fa ws2 .
      387 +Upon successful completion, the function
 331  388  returns a pointer to the located wide-character string, or a null pointer if
 332      -the wide-character string is not found. If \fIws2\fR points to a wide-character
 333      -string with zero length, the function returns \fIws1\fR.
 334      -.SS "wcsspn(\|), wsspn(\|)"
 335      -.sp
 336      -.LP
 337      -The \fBwcsspn()\fR and \fBwsspn()\fR functions compute the length of the
 338      -maximum initial segment of the wide-character string pointed to by \fIws1\fR
      389 +the wide-character string is not found. If
      390 +.Fa ws2
      391 +points to a wide-character
      392 +string with zero length, the function returns
      393 +.Fa ws1 .
      394 +.
      395 +.Ss Fn wcsspn , wsspn
      396 +.
      397 +The
      398 +.Fn wcsspn
      399 +and
      400 +.Fn wsspn
      401 +functions return the length of the
      402 +maximum initial segment of the wide-character string pointed to by
      403 +.Fa ws1
 339  404  which consists entirely of wide-character codes from the wide-character string
 340      -pointed to by \fIws2\fR. Both functions return the length \fIws1\fR; no return
 341      -value is reserved to indicate an error.
 342      -.SS "wcscspn(\|), wscspn(\|)"
 343      -.sp
 344      -.LP
 345      -The \fBwcscspn()\fR and \fBwscspn()\fR functions compute the length of the
 346      -maximum initial segment of the wide-character string pointed to by \fIws1\fR
 347      -which consists entirely of wide-character codes \fInot\fR from the
 348      -wide-character string pointed to by \fIws2\fR. Both functions return the length
 349      -of the initial substring of \fIws1\fR; no return value is reserved to indicate
 350      -an error.
 351      -.SS "wcstok(\|), wstok(\|)"
 352      -.sp
 353      -.LP
 354      -A sequence of calls to the \fBwcstok()\fR and \fBwstok()\fR functions break the
 355      -wide-character string pointed to by \fIws1\fR into a sequence of tokens, each
      405 +pointed to by
      406 +.Fa ws2 .
      407 +No return value is reserved to indicate an error.
      408 +.
      409 +.Ss wcscspn , wscspn
      410 +.
      411 +The
      412 +.Fn wcscspn
      413 +and
      414 +.Fn wscspn
      415 +functions return the length of the
      416 +maximum initial segment of the wide-character string pointed to by
      417 +.Fa ws1
      418 +which consists entirely of wide-character codes
      419 +.Em not
      420 +from the
      421 +wide-character string pointed to by
      422 +.Fa ws2 .
      423 +No return value is reserved to indicate an error.
      424 +.
      425 +.Ss wcstok , wstok
      426 +.
      427 +A sequence of calls to the
      428 +.Fn wcstok
      429 +and
      430 +.Fn wstok
      431 +functions break the wide-character string pointed to by
      432 +.Fa ws1
      433 +into a sequence of tokens, each
 356  434  of which is delimited by a wide-character code from the wide-character string
 357      -pointed to by \fIws2\fR.
 358      -.SS "Default and other standards"
 359      -.sp
 360      -.LP
 361      -The third argument points to a caller-provided \fBwchar_t\fR pointer into which
 362      -the \fBwcstok()\fR function stores information necessary for it to continue
      435 +pointed to by
      436 +.Fa ws2 .
      437 +The third argument points to a caller-provided
      438 +.Ft wchar_t
      439 +pointer into which
      440 +the
      441 +.Fn wcstok
      442 +function stores information necessary for it to continue
 363  443  scanning the same wide-character string. This argument is not available with
 364      -the XPG4 and SUS versions of \fBwcstok()\fR, nor is it available with the
 365      -\fBwstok()\fR function.  See \fBstandards\fR(5).
 366      -.sp
 367      -.LP
 368      -The first call in the sequence has \fIws1\fR as its first argument, and is
      444 +the XPG4 legacy version of
      445 +.Fn wcstok ,
      446 +nor is it available with the
      447 +.Fn wstok
      448 +function.  See
      449 +.Xr standards 5 .
      450 +.Lp
      451 +The first call in the sequence has
      452 +.Fa ws1
      453 +as its first argument, and is
 369  454  followed by calls with a null pointer as their first argument. The separator
 370      -string pointed to by \fIws2\fR may be different from call to call.
 371      -.sp
 372      -.LP
      455 +string pointed to by
      456 +.Fa ws2
      457 +may be different from call to call.
      458 +.Lp
 373  459  The first call in the sequence searches the wide-character string pointed to by
 374      -\fIws1\fR for the first wide-character code that is \fInot\fR contained in the
 375      -current separator string pointed to by \fIws2\fR. If no such wide-character
      460 +.Fa ws1
      461 +for the first wide-character code that is
      462 +.Em not
      463 +contained in the current separator string pointed to by
      464 +.Fa ws2 .
      465 +If no such wide-character
 376  466  code is found, then there are no tokens in the wide-character string pointed to
 377      -by \fIws1\fR, and \fBwcstok()\fR and \fBwstok()\fR return a null pointer. If
      467 +by
      468 +.Fa ws1 ,
      469 +and
      470 +.Fn wcstok
      471 +and
      472 +.Fn wstok
      473 +return a null pointer. If
 378  474  such a wide-character code is found, it is the start of the first token.
 379      -.sp
 380      -.LP
 381      -The \fBwcstok()\fR and \fBwstok()\fR functions then search from that point for
 382      -a wide-character code that \fIis\fR contained in the current separator string.
      475 +.Lp
      476 +The
      477 +.Fn wcstok
      478 +and
      479 +.Fn wstok
      480 +functions then search from that point for
      481 +a wide-character code that
      482 +.Em is
      483 +contained in the current separator string.
 383  484  If no such wide-character code is found, the current token extends to the end
 384      -of the wide-character string pointed to by \fIws1\fR, and subsequent searches
      485 +of the wide-character string pointed to by
      486 +.Fa ws1 ,
      487 +and subsequent searches
 385  488  for a token will return a null pointer. If such a wide-character code is found,
 386  489  it is overwritten by a null wide character, which terminates the current token.
 387      -The \fBwcstok()\fR and \fBwstok()\fR functions save a pointer to the following
 388      -wide-character code, from which the next search for a token will start.
 389      -.sp
 390      -.LP
      490 +The
      491 +.Fn wcstok
      492 +and
      493 +.Fn wstok
      494 +functions save a pointer to the following
      495 +wide-character code into thread-specific storage, from which the next
      496 +search for a token will start.
      497 +.Lp
 391  498  Each subsequent call, with a null pointer as the value of the first argument,
 392  499  starts searching from the saved pointer and behaves as described above.
 393      -.sp
 394      -.LP
      500 +.Lp
 395  501  Upon successful completion, both functions return a pointer to the first
 396  502  wide-character code of a token. Otherwise, if there is no token, a null pointer
 397  503  is returned.
 398      -.SH ATTRIBUTES
 399      -.sp
 400      -.LP
 401      -See \fBattributes\fR(5) for descriptions of the following attributes:
 402      -.sp
 403      -
 404      -.sp
 405      -.TS
 406      -box;
 407      -c | c
 408      -l | l .
 409      -ATTRIBUTE TYPE  ATTRIBUTE VALUE
 410      -_
 411      -CSI     Enabled
 412      -_
 413      -Interface Stability     See NOTES.
 414      -_
 415      -MT-Level        MT-Safe
 416      -.TE
 417      -
 418      -.SH SEE ALSO
 419      -.sp
 420      -.LP
 421      -\fBmalloc\fR(3C), \fBstring\fR(3C), \fBwcswidth\fR(3C), \fBwcwidth\fR(3C),
 422      -\fBattributes\fR(5), \fBstandards\fR(5)
 423      -.SH NOTES
 424      -.sp
 425      -.LP
 426      -The \fBwcscat()\fR, \fBwcsncat()\fR, \fBwcscmp()\fR, \fBwcsncmp()\fR,
 427      -\fBwcscpy()\fR, \fBwcsncpy()\fR, \fBwcslen()\fR, \fBwcschr()\fR,
 428      -\fBwcsrchr()\fR, \fBwcspbrk()\fR, \fBwcswcs()\fR, \fBwcsspn()\fR,
 429      -\fBwcscspn()\fR, and \fBwcstok()\fR functions are Standard. The \fBwscat()\fR,
 430      -\fBwsncat()\fR, \fBwscmp()\fR, \fBwsncmp()\fR, \fBwscpy()\fR, \fBwsncpy()\fR,
 431      -\fBwslen()\fR, \fBwschr()\fR, \fBwsrchr()\fR, \fBwspbrk()\fR, \fBwsspn()\fR,
 432      -\fBwstok()\fR, \fBwindex()\fR, and \fBwrindex()\fR functions are Stable.
      504 +.Sh CODE SET INDEPENDENCE
      505 +.Sy Enabled .
      506 +.Sh INTERFACE STABILITY
      507 +The
      508 +.Fn wcscat ,
      509 +.Fn wcsncat ,
      510 +.Fn wcscmp ,
      511 +.Fn wcsncmp ,
      512 +.Fn wcscpy ,
      513 +.Fn wcsncpy ,
      514 +.Fn wcschr ,
      515 +.Fn wcsrchr ,
      516 +.Fn wcspbrk ,
      517 +.Fn wcsspn ,
      518 +.Fn wcscspn ,
      519 +and
      520 +.Fn wcstok
      521 +functions are
      522 +.Sy Standard .
      523 +.Lp
      524 +The
      525 +.Fn wcswcs
      526 +function is
      527 +.Sy Obsolete Standard .
      528 +.Lp
      529 +The
      530 +.Fn wscat ,
      531 +.Fn wsncat ,
      532 +.Fn wscmp ,
      533 +.Fn wsncmp ,
      534 +.Fn wscpy ,
      535 +.Fn wsncpy ,
      536 +.Fn wslen ,
      537 +.Fn wschr ,
      538 +.Fn wsrchr ,
      539 +.Fn wspbrk ,
      540 +.Fn wsspn ,
      541 +.Fn wstok ,
      542 +.Fn windex ,
      543 +and
      544 +.Fn wrindex
      545 +functions are
      546 +.Sy Obsolete Committed .
      547 +.
      548 +.Sh MT-LEVEL
      549 +.Sy MT-Safe .
      550 +Note however that the legacy version of
      551 +.Fn wcstok ,
      552 +as well as
      553 +.Fn wstok ,
      554 +use thread-specific storage to store the tokenizer state.  As a result,
      555 +the tokenizer state will not be visible to other threads.
      556 +.Sh SEE ALSO
      557 +.Xr malloc 3C ,
      558 +.Xr string 3C ,
      559 +.Xr wcsdup 3C ,
      560 +.Xr wcslen 3C ,
      561 +.Xr wcsstr 3C ,
      562 +.Xr wcswidth 3C ,
      563 +.Xr wcwidth 3C ,
      564 +.Xr standards 5
      565 +.Sh STANDARDS
      566 +The
      567 +.Fn wcscat ,
      568 +.Fn wcsncat ,
      569 +.Fn wcscmp ,
      570 +.Fn wcsncmp ,
      571 +.Fn wcscpy ,
      572 +.Fn wcsncpy ,
      573 +.Fn wcschr ,
      574 +.Fn wcsrchr ,
      575 +.Fn wcspbrk ,
      576 +.Fn wcsspn ,
      577 +.Fn wcscspn ,
      578 +.Fn wcstok
      579 +and
      580 +.Fn wcswcs
      581 +functions were introduced in
      582 +.St -xpg4 .
      583 +The
      584 +.Fn wcstok
      585 +function was modified to take a third argument in
      586 +.St -xbd5 .
      587 +The
      588 +.Fn wcswcs
      589 +function was removed from
      590 +.St -p1003.1-2008 ;
      591 +the
      592 +.Xr wcsstr 3C
      593 +function specified by
      594 +.St -isoC-99
      595 +is preferred.
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX