Lines Matching defs:ms
64 wmemstream_grow(struct wmemstream *ms, size_t newoff)
73 if (newsize > ms->len) {
74 buf = realloc(*ms->bufp, (newsize + 1) * sizeof(wchar_t));
78 ms, ms->len, newsize);
80 wmemset(buf + ms->len + 1, 0, newsize - ms->len);
81 *ms->bufp = buf;
82 ms->len = newsize;
91 wmemstream_update(struct wmemstream *ms)
94 *ms->sizep = ms->len < ms->offset ? ms->len : ms->offset;
129 struct wmemstream *ms;
133 ms = cookie;
134 wlen = wbuflen(&ms->mbstate, buf, len);
139 if (!wmemstream_grow(ms, ms->offset + wlen))
148 while (len > 0 && ms->offset < ms->len) {
149 charlen = mbrtowc(*ms->bufp + ms->offset, buf, len,
150 &ms->mbstate);
169 ms->offset++;
172 wmemstream_update(ms);
174 fprintf(stderr, "WMS: write(%p, %zu) = %zd\n", ms, len, consumed);
182 struct wmemstream *ms;
185 ms = cookie;
186 old = ms->offset;
191 ms->offset = off_t_to_size_t(pos);
199 if (pos + (ssize_t)ms->len < 0) {
203 (intmax_t)pos, ms->len);
209 if (OFF_MAX - ms->len < (size_t)pos) {
213 (intmax_t)pos, ms->len);
219 ms->offset = off_t_to_size_t(ms->len + pos);
223 if (ms->offset != old)
224 memset(&ms->mbstate, 0, sizeof(ms->mbstate));
225 wmemstream_update(ms);
227 fprintf(stderr, "WMS: seek(%p, %jd, %d) %jd -> %jd\n", ms,
228 (intmax_t)pos, whence, (intmax_t)old, (intmax_t)ms->offset);
230 return (ms->offset);
244 struct wmemstream *ms;
255 ms = malloc(sizeof(*ms));
256 if (ms == NULL) {
263 ms->bufp = bufp;
264 ms->sizep = sizep;
265 ms->len = 0;
266 ms->offset = 0;
267 memset(&ms->mbstate, 0, sizeof(mbstate_t));
268 wmemstream_update(ms);
269 fp = funopen2(ms, NULL, wmemstream_write, wmemstream_seek,
273 free(ms);