aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libmdocml.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2008-11-23 23:12:47 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2008-11-23 23:12:47 +0000
commitfcd75b8529c408716dc1c378ac99f204d67d96a0 (patch)
treefaadc071016942860141134eeb02037305789064 /libmdocml.c
parentce7f70a4bc4254e9ddb802c4dddb96c1e1a5061a (diff)
downloadmandoc-fcd75b8529c408716dc1c378ac99f204d67d96a0.tar.gz
mandoc-fcd75b8529c408716dc1c378ac99f204d67d96a0.tar.zst
mandoc-fcd75b8529c408716dc1c378ac99f204d67d96a0.zip
Fixed clarity in libmdocml.c.
Fixed debugging messages.
Diffstat (limited to 'libmdocml.c')
-rw-r--r--libmdocml.c49
1 files changed, 23 insertions, 26 deletions
diff --git a/libmdocml.c b/libmdocml.c
index 2bd5dfa7..4449ceb8 100644
--- a/libmdocml.c
+++ b/libmdocml.c
@@ -1,4 +1,4 @@
-/* $Id: libmdocml.c,v 1.6 2008/11/23 22:30:53 kristaps Exp $ */
+/* $Id: libmdocml.c,v 1.7 2008/11/23 23:12:47 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -27,12 +27,13 @@
#include "libmdocml.h"
#include "private.h"
-#define BUFFER_LINE BUFSIZ
+#define BUFFER_LINE BUFSIZ /* Default line-buffer size. */
static int md_run_enter(const struct md_args *,
struct md_mbuf *, struct md_rbuf *, void *);
static int md_run_leave(const struct md_args *, struct md_mbuf *,
struct md_rbuf *, int, void *);
+
static ssize_t md_buf_fill(struct md_rbuf *);
static int md_buf_flush(struct md_mbuf *);
@@ -170,46 +171,42 @@ md_run_enter(const struct md_args *args, struct md_mbuf *mbuf,
case (MD_HTML4_STRICT):
fp = md_line_html4_strict;
break;
- case (MD_DUMMY):
+ default:
fp = md_line_dummy;
break;
- default:
- abort();
}
- /* LINTED */
- for (pos = 0; ; ) {
- if (-1 == (sz = md_buf_fill(rbuf)))
- return(md_run_leave(args, mbuf, rbuf, -1, p));
- else if (0 == sz)
- break;
-
- for (i = 0; i < sz; i++) {
- if ('\n' == rbuf->buf[i]) {
- if ( ! (*fp)(args, mbuf, rbuf, line, pos, p))
- return(md_run_leave(args, mbuf, rbuf,
- -1, p));
- rbuf->line++;
- pos = 0;
- continue;
- }
+ pos = 0;
+again:
+ if (-1 == (sz = md_buf_fill(rbuf))) {
+ return(md_run_leave(args, mbuf, rbuf, -1, p));
+ } else if (0 == sz && 0 != pos) {
+ warnx("%s: no newline at end of file", rbuf->name);
+ return(md_run_leave(args, mbuf, rbuf, -1, p));
+ } else if (0 == sz)
+ return(md_run_leave(args, mbuf, rbuf, 0, p));
+
+ for (i = 0; i < sz; i++) {
+ if ('\n' != rbuf->buf[i]) {
if (pos < BUFFER_LINE) {
/* LINTED */
line[pos++] = rbuf->buf[i];
continue;
}
-
warnx("%s: line %zu too long",
rbuf->name, rbuf->line);
return(md_run_leave(args, mbuf, rbuf, -1, p));
}
- }
- if (0 != pos && ! (*fp)(args, mbuf, rbuf, line, pos, p))
- return(md_run_leave(args, mbuf, rbuf, -1, p));
+ if ( ! (*fp)(args, mbuf, rbuf, line, pos, p))
+ return(md_run_leave(args, mbuf, rbuf, -1, p));
+ rbuf->line++;
+ pos = 0;
+ }
- return(md_run_leave(args, mbuf, rbuf, 0, p));
+ goto again;
+ /* NOTREACHED */
}