OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [newlib-1.18.0/] [newlib/] [libc/] [stdlib/] [mbsnrtowcs.c] - Blame information for rev 207

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 207 jeremybenn
/*
2
FUNCTION
3
<<mbsrtowcs>>, <<mbsnrtowcs>>---convert a character string to a wide-character string
4
 
5
INDEX
6
        mbsrtowcs
7
INDEX
8
        _mbsrtowcs_r
9
INDEX
10
        mbsnrtowcs
11
INDEX
12
        _mbsnrtowcs_r
13
 
14
ANSI_SYNOPSIS
15
        #include <wchar.h>
16
        size_t mbsrtowcs(wchar_t *<[dst]>, const char **<[src]>, size_t <[len]>,
17
                         mbstate_t *<[ps]>);
18
 
19
        #include <wchar.h>
20
        size_t _mbsrtowcs_r(struct _reent *<[ptr]>, wchar_t *<[dst]>,
21
                            const char **<[src]>, size_t <[len]>,
22
                            mbstate_t *<[ps]>);
23
 
24
        #include <wchar.h>
25
        size_t mbsnrtowcs(wchar_t *<[dst]>, const char **<[src]>,
26
                          size_t <[nms]>, size_t <[len]>, mbstate_t *<[ps]>);
27
 
28
        #include <wchar.h>
29
        size_t _mbsnrtowcs_r(struct _reent *<[ptr]>, wchar_t *<[dst]>,
30
                             const char **<[src]>, size_t <[nms]>,
31
                             size_t <[len]>, mbstate_t *<[ps]>);
32
 
33
TRAD_SYNOPSIS
34
        #include <wchar.h>
35
        size_t mbsrtowcs(<[dst]>, <[src]>, <[len]>, <[ps]>)
36
        wchar_t *<[dst]>;
37
        const char **<[src]>;
38
        size_t <[len]>;
39
        mbstate_t *<[ps]>;
40
 
41
        #include <wchar.h>
42
        size_t _mbsrtowcs_r(<[ptr]>, <[dst]>, <[src]>, <[len]>, <[ps]>)
43
        struct _reent *<[ptr]>;
44
        wchar_t *<[dst]>;
45
        const char **<[src]>;
46
        size_t <[len]>;
47
        mbstate_t *<[ps]>;
48
 
49
        #include <wchar.h>
50
        size_t mbsnrtowcs(<[dst]>, <[src]>, <[nms]>, <[len]>, <[ps]>)
51
        wchar_t *<[dst]>;
52
        const char **<[src]>;
53
        size_t <[nms]>;
54
        size_t <[len]>;
55
        mbstate_t *<[ps]>;
56
 
57
        #include <wchar.h>
58
        size_t _mbsnrtowcs_r(<[ptr]>, <[dst]>, <[src]>, <[nms]>, <[len]>, <[ps]>)
59
        struct _reent *<[ptr]>;
60
        wchar_t *<[dst]>;
61
        const char **<[src]>;
62
        size_t <[nms]>;
63
        size_t <[len]>;
64
        mbstate_t *<[ps]>;
65
 
66
DESCRIPTION
67
The <<mbsrtowcs>> function converts a sequence of multibyte characters
68
pointed to indirectly by <[src]> into a sequence of corresponding wide
69
characters and stores at most <[len]> of them in the wchar_t array pointed
70
to by <[dst]>, until it encounters a terminating null character ('\0').
71
 
72
If <[dst]> is NULL, no characters are stored.
73
 
74
If <[dst]> is not NULL, the pointer pointed to by <[src]> is updated to point
75
to the character after the one that conversion stopped at.  If conversion
76
stops because a null character is encountered, *<[src]> is set to NULL.
77
 
78
The mbstate_t argument, <[ps]>, is used to keep track of the shift state.  If
79
it is NULL, <<mbsrtowcs>> uses an internal, static mbstate_t object, which
80
is initialized to the initial conversion state at program startup.
81
 
82
The <<mbsnrtowcs>> function behaves identically to <<mbsrtowcs>>, except that
83
conversion stops after reading at most <[nms]> bytes from the buffer pointed
84
to by <[src]>.
85
 
86
RETURNS
87
The <<mbsrtowcs>> and <<mbsnrtowcs>> functions return the number of wide
88
characters stored in the array pointed to by <[dst]> if successful, otherwise
89
it returns (size_t)-1.
90
 
91
PORTABILITY
92
<<mbsrtowcs>> is defined by the C99 standard.
93
<<mbsnrtowcs>> is defined by the POSIX.1-2008 standard.
94
*/
95
 
96
#include <reent.h>
97
#include <newlib.h>
98
#include <wchar.h>
99
#include <stdlib.h>
100
#include <stdio.h>
101
#include <errno.h>
102
 
103
size_t
104
_DEFUN (_mbsnrtowcs_r, (r, dst, src, nms, len, ps),
105
        struct _reent *r _AND
106
        wchar_t *dst _AND
107
        const char **src _AND
108
        size_t nms _AND
109
        size_t len _AND
110
        mbstate_t *ps)
111
{
112
  wchar_t *ptr = dst;
113
  const char *tmp_src;
114
  size_t max;
115
  size_t count = 0;
116
  int bytes;
117
 
118
#ifdef _MB_CAPABLE
119
  if (ps == NULL)
120
    {
121
      _REENT_CHECK_MISC(r);
122
      ps = &(_REENT_MBSRTOWCS_STATE(r));
123
    }
124
#endif
125
 
126
  if (dst == NULL)
127
    {
128
      /* Ignore original len value and do not alter src pointer if the
129
         dst pointer is NULL.  */
130
      len = (size_t)-1;
131
      tmp_src = *src;
132
      src = &tmp_src;
133
    }
134
 
135
  max = len;
136
  while (len > 0)
137
    {
138
      bytes = _mbrtowc_r (r, ptr, *src, nms, ps);
139
      if (bytes > 0)
140
        {
141
          *src += bytes;
142
          nms -= bytes;
143
          ++count;
144
          ptr = (dst == NULL) ? NULL : ptr + 1;
145
          --len;
146
        }
147
      else if (bytes == -2)
148
        {
149
          *src += nms;
150
          return count;
151
        }
152
      else if (bytes == 0)
153
        {
154
          *src = NULL;
155
          return count;
156
        }
157
      else
158
        {
159
          ps->__count = 0;
160
          r->_errno = EILSEQ;
161
          return (size_t)-1;
162
        }
163
    }
164
 
165
  return (size_t)max;
166
}
167
 
168
#ifndef _REENT_ONLY
169
size_t
170
_DEFUN (mbsnrtowcs, (dst, src, nms, len, ps),
171
        wchar_t *dst _AND
172
        const char **src _AND
173
        size_t nms _AND
174
        size_t len _AND
175
        mbstate_t *ps)
176
{
177
  return _mbsnrtowcs_r (_REENT, dst, src, nms, len, ps);
178
}
179
#endif /* !_REENT_ONLY */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.