@@ -1 +1 @@ | |||||
../carla-lilv/serd-0.18.0/serd | |||||
../carla-lilv/serd-0.18.2/serd |
@@ -8,7 +8,7 @@ include ../Makefile.mk | |||||
# -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
SERD_VERSION = 0.18.0 | |||||
SERD_VERSION = 0.18.2 | |||||
SORD_VERSION = 0.10.4 | SORD_VERSION = 0.10.4 | ||||
SRATOM_VERSION = 0.4.0 | SRATOM_VERSION = 0.4.0 | ||||
LILV_VERSION = 0.14.4 | LILV_VERSION = 0.14.4 | ||||
@@ -29,92 +29,67 @@ all: carla_lilv.a | |||||
carla_lilv.a: $(OBJS) | carla_lilv.a: $(OBJS) | ||||
$(AR) rs $@ $^ | $(AR) rs $@ $^ | ||||
serd.o: serd.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Iserd-$(SERD_VERSION) -c -o $@ | |||||
sord.o: sord.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Isord-$(SORD_VERSION) -Isord-$(SORD_VERSION)/src -c -o $@ | |||||
sratom.o: sratom.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Isratom-$(SRATOM_VERSION) -c -o $@ | |||||
lilv.o: lilv.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Ililv-$(LILV_VERSION) -Ililv-$(LILV_VERSION)/src -c -o $@ | |||||
# -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
posix32: carla_lilv_posix32.a | posix32: carla_lilv_posix32.a | ||||
posix64: carla_lilv_posix64.a | |||||
win32: carla_lilv_win32.a | |||||
win64: carla_lilv_win64.a | |||||
# -------------------------------------------------------------- | |||||
carla_lilv_posix32.a: $(OBJS_posix32) | carla_lilv_posix32.a: $(OBJS_posix32) | ||||
$(AR) rs $@ $^ | $(AR) rs $@ $^ | ||||
serd_posix32.o: serd.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Iserd-$(SERD_VERSION) $(32BIT_FLAGS) -c -o $@ | |||||
sord_posix32.o: sord.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Isord-$(SORD_VERSION) -Isord-$(SORD_VERSION)/src $(32BIT_FLAGS) -c -o $@ | |||||
carla_lilv_posix64.a: $(OBJS_posix64) | |||||
$(AR) rs $@ $^ | |||||
sratom_posix32.o: sratom.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Isratom-$(SRATOM_VERSION) $(32BIT_FLAGS) -c -o $@ | |||||
carla_lilv_win32.a: $(OBJS_win32) | |||||
$(AR) rs $@ $^ | |||||
lilv_posix32.o: lilv.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Ililv-$(LILV_VERSION) -Ililv-$(LILV_VERSION)/src $(32BIT_FLAGS) -c -o $@ | |||||
carla_lilv_win64.a: $(OBJS_win64) | |||||
$(AR) rs $@ $^ | |||||
# -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
posix64: carla_lilv_posix64.a | |||||
carla_lilv_posix64.a: $(OBJS_posix64) | |||||
$(AR) rs $@ $^ | |||||
serd_posix64.o: serd.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Iserd-$(SERD_VERSION) $(64BIT_FLAGS) -c -o $@ | |||||
serd.o: serd.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Iserd-$(SERD_VERSION) -c -o $@ | |||||
sord_posix64.o: sord.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Isord-$(SORD_VERSION) -Isord-$(SORD_VERSION)/src $(64BIT_FLAGS) -c -o $@ | |||||
sord.o: sord.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Isord-$(SORD_VERSION) -Isord-$(SORD_VERSION)/src -c -o $@ | |||||
sratom_posix64.o: sratom.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Isratom-$(SRATOM_VERSION) $(64BIT_FLAGS) -c -o $@ | |||||
sratom.o: sratom.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Isratom-$(SRATOM_VERSION) -c -o $@ | |||||
lilv_posix64.o: lilv.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Ililv-$(LILV_VERSION) -Ililv-$(LILV_VERSION)/src $(64BIT_FLAGS) -c -o $@ | |||||
lilv.o: lilv.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Ililv-$(LILV_VERSION) -Ililv-$(LILV_VERSION)/src -c -o $@ | |||||
# -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
win32: carla_lilv_win32.a | |||||
carla_lilv_win32.a: $(OBJS_win32) | |||||
$(AR) rs $@ $^ | |||||
serd_win32.o: serd.c | |||||
serd_%32.o: serd.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Iserd-$(SERD_VERSION) $(32BIT_FLAGS) -c -o $@ | $(CC) $< $(BUILD_C_FLAGS) -Iserd-$(SERD_VERSION) $(32BIT_FLAGS) -c -o $@ | ||||
sord_win32.o: sord.c | |||||
sord_%32.o: sord.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Isord-$(SORD_VERSION) -Isord-$(SORD_VERSION)/src $(32BIT_FLAGS) -c -o $@ | $(CC) $< $(BUILD_C_FLAGS) -Isord-$(SORD_VERSION) -Isord-$(SORD_VERSION)/src $(32BIT_FLAGS) -c -o $@ | ||||
sratom_win32.o: sratom.c | |||||
sratom_%32.o: sratom.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Isratom-$(SRATOM_VERSION) $(32BIT_FLAGS) -c -o $@ | $(CC) $< $(BUILD_C_FLAGS) -Isratom-$(SRATOM_VERSION) $(32BIT_FLAGS) -c -o $@ | ||||
lilv_win32.o: lilv.c | |||||
lilv_%32.o: lilv.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Ililv-$(LILV_VERSION) -Ililv-$(LILV_VERSION)/src $(32BIT_FLAGS) -c -o $@ | $(CC) $< $(BUILD_C_FLAGS) -Ililv-$(LILV_VERSION) -Ililv-$(LILV_VERSION)/src $(32BIT_FLAGS) -c -o $@ | ||||
# -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
win64: carla_lilv_win64.a | |||||
carla_lilv_win64.a: $(OBJS_win64) | |||||
$(AR) rs $@ $^ | |||||
serd_win64.o: serd.c | |||||
serd_%64.o: serd.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Iserd-$(SERD_VERSION) $(64BIT_FLAGS) -c -o $@ | $(CC) $< $(BUILD_C_FLAGS) -Iserd-$(SERD_VERSION) $(64BIT_FLAGS) -c -o $@ | ||||
sord_win64.o: sord.c | |||||
sord_%64.o: sord.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Isord-$(SORD_VERSION) -Isord-$(SORD_VERSION)/src $(64BIT_FLAGS) -c -o $@ | $(CC) $< $(BUILD_C_FLAGS) -Isord-$(SORD_VERSION) -Isord-$(SORD_VERSION)/src $(64BIT_FLAGS) -c -o $@ | ||||
sratom_win64.o: sratom.c | |||||
sratom_%64.o: sratom.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Isratom-$(SRATOM_VERSION) $(64BIT_FLAGS) -c -o $@ | $(CC) $< $(BUILD_C_FLAGS) -Isratom-$(SRATOM_VERSION) $(64BIT_FLAGS) -c -o $@ | ||||
lilv_win64.o: lilv.c | |||||
lilv_%64.o: lilv.c | |||||
$(CC) $< $(BUILD_C_FLAGS) -Ililv-$(LILV_VERSION) -Ililv-$(LILV_VERSION)/src $(64BIT_FLAGS) -c -o $@ | $(CC) $< $(BUILD_C_FLAGS) -Ililv-$(LILV_VERSION) -Ililv-$(LILV_VERSION)/src $(64BIT_FLAGS) -c -o $@ | ||||
# -------------------------------------------------------------- | # -------------------------------------------------------------- | ||||
@@ -1,39 +0,0 @@ | |||||
diff -U 3 -H -d -r -N -- serd-0.18.0/src/writer.c serd-0.18.0.orig/src/writer.c | |||||
--- serd-0.18.0/src/writer.c 2012-09-07 18:12:02.886064145 +0100 | |||||
+++ serd-0.18.0.orig/src/writer.c 2012-09-07 18:11:16.000000000 +0100 | |||||
@@ -103,7 +103,7 @@ | |||||
} TextContext; | |||||
static void | |||||
-error2(SerdWriter* writer, SerdStatus st, const char* fmt, ...) | |||||
+error(SerdWriter* writer, SerdStatus st, const char* fmt, ...) | |||||
{ | |||||
va_list args; | |||||
va_start(args, fmt); | |||||
@@ -219,7 +219,7 @@ | |||||
size = 4; | |||||
c = in & 0x07; | |||||
} else { | |||||
- error2(writer, SERD_ERR_BAD_ARG, "invalid UTF-8: %X\n", in); | |||||
+ error(writer, SERD_ERR_BAD_ARG, "invalid UTF-8: %X\n", in); | |||||
const uint8_t replacement_char[] = { 0xEF, 0xBF, 0xBD }; | |||||
len += sink(replacement_char, sizeof(replacement_char), writer); | |||||
return len; | |||||
@@ -364,7 +364,7 @@ | |||||
switch (writer->syntax) { | |||||
case SERD_NTRIPLES: | |||||
if (serd_env_expand(writer->env, node, &uri_prefix, &uri_suffix)) { | |||||
- error2(writer, SERD_ERR_BAD_CURIE, | |||||
+ error(writer, SERD_ERR_BAD_CURIE, | |||||
"undefined namespace prefix `%s'\n", node->buf); | |||||
return false; | |||||
} | |||||
@@ -603,7 +603,7 @@ | |||||
return SERD_SUCCESS; | |||||
} | |||||
if (serd_stack_is_empty(&writer->anon_stack)) { | |||||
- error2(writer, SERD_ERR_UNKNOWN, | |||||
+ error(writer, SERD_ERR_UNKNOWN, | |||||
"unexpected end of anonymous node\n"); | |||||
return SERD_ERR_UNKNOWN; | |||||
} |
@@ -1,3 +1,14 @@ | |||||
serd (0.18.2) stable; | |||||
* Fix crash when serd_node_new_decimal is called with infinity or NaN | |||||
* Fix crash when resolving against non-standard base URIs | |||||
* Fix bug that caused "a" abbreviation in non-predicate position | |||||
* Disable timestamps in HTML documentation for reproducible build | |||||
* Fix clashing symbol "error" in amalgamation build | |||||
* Update to waf 1.7.8 and autowaf r90 (install docs to versioned directory) | |||||
-- David Robillard <d@drobilla.net> Sat, 22 Dec 2012 21:32:15 -0500 | |||||
serd (0.18.0) stable; | serd (0.18.0) stable; | ||||
* Support digits at start of local names as per new Turtle grammar | * Support digits at start of local names as per new Turtle grammar |
@@ -0,0 +1,187 @@ | |||||
<doxygenlayout version="1.0"> | |||||
<!-- Navigation index tabs for HTML output --> | |||||
<navindex> | |||||
<tab type="mainpage" visible="yes" title=""/> | |||||
<tab type="pages" visible="yes" title="" intro=""/> | |||||
<tab type="modules" visible="yes" title="" intro=""/> | |||||
<tab type="namespaces" visible="yes" title=""> | |||||
<tab type="namespacelist" visible="yes" title="" intro=""/> | |||||
<tab type="namespacemembers" visible="yes" title="" intro=""/> | |||||
</tab> | |||||
<tab type="classes" visible="yes" title=""> | |||||
<tab type="classlist" visible="yes" title="" intro=""/> | |||||
<tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/> | |||||
<tab type="hierarchy" visible="yes" title="" intro=""/> | |||||
<tab type="classmembers" visible="yes" title="" intro=""/> | |||||
</tab> | |||||
<tab type="files" visible="yes" title=""> | |||||
<tab type="filelist" visible="yes" title="" intro=""/> | |||||
<tab type="globals" visible="yes" title="" intro=""/> | |||||
</tab> | |||||
<tab type="examples" visible="yes" title="" intro=""/> | |||||
</navindex> | |||||
<!-- Layout definition for a class page --> | |||||
<class> | |||||
<briefdescription visible="yes"/> | |||||
<includes visible="$SHOW_INCLUDE_FILES"/> | |||||
<inheritancegraph visible="$CLASS_GRAPH"/> | |||||
<collaborationgraph visible="$COLLABORATION_GRAPH"/> | |||||
<allmemberslink visible="yes"/> | |||||
<memberdecl> | |||||
<nestedclasses visible="yes" title=""/> | |||||
<publictypes title=""/> | |||||
<publicslots title=""/> | |||||
<signals title=""/> | |||||
<publicmethods title=""/> | |||||
<publicstaticmethods title=""/> | |||||
<publicattributes title=""/> | |||||
<publicstaticattributes title=""/> | |||||
<protectedtypes title=""/> | |||||
<protectedslots title=""/> | |||||
<protectedmethods title=""/> | |||||
<protectedstaticmethods title=""/> | |||||
<protectedattributes title=""/> | |||||
<protectedstaticattributes title=""/> | |||||
<packagetypes title=""/> | |||||
<packagemethods title=""/> | |||||
<packagestaticmethods title=""/> | |||||
<packageattributes title=""/> | |||||
<packagestaticattributes title=""/> | |||||
<properties title=""/> | |||||
<events title=""/> | |||||
<privatetypes title=""/> | |||||
<privateslots title=""/> | |||||
<privatemethods title=""/> | |||||
<privatestaticmethods title=""/> | |||||
<privateattributes title=""/> | |||||
<privatestaticattributes title=""/> | |||||
<friends title=""/> | |||||
<related title="" subtitle=""/> | |||||
<membergroups visible="yes"/> | |||||
</memberdecl> | |||||
<detaileddescription title=""/> | |||||
<memberdef> | |||||
<inlineclasses title=""/> | |||||
<typedefs title=""/> | |||||
<enums title=""/> | |||||
<constructors title=""/> | |||||
<functions title=""/> | |||||
<related title=""/> | |||||
<variables title=""/> | |||||
<properties title=""/> | |||||
<events title=""/> | |||||
</memberdef> | |||||
<usedfiles visible="$SHOW_USED_FILES"/> | |||||
<authorsection visible="yes"/> | |||||
</class> | |||||
<!-- Layout definition for a namespace page --> | |||||
<namespace> | |||||
<briefdescription visible="yes"/> | |||||
<memberdecl> | |||||
<nestednamespaces visible="yes" title=""/> | |||||
<classes visible="yes" title=""/> | |||||
<typedefs title=""/> | |||||
<enums title=""/> | |||||
<functions title=""/> | |||||
<variables title=""/> | |||||
<membergroups visible="yes"/> | |||||
</memberdecl> | |||||
<detaileddescription title=""/> | |||||
<memberdef> | |||||
<inlineclasses title=""/> | |||||
<typedefs title=""/> | |||||
<enums title=""/> | |||||
<functions title=""/> | |||||
<variables title=""/> | |||||
</memberdef> | |||||
<authorsection visible="yes"/> | |||||
</namespace> | |||||
<!-- Layout definition for a file page --> | |||||
<file> | |||||
<briefdescription visible="yes"/> | |||||
<includes visible="$SHOW_INCLUDE_FILES"/> | |||||
<includegraph visible="$INCLUDE_GRAPH"/> | |||||
<includedbygraph visible="$INCLUDED_BY_GRAPH"/> | |||||
<sourcelink visible="yes"/> | |||||
<memberdecl> | |||||
<classes visible="yes" title=""/> | |||||
<namespaces visible="yes" title=""/> | |||||
<defines title=""/> | |||||
<typedefs title=""/> | |||||
<enums title=""/> | |||||
<functions title=""/> | |||||
<variables title=""/> | |||||
<membergroups visible="yes"/> | |||||
</memberdecl> | |||||
<detaileddescription title=""/> | |||||
<memberdef> | |||||
<inlineclasses title=""/> | |||||
<defines title=""/> | |||||
<typedefs title=""/> | |||||
<enums title=""/> | |||||
<functions title=""/> | |||||
<variables title=""/> | |||||
</memberdef> | |||||
<authorsection/> | |||||
</file> | |||||
<!-- Layout definition for a group page --> | |||||
<group> | |||||
<briefdescription visible="no"/> | |||||
<groupgraph visible="$GROUP_GRAPHS"/> | |||||
<detaileddescription title=""/> | |||||
<memberdecl> | |||||
<nestedgroups visible="yes" title=""/> | |||||
<dirs visible="yes" title=""/> | |||||
<files visible="yes" title=""/> | |||||
<namespaces visible="yes" title=""/> | |||||
<classes visible="yes" title=""/> | |||||
<defines title=""/> | |||||
<typedefs title=""/> | |||||
<enums title=""/> | |||||
<enumvalues title=""/> | |||||
<functions title=""/> | |||||
<variables title=""/> | |||||
<signals title=""/> | |||||
<publicslots title=""/> | |||||
<protectedslots title=""/> | |||||
<privateslots title=""/> | |||||
<events title=""/> | |||||
<properties title=""/> | |||||
<friends title=""/> | |||||
<membergroups visible="yes"/> | |||||
</memberdecl> | |||||
<memberdef> | |||||
<pagedocs/> | |||||
<inlineclasses title=""/> | |||||
<defines title=""/> | |||||
<typedefs title=""/> | |||||
<enums title=""/> | |||||
<enumvalues title=""/> | |||||
<functions title=""/> | |||||
<variables title=""/> | |||||
<signals title=""/> | |||||
<publicslots title=""/> | |||||
<protectedslots title=""/> | |||||
<privateslots title=""/> | |||||
<events title=""/> | |||||
<properties title=""/> | |||||
<friends title=""/> | |||||
</memberdef> | |||||
<authorsection visible="yes"/> | |||||
</group> | |||||
<!-- Layout definition for a directory page --> | |||||
<directory> | |||||
<briefdescription visible="yes"/> | |||||
<directorygraph visible="yes"/> | |||||
<memberdecl> | |||||
<dirs visible="yes"/> | |||||
<files visible="yes"/> | |||||
</memberdecl> | |||||
<detaileddescription title=""/> | |||||
</directory> | |||||
</doxygenlayout> |
@@ -939,7 +939,7 @@ HTML_COLORSTYLE_GAMMA = 80 | |||||
# page will contain the date and time when the page was generated. Setting | # page will contain the date and time when the page was generated. Setting | ||||
# this to NO can help when comparing the output of multiple runs. | # this to NO can help when comparing the output of multiple runs. | ||||
HTML_TIMESTAMP = YES | |||||
HTML_TIMESTAMP = NO | |||||
# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML | # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML | ||||
# documentation will contain sections that can be hidden and shown after the | # documentation will contain sections that can be hidden and shown after the |
@@ -22,6 +22,11 @@ | |||||
#include <math.h> | #include <math.h> | ||||
#include <float.h> | #include <float.h> | ||||
#ifdef _WIN32 | |||||
# define isnan(x) _isnan(x) | |||||
# define isinf(x) (!_finite(x)) | |||||
#endif | |||||
SERD_API | SERD_API | ||||
SerdNode | SerdNode | ||||
serd_node_from_string(SerdType type, const uint8_t* buf) | serd_node_from_string(SerdType type, const uint8_t* buf) | ||||
@@ -211,6 +216,10 @@ SERD_API | |||||
SerdNode | SerdNode | ||||
serd_node_new_decimal(double d, unsigned frac_digits) | serd_node_new_decimal(double d, unsigned frac_digits) | ||||
{ | { | ||||
if (isnan(d) || isinf(d)) { | |||||
return SERD_NODE_NULL; | |||||
} | |||||
const double abs_d = fabs(d); | const double abs_d = fabs(d); | ||||
const unsigned int_digits = (unsigned)fmax(1.0, ceil(log10(abs_d + 1))); | const unsigned int_digits = (unsigned)fmax(1.0, ceil(log10(abs_d + 1))); | ||||
char* buf = (char*)calloc(int_digits + frac_digits + 3, 1); | char* buf = (char*)calloc(int_digits + frac_digits + 3, 1); |
@@ -92,7 +92,7 @@ struct SerdReaderImpl { | |||||
}; | }; | ||||
static int | static int | ||||
error(SerdReader* reader, SerdStatus st, const char* fmt, ...) | |||||
r_err(SerdReader* reader, SerdStatus st, const char* fmt, ...) | |||||
{ | { | ||||
va_list args; | va_list args; | ||||
va_start(args, fmt); | va_start(args, fmt); | ||||
@@ -152,7 +152,7 @@ eat_byte_check(SerdReader* reader, const uint8_t byte) | |||||
{ | { | ||||
const uint8_t c = peek_byte(reader); | const uint8_t c = peek_byte(reader); | ||||
if (c != byte) { | if (c != byte) { | ||||
return error(reader, SERD_ERR_BAD_SYNTAX, | |||||
return r_err(reader, SERD_ERR_BAD_SYNTAX, | |||||
"expected `%c', not `%c'\n", byte, c); | "expected `%c', not `%c'\n", byte, c); | ||||
} | } | ||||
return eat_byte_safe(reader, byte); | return eat_byte_safe(reader, byte); | ||||
@@ -275,7 +275,7 @@ read_hex(SerdReader* reader) | |||||
if (in_range(c, 0x30, 0x39) || in_range(c, 0x41, 0x46)) { | if (in_range(c, 0x30, 0x39) || in_range(c, 0x41, 0x46)) { | ||||
return eat_byte_safe(reader, c); | return eat_byte_safe(reader, c); | ||||
} else { | } else { | ||||
return error(reader, SERD_ERR_BAD_SYNTAX, | |||||
return r_err(reader, SERD_ERR_BAD_SYNTAX, | |||||
"invalid hexadecimal digit `%c'\n", c); | "invalid hexadecimal digit `%c'\n", c); | ||||
} | } | ||||
} | } | ||||
@@ -303,7 +303,7 @@ read_hex_escape(SerdReader* reader, unsigned length, Ref dest) | |||||
} else if (c < 0x00110000) { | } else if (c < 0x00110000) { | ||||
size = 4; | size = 4; | ||||
} else { | } else { | ||||
error(reader, SERD_ERR_BAD_SYNTAX, | |||||
r_err(reader, SERD_ERR_BAD_SYNTAX, | |||||
"unicode character 0x%X out of range\n", c); | "unicode character 0x%X out of range\n", c); | ||||
push_replacement(reader, dest); | push_replacement(reader, dest); | ||||
return true; | return true; | ||||
@@ -404,7 +404,7 @@ read_ucharacter_escape(SerdReader* reader, Ref dest) | |||||
static inline SerdStatus | static inline SerdStatus | ||||
bad_char(SerdReader* reader, Ref dest, const char* fmt, uint8_t c) | bad_char(SerdReader* reader, Ref dest, const char* fmt, uint8_t c) | ||||
{ | { | ||||
error(reader, SERD_ERR_BAD_SYNTAX, fmt, c); | |||||
r_err(reader, SERD_ERR_BAD_SYNTAX, fmt, c); | |||||
push_replacement(reader, dest); | push_replacement(reader, dest); | ||||
// Skip bytes until the next start byte | // Skip bytes until the next start byte | ||||
@@ -460,7 +460,7 @@ read_character(SerdReader* reader, Ref dest) | |||||
const uint8_t c = peek_byte(reader); | const uint8_t c = peek_byte(reader); | ||||
assert(c != '\\'); // Only called from methods that handle escapes first | assert(c != '\\'); // Only called from methods that handle escapes first | ||||
if (c == '\0') { | if (c == '\0') { | ||||
error(reader, SERD_ERR_BAD_SYNTAX, "unexpected end of input\n", c); | |||||
r_err(reader, SERD_ERR_BAD_SYNTAX, "unexpected end of input\n", c); | |||||
return SERD_ERR_BAD_SYNTAX; | return SERD_ERR_BAD_SYNTAX; | ||||
} else if (c < 0x20) { | } else if (c < 0x20) { | ||||
return bad_char(reader, dest, | return bad_char(reader, dest, | ||||
@@ -499,7 +499,7 @@ read_lcharacter(SerdReader* reader, Ref dest, SerdNodeFlags* flags) | |||||
if (read_scharacter_escape(reader, dest, flags)) { | if (read_scharacter_escape(reader, dest, flags)) { | ||||
return SERD_SUCCESS; | return SERD_SUCCESS; | ||||
} else { | } else { | ||||
error(reader, SERD_ERR_BAD_SYNTAX, | |||||
r_err(reader, SERD_ERR_BAD_SYNTAX, | |||||
"invalid escape `\\%c'\n", peek_byte(reader)); | "invalid escape `\\%c'\n", peek_byte(reader)); | ||||
return SERD_ERR_BAD_SYNTAX; | return SERD_ERR_BAD_SYNTAX; | ||||
} | } | ||||
@@ -524,7 +524,7 @@ read_scharacter(SerdReader* reader, Ref dest, SerdNodeFlags* flags) | |||||
if (read_scharacter_escape(reader, dest, flags)) { | if (read_scharacter_escape(reader, dest, flags)) { | ||||
return SERD_SUCCESS; | return SERD_SUCCESS; | ||||
} else { | } else { | ||||
error(reader, SERD_ERR_BAD_SYNTAX, | |||||
r_err(reader, SERD_ERR_BAD_SYNTAX, | |||||
"invalid escape `\\%c'\n", peek_byte(reader)); | "invalid escape `\\%c'\n", peek_byte(reader)); | ||||
return SERD_ERR_BAD_SYNTAX; | return SERD_ERR_BAD_SYNTAX; | ||||
} | } | ||||
@@ -547,7 +547,7 @@ read_ucharacter(SerdReader* reader, Ref dest) | |||||
if (read_ucharacter_escape(reader, dest)) { | if (read_ucharacter_escape(reader, dest)) { | ||||
return SERD_SUCCESS; | return SERD_SUCCESS; | ||||
} else { | } else { | ||||
error(reader, SERD_ERR_BAD_SYNTAX, | |||||
r_err(reader, SERD_ERR_BAD_SYNTAX, | |||||
"invalid escape `\\%c'\n", peek_byte(reader)); | "invalid escape `\\%c'\n", peek_byte(reader)); | ||||
return SERD_FAILURE; | return SERD_FAILURE; | ||||
} | } | ||||
@@ -716,7 +716,7 @@ read_prefixName(SerdReader* reader, Ref dest) | |||||
{ | { | ||||
uint8_t c = peek_byte(reader); | uint8_t c = peek_byte(reader); | ||||
if (c == '_') { | if (c == '_') { | ||||
error(reader, SERD_ERR_BAD_SYNTAX, "unexpected `_'\n"); | |||||
r_err(reader, SERD_ERR_BAD_SYNTAX, "unexpected `_'\n"); | |||||
return pop_node(reader, dest); | return pop_node(reader, dest); | ||||
} | } | ||||
TRY_RET(c = read_nameStartChar(reader)); | TRY_RET(c = read_nameStartChar(reader)); | ||||
@@ -750,7 +750,7 @@ read_language(SerdReader* reader) | |||||
{ | { | ||||
uint8_t c = peek_byte(reader); | uint8_t c = peek_byte(reader); | ||||
if (!in_range(c, 'a', 'z')) { | if (!in_range(c, 'a', 'z')) { | ||||
return error(reader, SERD_ERR_BAD_SYNTAX, "unexpected `%c'\n", c); | |||||
return r_err(reader, SERD_ERR_BAD_SYNTAX, "unexpected `%c'\n", c); | |||||
} | } | ||||
Ref ref = push_node(reader, SERD_LITERAL, "", 0); | Ref ref = push_node(reader, SERD_LITERAL, "", 0); | ||||
push_byte(reader, ref, eat_byte_safe(reader, c)); | push_byte(reader, ref, eat_byte_safe(reader, c)); | ||||
@@ -804,7 +804,7 @@ read_0_9(SerdReader* reader, Ref str, bool at_least_one) | |||||
uint8_t c; | uint8_t c; | ||||
if (at_least_one) { | if (at_least_one) { | ||||
if (!is_digit((c = peek_byte(reader)))) { | if (!is_digit((c = peek_byte(reader)))) { | ||||
return error(reader, SERD_ERR_BAD_SYNTAX, "expected digit\n"); | |||||
return r_err(reader, SERD_ERR_BAD_SYNTAX, "expected digit\n"); | |||||
} | } | ||||
push_byte(reader, str, eat_byte_safe(reader, c)); | push_byte(reader, str, eat_byte_safe(reader, c)); | ||||
} | } | ||||
@@ -966,7 +966,7 @@ read_nodeID(SerdReader* reader) | |||||
reader->bprefix ? (char*)reader->bprefix : "", | reader->bprefix ? (char*)reader->bprefix : "", | ||||
reader->bprefix_len); | reader->bprefix_len); | ||||
if (!read_name(reader, ref)) { | if (!read_name(reader, ref)) { | ||||
return error(reader, SERD_ERR_BAD_SYNTAX, | |||||
return r_err(reader, SERD_ERR_BAD_SYNTAX, | |||||
"invalid character at start of name\n"); | "invalid character at start of name\n"); | ||||
} | } | ||||
if (reader->syntax == SERD_TURTLE) { | if (reader->syntax == SERD_TURTLE) { | ||||
@@ -975,7 +975,7 @@ read_nodeID(SerdReader* reader) | |||||
memcpy((char*)buf, "docid", 5); // Prevent clash | memcpy((char*)buf, "docid", 5); // Prevent clash | ||||
reader->seen_genid = true; | reader->seen_genid = true; | ||||
} else if (reader->seen_genid && !strncmp(buf, "docid", 5)) { | } else if (reader->seen_genid && !strncmp(buf, "docid", 5)) { | ||||
error(reader, SERD_ERR_ID_CLASH, | |||||
r_err(reader, SERD_ERR_ID_CLASH, | |||||
"found both `genid' and `docid' IDs, prefix required\n"); | "found both `genid' and `docid' IDs, prefix required\n"); | ||||
return pop_node(reader, ref); | return pop_node(reader, ref); | ||||
} | } | ||||
@@ -1049,7 +1049,7 @@ read_blank(SerdReader* reader, ReadContext ctx, bool subject, Ref* dest) | |||||
case '(': | case '(': | ||||
return read_collection(reader, ctx, dest); | return read_collection(reader, ctx, dest); | ||||
default: | default: | ||||
return error(reader, SERD_ERR_BAD_SYNTAX, "invalid blank node\n"); | |||||
return r_err(reader, SERD_ERR_BAD_SYNTAX, "invalid blank node\n"); | |||||
} | } | ||||
} | } | ||||
@@ -1321,7 +1321,7 @@ read_directive(SerdReader* reader) | |||||
switch (peek_byte(reader)) { | switch (peek_byte(reader)) { | ||||
case 'b': return read_base(reader); | case 'b': return read_base(reader); | ||||
case 'p': return read_prefixID(reader); | case 'p': return read_prefixID(reader); | ||||
default: return error(reader, SERD_ERR_BAD_SYNTAX, "invalid directive\n"); | |||||
default: return r_err(reader, SERD_ERR_BAD_SYNTAX, "invalid directive\n"); | |||||
} | } | ||||
} | } | ||||
@@ -325,10 +325,7 @@ merge(SerdChunk* base, SerdChunk* path) | |||||
const uint8_t* begin = remove_dot_segments(path->buf, path->len, &up); | const uint8_t* begin = remove_dot_segments(path->buf, path->len, &up); | ||||
const uint8_t* end = path->buf + path->len; | const uint8_t* end = path->buf + path->len; | ||||
if (base->buf) { | |||||
assert(base->len > 0); | |||||
assert(base->buf[0] == '/'); | |||||
if (base->buf && base->len > 0) { | |||||
// Find the up'th last slash | // Find the up'th last slash | ||||
const uint8_t* base_last = (base->buf + base->len - 1); | const uint8_t* base_last = (base->buf + base->len - 1); | ||||
++up; | ++up; |
@@ -103,7 +103,7 @@ typedef enum { | |||||
} TextContext; | } TextContext; | ||||
static void | static void | ||||
error2(SerdWriter* writer, SerdStatus st, const char* fmt, ...) | |||||
w_err(SerdWriter* writer, SerdStatus st, const char* fmt, ...) | |||||
{ | { | ||||
va_list args; | va_list args; | ||||
va_start(args, fmt); | va_start(args, fmt); | ||||
@@ -219,7 +219,7 @@ write_text(SerdWriter* writer, TextContext ctx, | |||||
size = 4; | size = 4; | ||||
c = in & 0x07; | c = in & 0x07; | ||||
} else { | } else { | ||||
error2(writer, SERD_ERR_BAD_ARG, "invalid UTF-8: %X\n", in); | |||||
w_err(writer, SERD_ERR_BAD_ARG, "invalid UTF-8: %X\n", in); | |||||
const uint8_t replacement_char[] = { 0xEF, 0xBF, 0xBD }; | const uint8_t replacement_char[] = { 0xEF, 0xBF, 0xBD }; | ||||
len += sink(replacement_char, sizeof(replacement_char), writer); | len += sink(replacement_char, sizeof(replacement_char), writer); | ||||
return len; | return len; | ||||
@@ -364,7 +364,7 @@ write_node(SerdWriter* writer, | |||||
switch (writer->syntax) { | switch (writer->syntax) { | ||||
case SERD_NTRIPLES: | case SERD_NTRIPLES: | ||||
if (serd_env_expand(writer->env, node, &uri_prefix, &uri_suffix)) { | if (serd_env_expand(writer->env, node, &uri_prefix, &uri_suffix)) { | ||||
error2(writer, SERD_ERR_BAD_CURIE, | |||||
w_err(writer, SERD_ERR_BAD_CURIE, | |||||
"undefined namespace prefix `%s'\n", node->buf); | "undefined namespace prefix `%s'\n", node->buf); | ||||
return false; | return false; | ||||
} | } | ||||
@@ -408,7 +408,7 @@ write_node(SerdWriter* writer, | |||||
break; | break; | ||||
case SERD_URI: | case SERD_URI: | ||||
has_scheme = serd_uri_string_has_scheme(node->buf); | has_scheme = serd_uri_string_has_scheme(node->buf); | ||||
if ((writer->syntax == SERD_TURTLE) | |||||
if (field == FIELD_PREDICATE && (writer->syntax == SERD_TURTLE) | |||||
&& !strcmp((const char*)node->buf, NS_RDF "type")) { | && !strcmp((const char*)node->buf, NS_RDF "type")) { | ||||
sink("a", 1, writer); | sink("a", 1, writer); | ||||
break; | break; | ||||
@@ -603,7 +603,7 @@ serd_writer_end_anon(SerdWriter* writer, | |||||
return SERD_SUCCESS; | return SERD_SUCCESS; | ||||
} | } | ||||
if (serd_stack_is_empty(&writer->anon_stack)) { | if (serd_stack_is_empty(&writer->anon_stack)) { | ||||
error2(writer, SERD_ERR_UNKNOWN, | |||||
w_err(writer, SERD_ERR_UNKNOWN, | |||||
"unexpected end of anonymous node\n"); | "unexpected end of anonymous node\n"); | ||||
return SERD_ERR_UNKNOWN; | return SERD_ERR_UNKNOWN; | ||||
} | } |
@@ -25,6 +25,11 @@ | |||||
#define USTR(s) ((const uint8_t*)(s)) | #define USTR(s) ((const uint8_t*)(s)) | ||||
#ifdef _WIN32 | |||||
# define INFINITY (DBL_MAX + DBL_MAX) | |||||
# define NAN (INFINITY - INFINITY) | |||||
#endif | |||||
static int | static int | ||||
failure(const char* fmt, ...) | failure(const char* fmt, ...) | ||||
{ | { | ||||
@@ -114,20 +119,23 @@ main(void) | |||||
// Test serd_node_new_decimal | // Test serd_node_new_decimal | ||||
const double dbl_test_nums[] = { | const double dbl_test_nums[] = { | ||||
0.0, 9.0, 10.0, .01, 2.05, -16.00001, 5.000000005, 0.0000000001 | |||||
0.0, 9.0, 10.0, .01, 2.05, -16.00001, 5.000000005, 0.0000000001, NAN, INFINITY | |||||
}; | }; | ||||
const char* dbl_test_strs[] = { | const char* dbl_test_strs[] = { | ||||
"0.0", "9.0", "10.0", "0.01", "2.05", "-16.00001", "5.00000001", "0.0" | |||||
"0.0", "9.0", "10.0", "0.01", "2.05", "-16.00001", "5.00000001", "0.0", NULL, NULL | |||||
}; | }; | ||||
for (unsigned i = 0; i < sizeof(dbl_test_nums) / sizeof(double); ++i) { | for (unsigned i = 0; i < sizeof(dbl_test_nums) / sizeof(double); ++i) { | ||||
SerdNode node = serd_node_new_decimal(dbl_test_nums[i], 8); | |||||
if (strcmp((const char*)node.buf, (const char*)dbl_test_strs[i])) { | |||||
SerdNode node = serd_node_new_decimal(dbl_test_nums[i], 8); | |||||
const bool pass = (node.buf && dbl_test_strs[i]) | |||||
? !strcmp((const char*)node.buf, (const char*)dbl_test_strs[i]) | |||||
: ((const char*)node.buf == dbl_test_strs[i]); | |||||
if (!pass) { | |||||
return failure("Serialised `%s' != %s\n", | return failure("Serialised `%s' != %s\n", | ||||
node.buf, dbl_test_strs[i]); | node.buf, dbl_test_strs[i]); | ||||
} | } | ||||
const size_t len = strlen((const char*)node.buf); | |||||
const size_t len = node.buf ? strlen((const char*)node.buf) : 0; | |||||
if (node.n_bytes != len || node.n_chars != len) { | if (node.n_bytes != len || node.n_chars != len) { | ||||
return failure("Length %zu,%zu != %zu\n", | return failure("Length %zu,%zu != %zu\n", | ||||
node.n_bytes, node.n_chars, len); | node.n_bytes, node.n_chars, len); |