|
@@ -24,20 +24,24 @@ static LSUP_rc
|
|
term_to_nt (const LSUP_Term *term, const LSUP_NSMap *nsm, char **out_p)
|
|
term_to_nt (const LSUP_Term *term, const LSUP_NSMap *nsm, char **out_p)
|
|
{
|
|
{
|
|
LSUP_rc rc;
|
|
LSUP_rc rc;
|
|
- char *out = NULL, *tmp, *escaped;
|
|
|
|
|
|
+ char *out = NULL, *escaped;
|
|
const char *metadata = NULL;
|
|
const char *metadata = NULL;
|
|
size_t buf_len;
|
|
size_t buf_len;
|
|
|
|
|
|
// Free previous content if not NULL.
|
|
// Free previous content if not NULL.
|
|
if (*out_p != NULL) out = realloc (*out_p, 0);
|
|
if (*out_p != NULL) out = realloc (*out_p, 0);
|
|
|
|
|
|
|
|
+ char *data = term->data;
|
|
switch (term->type) {
|
|
switch (term->type) {
|
|
|
|
+ case LSUP_TERM_NS_IRIREF:
|
|
|
|
+ LSUP_nsmap_normalize_uri (nsm, term->data, &data);
|
|
case LSUP_TERM_IRIREF:
|
|
case LSUP_TERM_IRIREF:
|
|
- tmp = realloc (out, strlen (term->data) + 3);
|
|
|
|
- if (UNLIKELY (!tmp)) return LSUP_MEM_ERR;
|
|
|
|
- out = tmp;
|
|
|
|
|
|
+ out = realloc (out, strlen (data) + 3);
|
|
|
|
+ if (UNLIKELY (!out)) return LSUP_MEM_ERR;
|
|
|
|
|
|
- sprintf (out, "<%s>", term->data);
|
|
|
|
|
|
+ sprintf (out, "<%s>", data);
|
|
|
|
+
|
|
|
|
+ if (data != term->data) free (data);
|
|
rc = LSUP_OK;
|
|
rc = LSUP_OK;
|
|
break;
|
|
break;
|
|
|
|
|
|
@@ -55,9 +59,8 @@ term_to_nt (const LSUP_Term *term, const LSUP_NSMap *nsm, char **out_p)
|
|
buf_len += strlen (metadata) + 4; // Room for ^^<>
|
|
buf_len += strlen (metadata) + 4; // Room for ^^<>
|
|
}
|
|
}
|
|
|
|
|
|
- tmp = realloc (out, buf_len);
|
|
|
|
- if (UNLIKELY (!tmp)) return LSUP_MEM_ERR;
|
|
|
|
- out = tmp;
|
|
|
|
|
|
+ out = realloc (out, buf_len);
|
|
|
|
+ if (UNLIKELY (!out)) return LSUP_MEM_ERR;
|
|
|
|
|
|
sprintf (out, "\"%s\"", escaped);
|
|
sprintf (out, "\"%s\"", escaped);
|
|
free (escaped);
|
|
free (escaped);
|
|
@@ -81,9 +84,8 @@ term_to_nt (const LSUP_Term *term, const LSUP_NSMap *nsm, char **out_p)
|
|
buf_len += strlen (metadata) + 1; // Room for @
|
|
buf_len += strlen (metadata) + 1; // Room for @
|
|
}
|
|
}
|
|
|
|
|
|
- tmp = realloc (out, buf_len);
|
|
|
|
- if (UNLIKELY (!tmp)) return LSUP_MEM_ERR;
|
|
|
|
- out = tmp;
|
|
|
|
|
|
+ out = realloc (out, buf_len);
|
|
|
|
+ if (UNLIKELY (!out)) return LSUP_MEM_ERR;
|
|
|
|
|
|
sprintf (out, "\"%s\"", escaped);
|
|
sprintf (out, "\"%s\"", escaped);
|
|
free (escaped);
|
|
free (escaped);
|
|
@@ -96,9 +98,8 @@ term_to_nt (const LSUP_Term *term, const LSUP_NSMap *nsm, char **out_p)
|
|
break;
|
|
break;
|
|
|
|
|
|
case LSUP_TERM_BNODE:
|
|
case LSUP_TERM_BNODE:
|
|
- tmp = realloc (out, strlen (term->data) + 3);
|
|
|
|
- if (UNLIKELY (!tmp)) return LSUP_MEM_ERR;
|
|
|
|
- out = tmp;
|
|
|
|
|
|
+ out = realloc (out, strlen (term->data) + 3);
|
|
|
|
+ if (UNLIKELY (!out)) return LSUP_MEM_ERR;
|
|
|
|
|
|
sprintf (out, "_:%s", term->data);
|
|
sprintf (out, "_:%s", term->data);
|
|
rc = LSUP_OK;
|
|
rc = LSUP_OK;
|
|
@@ -181,23 +182,7 @@ const LSUP_Codec nt_codec = {
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
-/* * * Other internal functions. * * */
|
|
|
|
-
|
|
|
|
-/** Replace non-printable characters with their literal byte.
|
|
|
|
- *
|
|
|
|
- * Escape backslash is to be added separately.
|
|
|
|
- */
|
|
|
|
-static inline char replace_char(const char c) {
|
|
|
|
- switch (c) {
|
|
|
|
- case '\t': return 't';
|
|
|
|
- case '\b': return 'b';
|
|
|
|
- case '\n': return 'n';
|
|
|
|
- case '\r': return 'r';
|
|
|
|
- case '\f': return 'f';
|
|
|
|
- default: return c;
|
|
|
|
- }
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
|
|
+/* * * Other static functions. * * */
|
|
|
|
|
|
static LSUP_CodecIterator *
|
|
static LSUP_CodecIterator *
|
|
gr_to_nt_init (const LSUP_Graph *gr)
|
|
gr_to_nt_init (const LSUP_Graph *gr)
|
|
@@ -247,7 +232,7 @@ escape_lit (const char *in, char **out_p)
|
|
if (i >= strlen (in)) break;
|
|
if (i >= strlen (in)) break;
|
|
|
|
|
|
out[j++] = '\\';
|
|
out[j++] = '\\';
|
|
- out[j++] = replace_char (in[i++]);
|
|
|
|
|
|
+ out[j++] = escape_char (in[i++]);
|
|
boundary = strcspn (in + i, LIT_ECHAR);
|
|
boundary = strcspn (in + i, LIT_ECHAR);
|
|
}
|
|
}
|
|
|
|
|