Lines Matching defs:io

148 http_new_chunk(struct httpio *io)
152 if (fetch_getln(io->conn) == -1)
155 if (io->conn->buflen < 2 || !isxdigit((unsigned char)*io->conn->buf))
158 for (p = io->conn->buf; *p && !isspace((unsigned char)*p); ++p) {
164 io->chunksize = io->chunksize * 16 +
167 io->chunksize = io->chunksize * 16 +
174 io->total += io->chunksize;
175 if (io->chunksize == 0)
179 __func__, (unsigned long)io->chunksize,
180 (unsigned long)io->total);
184 return (io->chunksize);
191 http_growbuf(struct httpio *io, size_t len)
195 if (io->bufsize >= len)
198 if ((tmp = realloc(io->buf, len)) == NULL)
200 io->buf = tmp;
201 io->bufsize = len;
209 http_fillbuf(struct httpio *io, size_t len)
214 if (io->error)
216 if (io->eof)
220 if (io->chunked == 0) {
221 if (http_growbuf(io, len) == -1)
223 if ((nbytes = fetch_read(io->conn, io->buf, len)) == -1) {
224 io->error = errno;
227 io->buflen = nbytes;
228 io->bufpos = 0;
229 return (io->buflen);
233 if (io->chunksize == 0) {
234 switch (http_new_chunk(io)) {
236 io->error = EPROTO;
239 io->eof = 1;
245 if (len > io->chunksize)
246 len = io->chunksize;
247 if (http_growbuf(io, len) == -1)
249 if ((nbytes = fetch_read(io->conn, io->buf, len)) == -1) {
250 io->error = errno;
253 io->bufpos = 0;
254 io->buflen = nbytes;
255 io->chunksize -= nbytes;
257 if (io->chunksize == 0) {
258 if (fetch_read(io->conn, &ch, 1) != 1 || ch != '\r' ||
259 fetch_read(io->conn, &ch, 1) != 1 || ch != '\n')
263 return (io->buflen);
272 struct httpio *io = (struct httpio *)v;
275 if (io->error)
277 if (io->eof)
281 if (!io->buf || io->bufpos == io->buflen) {
282 if ((rlen = http_fillbuf(io, len)) < 0) {
283 if ((errno = io->error) == EINTR)
284 io->error = 0;
291 rlen = io->buflen - io->bufpos;
294 memcpy(buf, io->buf + io->bufpos, rlen);
295 io->bufpos += rlen;
305 struct httpio *io = (struct httpio *)v;
307 return (fetch_write(io->conn, buf, len));
316 struct httpio *io = (struct httpio *)v;
319 r = fetch_close(io->conn);
320 if (io->buf)
321 free(io->buf);
322 free(io);
332 struct httpio *io;
335 if ((io = calloc(1, sizeof(*io))) == NULL) {
339 io->conn = conn;
340 io->chunked = chunked;
341 f = funopen(io, http_readfn, http_writefn, NULL, http_closefn);
344 free(io);