Update copyright dates with scripts/update-copyrights.
[platform/upstream/glibc.git] / wcsmbs / wcstok.c
1 /* Copyright (C) 1995-2015 Free Software Foundation, Inc.
2    This file is part of the GNU C Library.
3    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
4
5    The GNU C Library is free software; you can redistribute it and/or
6    modify it under the terms of the GNU Lesser General Public
7    License as published by the Free Software Foundation; either
8    version 2.1 of the License, or (at your option) any later version.
9
10    The GNU C Library is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13    Lesser General Public License for more details.
14
15    You should have received a copy of the GNU Lesser General Public
16    License along with the GNU C Library; if not, see
17    <http://www.gnu.org/licenses/>.  */
18
19 #include <wchar.h>
20 #include <errno.h>
21
22
23 /* Parse WCS into tokens separated by characters in DELIM.  If WCS is
24    NULL, the last string wcstok() was called with is used.  */
25 wchar_t *
26 wcstok (wcs, delim, save_ptr)
27      wchar_t *wcs;
28      const wchar_t *delim;
29      wchar_t **save_ptr;
30 {
31   wchar_t *result;
32
33   if (wcs == NULL)
34     {
35       if (*save_ptr == NULL)
36         {
37           __set_errno (EINVAL);
38           return NULL;
39         }
40       else
41         wcs = *save_ptr;
42     }
43
44   /* Scan leading delimiters.  */
45   wcs += wcsspn (wcs, delim);
46   if (*wcs == L'\0')
47     {
48       *save_ptr = NULL;
49       return NULL;
50     }
51
52   /* Find the end of the token.  */
53   result = wcs;
54   wcs = wcspbrk (result, delim);
55   if (wcs == NULL)
56     /* This token finishes the string.  */
57     *save_ptr = NULL;
58   else
59     {
60       /* Terminate the token and make *SAVE_PTR point past it.  */
61       *wcs = L'\0';
62       *save_ptr = wcs + 1;
63     }
64   return result;
65 }