- struct uci_parse_context *pctx = ctx->pctx;
- char *p;
- int ofs;
-
- if (pctx->buf == NULL) {
- pctx->buf = uci_malloc(ctx, LINEBUF);
- pctx->bufsz = LINEBUF;
- }
-
- ofs = 0;
- do {
- p = &pctx->buf[ofs];
- p[ofs] = 0;
-
- p = fgets(p, pctx->bufsz - ofs, pctx->file);
- if (!p || !p[ofs])
- return;
-
- ofs += strlen(p);
- if (pctx->buf[ofs - 1] == '\n') {
- pctx->line++;
- pctx->buf[ofs - 1] = 0;
- return;
- }
-
- if (pctx->bufsz > LINEBUF_MAX/2) {
- pctx->byte = LINEBUF_MAX;
- UCI_THROW(ctx, UCI_ERR_PARSE);
- }
-
- pctx->bufsz *= 2;
- pctx->buf = uci_realloc(ctx, pctx->buf, pctx->bufsz);
- } while (1);
-}