Lines Matching refs:ms

58 wmemstream_grow(struct wmemstream *ms, fpos_t newoff)  in wmemstream_grow()  argument
67 if (newsize > ms->len) { in wmemstream_grow()
68 buf = reallocarray(*ms->bufp, newsize + 1, sizeof(wchar_t)); in wmemstream_grow()
72 ms, ms->len, newsize); in wmemstream_grow()
74 wmemset(buf + ms->len + 1, 0, newsize - ms->len); in wmemstream_grow()
75 *ms->bufp = buf; in wmemstream_grow()
76 ms->len = newsize; in wmemstream_grow()
85 wmemstream_update(struct wmemstream *ms) in wmemstream_update() argument
88 assert(ms->len >= 0 && ms->offset >= 0); in wmemstream_update()
89 *ms->sizep = ms->len < ms->offset ? ms->len : ms->offset; in wmemstream_update()
124 struct wmemstream *ms; in wmemstream_write() local
128 ms = cookie; in wmemstream_write()
129 wlen = wbuflen(&ms->mbstate, buf, len); in wmemstream_write()
134 if (!wmemstream_grow(ms, ms->offset + wlen)) in wmemstream_write()
143 while (len > 0 && ms->offset < ms->len) { in wmemstream_write()
144 charlen = mbrtowc(*ms->bufp + ms->offset, buf, len, in wmemstream_write()
145 &ms->mbstate); in wmemstream_write()
164 ms->offset++; in wmemstream_write()
167 wmemstream_update(ms); in wmemstream_write()
169 fprintf(stderr, "WMS: write(%p, %d) = %zd\n", ms, len, consumed); in wmemstream_write()
177 struct wmemstream *ms; in wmemstream_seek() local
180 ms = cookie; in wmemstream_seek()
181 old = ms->offset; in wmemstream_seek()
186 ms->offset = pos; in wmemstream_seek()
194 if (pos + ms->len < 0) { in wmemstream_seek()
198 (intmax_t)pos, ms->len); in wmemstream_seek()
204 if (FPOS_MAX - ms->len < pos) { in wmemstream_seek()
208 (intmax_t)pos, ms->len); in wmemstream_seek()
214 ms->offset = ms->len + pos; in wmemstream_seek()
218 if (ms->offset != old) in wmemstream_seek()
219 memset(&ms->mbstate, 0, sizeof(ms->mbstate)); in wmemstream_seek()
220 wmemstream_update(ms); in wmemstream_seek()
222 fprintf(stderr, "WMS: seek(%p, %jd, %d) %jd -> %jd\n", ms, in wmemstream_seek()
223 (intmax_t)pos, whence, (intmax_t)old, (intmax_t)ms->offset); in wmemstream_seek()
225 return (ms->offset); in wmemstream_seek()
239 struct wmemstream *ms; in open_wmemstream() local
250 ms = malloc(sizeof(*ms)); in open_wmemstream()
251 if (ms == NULL) { in open_wmemstream()
258 ms->bufp = bufp; in open_wmemstream()
259 ms->sizep = sizep; in open_wmemstream()
260 ms->len = 0; in open_wmemstream()
261 ms->offset = 0; in open_wmemstream()
262 memset(&ms->mbstate, 0, sizeof(mbstate_t)); in open_wmemstream()
263 wmemstream_update(ms); in open_wmemstream()
264 fp = funopen(ms, NULL, wmemstream_write, wmemstream_seek, in open_wmemstream()
268 free(ms); in open_wmemstream()