commit 1baf6462562796680594492b7c6614c0bd5fcbb3
parent 9d96397cef3d75f2af96b7a31bf2aef910346b0c
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Sun, 26 Aug 2018 15:00:43 +0200
xml: use ANSI types and struct initialization
long is atleast 32-bits, codepointtoutf8() works with >= 32-bit types. Valid
codepoint ranges are not larger than this. unsigned char is not needed because
converted unicode bytes don't use this range.
tested all valid codepoints and output on amd64, i386 and SPARC64.
Diffstat:
2 files changed, 13 insertions(+), 14 deletions(-)
diff --git a/README.xml b/README.xml
@@ -12,7 +12,7 @@ Features
--------
- Relatively small parser.
-- Pretty simple API comparable with libexpat.
+- Pretty simple API.
- Pretty fast.
- Portable
- No dynamic memory allocation.
diff --git a/xml.c b/xml.c
@@ -3,7 +3,6 @@
#include <ctype.h>
#include <errno.h>
#include <limits.h>
-#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -215,7 +214,7 @@ xml_parsecdata(XMLParser *x)
}
static int
-codepointtoutf8(const uint32_t r, uint8_t *s)
+codepointtoutf8(long r, char *s)
{
if (r == 0) {
return 0; /* NUL byte */
@@ -251,16 +250,16 @@ namedentitytostr(const char *e, char *buf, size_t bufsiz)
char *entity;
int c;
} entities[] = {
- { .entity = "&", .c = '&' },
- { .entity = "<", .c = '<' },
- { .entity = ">", .c = '>' },
- { .entity = "'", .c = '\'' },
- { .entity = """, .c = '"' },
- { .entity = "&", .c = '&' },
- { .entity = "<", .c = '<' },
- { .entity = ">", .c = '>' },
- { .entity = "&APOS;", .c = '\'' },
- { .entity = """, .c = '"' }
+ { "&", '&' },
+ { "<", '<' },
+ { ">", '>' },
+ { "'", '\'' },
+ { """, '"' },
+ { "&", '&' },
+ { "<", '<' },
+ { ">", '>' },
+ { "&APOS;", '\'' },
+ { """, '"' }
};
size_t i;
@@ -285,7 +284,7 @@ namedentitytostr(const char *e, char *buf, size_t bufsiz)
static int
numericentitytostr(const char *e, char *buf, size_t bufsiz)
{
- uint32_t l;
+ long l;
int len;
char *end;