aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/ml.c
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2008-12-04 16:19:52 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2008-12-04 16:19:52 +0000
commit9b08769d420c8fb749fc6b70d3118ead5f54e2ea (patch)
tree7b7e17f8e07f09fcb73cb407e6a9b5c8155a212b /ml.c
parentff889942f7c344c157152d8ed3c19809b62ff504 (diff)
downloadmandoc-9b08769d420c8fb749fc6b70d3118ead5f54e2ea.tar.gz
mandoc-9b08769d420c8fb749fc6b70d3118ead5f54e2ea.tar.zst
mandoc-9b08769d420c8fb749fc6b70d3118ead5f54e2ea.zip
Character-encoding tests.
Diffstat (limited to 'ml.c')
-rw-r--r--ml.c43
1 files changed, 31 insertions, 12 deletions
diff --git a/ml.c b/ml.c
index ba483615..317fe011 100644
--- a/ml.c
+++ b/ml.c
@@ -1,4 +1,4 @@
-/* $Id: ml.c,v 1.3 2008/12/03 19:21:58 kristaps Exp $ */
+/* $Id: ml.c,v 1.4 2008/12/04 16:19:52 kristaps Exp $ */
/*
* Copyright (c) 2008 Kristaps Dzonsons <kristaps@kth.se>
*
@@ -34,30 +34,44 @@ ml_nputstring(struct md_mbuf *p,
const char *buf, size_t sz, size_t *pos)
{
int i;
+ const char *seq;
+ size_t ssz;
for (i = 0; i < (int)sz; i++) {
switch (buf[i]) {
+
+ /* Ampersand ml-escape. */
case ('&'):
- if ( ! ml_nputs(p, "&amp;", 5, pos))
- return(0);
+ seq = "&amp;";
+ ssz = 5;
break;
+
+ /* Quotation ml-escape. */
case ('"'):
- if ( ! ml_nputs(p, "&quot;", 6, pos))
- return(0);
+ seq = "&quot;";
+ ssz = 6;
break;
+
+ /* Lt ml-escape. */
case ('<'):
- if ( ! ml_nputs(p, "&lt;", 4, pos))
- return(0);
+ seq = "&lt;";
+ ssz = 4;
break;
+
+ /* Gt ml-escape. */
case ('>'):
- if ( ! ml_nputs(p, "&gt;", 4, pos))
- return(0);
+ seq = "&gt;";
+ ssz = 4;
break;
+
default:
- if ( ! ml_nputs(p, &buf[i], 1, pos))
- return(0);
+ seq = &buf[i];
+ ssz = 1;
break;
}
+
+ if ( ! ml_nputs(p, seq, ssz, pos))
+ return(-1);
}
return(1);
}
@@ -67,6 +81,9 @@ int
ml_nputs(struct md_mbuf *p, const char *buf, size_t sz, size_t *pos)
{
+ if (0 == sz)
+ return(1);
+
if ( ! md_buf_puts(p, buf, sz))
return(0);
@@ -80,7 +97,9 @@ ml_puts(struct md_mbuf *p, const char *buf, size_t *pos)
{
size_t sz;
- sz = strlen(buf);
+ if (0 == (sz = strlen(buf)))
+ return(1);
+
if ( ! md_buf_puts(p, buf, sz))
return(0);
*pos += sz;