Lines Matching refs:ms
55 wmemstream_grow(struct wmemstream *ms, fpos_t newoff) in wmemstream_grow() argument
64 if (newsize > ms->len) { in wmemstream_grow()
65 buf = reallocarray(*ms->bufp, newsize + 1, sizeof(wchar_t)); in wmemstream_grow()
69 ms, ms->len, newsize); in wmemstream_grow()
71 wmemset(buf + ms->len + 1, 0, newsize - ms->len); in wmemstream_grow()
72 *ms->bufp = buf; in wmemstream_grow()
73 ms->len = newsize; in wmemstream_grow()
82 wmemstream_update(struct wmemstream *ms) in wmemstream_update() argument
85 assert(ms->len >= 0 && ms->offset >= 0); in wmemstream_update()
86 *ms->sizep = ms->len < ms->offset ? ms->len : ms->offset; in wmemstream_update()
121 struct wmemstream *ms; in wmemstream_write() local
125 ms = cookie; in wmemstream_write()
126 wlen = wbuflen(&ms->mbstate, buf, len); in wmemstream_write()
131 if (!wmemstream_grow(ms, ms->offset + wlen)) in wmemstream_write()
140 while (len > 0 && ms->offset < ms->len) { in wmemstream_write()
141 charlen = mbrtowc(*ms->bufp + ms->offset, buf, len, in wmemstream_write()
142 &ms->mbstate); in wmemstream_write()
161 ms->offset++; in wmemstream_write()
164 wmemstream_update(ms); in wmemstream_write()
166 fprintf(stderr, "WMS: write(%p, %d) = %zd\n", ms, len, consumed); in wmemstream_write()
174 struct wmemstream *ms; in wmemstream_seek() local
177 ms = cookie; in wmemstream_seek()
178 old = ms->offset; in wmemstream_seek()
183 ms->offset = pos; in wmemstream_seek()
191 if (pos + ms->len < 0) { in wmemstream_seek()
195 (intmax_t)pos, ms->len); in wmemstream_seek()
201 if (FPOS_MAX - ms->len < pos) { in wmemstream_seek()
205 (intmax_t)pos, ms->len); in wmemstream_seek()
211 ms->offset = ms->len + pos; in wmemstream_seek()
215 if (ms->offset != old) in wmemstream_seek()
216 memset(&ms->mbstate, 0, sizeof(ms->mbstate)); in wmemstream_seek()
217 wmemstream_update(ms); in wmemstream_seek()
219 fprintf(stderr, "WMS: seek(%p, %jd, %d) %jd -> %jd\n", ms, in wmemstream_seek()
220 (intmax_t)pos, whence, (intmax_t)old, (intmax_t)ms->offset); in wmemstream_seek()
222 return (ms->offset); in wmemstream_seek()
236 struct wmemstream *ms; in open_wmemstream() local
247 ms = malloc(sizeof(*ms)); in open_wmemstream()
248 if (ms == NULL) { in open_wmemstream()
255 ms->bufp = bufp; in open_wmemstream()
256 ms->sizep = sizep; in open_wmemstream()
257 ms->len = 0; in open_wmemstream()
258 ms->offset = 0; in open_wmemstream()
259 memset(&ms->mbstate, 0, sizeof(mbstate_t)); in open_wmemstream()
260 wmemstream_update(ms); in open_wmemstream()
261 fp = funopen(ms, NULL, wmemstream_write, wmemstream_seek, in open_wmemstream()
265 free(ms); in open_wmemstream()