summaryrefslogtreecommitdiff
path: root/src/raptor_term.c
diff options
context:
space:
mode:
authorDave Beckett <dave@dajobe.org>2010-06-02 12:22:15 -0700
committerDave Beckett <dave@dajobe.org>2010-06-02 12:22:15 -0700
commitcb9e73420fe02ed1eec330b3b1b4a35e870a590e (patch)
treee72a8cbf99867daac81ec886af0c1152027ea930 /src/raptor_term.c
parent0120d2846fbcf25480dd64d11dfa0cfac43e4546 (diff)
downloadraptor-cb9e73420fe02ed1eec330b3b1b4a35e870a590e.tar.gz
Added raptor_new_term_from_counted_literal for constructing from strings with known lengths.
(raptor_new_term_from_counted_literal): Added (raptor_new_term_from_literal): Now calls raptor_new_term_from_counted_literal.
Diffstat (limited to 'src/raptor_term.c')
-rw-r--r--src/raptor_term.c77
1 files changed, 57 insertions, 20 deletions
diff --git a/src/raptor_term.c b/src/raptor_term.c
index 91d3eeb4..5feec0ae 100644
--- a/src/raptor_term.c
+++ b/src/raptor_term.c
@@ -79,11 +79,13 @@ raptor_new_term_from_uri(raptor_world* world, raptor_uri* uri)
/**
- * raptor_new_term_from_literal:
+ * raptor_new_term_from_counted_literal:
* @world: raptor world
* @literal: literal data (or NULL for empty literal)
+ * @literal_len: length of literal
* @datatype: literal datatype URI (or NULL)
- * @language: literal language (or NULL)
+ * @language: literal language (or NULL for no language)
+ * @language_len: literal language length
*
* Constructor - create a new literal statement term
*
@@ -96,16 +98,16 @@ raptor_new_term_from_uri(raptor_world* world, raptor_uri* uri)
* Return value: new term or NULL on failure
*/
raptor_term*
-raptor_new_term_from_literal(raptor_world* world,
- const unsigned char* literal,
- raptor_uri* datatype,
- const unsigned char* language)
+raptor_new_term_from_counted_literal(raptor_world* world,
+ const unsigned char* literal,
+ size_t literal_len,
+ raptor_uri* datatype,
+ const unsigned char* language,
+ unsigned char language_len)
{
raptor_term *t;
unsigned char* new_literal = NULL;
unsigned char* new_language = NULL;
- unsigned int literal_len = 0;
- unsigned char language_len = 0;
RAPTOR_ASSERT_OBJECT_POINTER_RETURN_VALUE(world, raptor_world, NULL);
@@ -117,39 +119,33 @@ raptor_new_term_from_literal(raptor_world* world,
if(language && datatype)
return NULL;
- if(literal)
- literal_len = strlen((const char*)literal);
new_literal = (unsigned char*)RAPTOR_MALLOC(cstring, literal_len + 1);
if(!new_literal)
return NULL;
+ if(!literal || !*literal)
+ literal_len = 0;
+
if(literal_len)
memcpy(new_literal, literal, literal_len + 1);
else
*new_literal = '\0';
- if(language && datatype) {
- raptor_log_error(world, RAPTOR_LOG_LEVEL_WARN, NULL,
- "Ignoring language used with datatyped literal");
- language = NULL;
- }
-
-
if(language) {
- language_len = strlen((const char*)language);
-
new_language = (unsigned char*)RAPTOR_MALLOC(cstring, language_len + 1);
if(!new_language) {
RAPTOR_FREE(cstring, new_literal);
return NULL;
}
memcpy(new_language, language, language_len + 1);
- }
+ } else
+ language_len = 0;
if(datatype)
datatype = raptor_uri_copy(datatype);
+
t = (raptor_term*)RAPTOR_CALLOC(raptor_term, 1, sizeof(*t));
if(!t) {
if(new_literal)
@@ -174,6 +170,47 @@ raptor_new_term_from_literal(raptor_world* world,
/**
+ * raptor_new_term_from_literal:
+ * @world: raptor world
+ * @literal: literal data (or NULL for empty literal)
+ * @datatype: literal datatype URI (or NULL)
+ * @language: literal language (or NULL)
+ *
+ * Constructor - create a new literal statement term
+ *
+ * Takes copies of the passed in @literal, @datatype, @language
+ *
+ * Only one of @language or @datatype may be given. If both are
+ * given, NULL is returned. If @language is the empty string, it is
+ * the equivalent to NULL.
+ *
+ * Return value: new term or NULL on failure
+*/
+raptor_term*
+raptor_new_term_from_literal(raptor_world* world,
+ const unsigned char* literal,
+ raptor_uri* datatype,
+ const unsigned char* language)
+{
+ size_t literal_len = 0;
+ unsigned char language_len = 0;
+
+ RAPTOR_ASSERT_OBJECT_POINTER_RETURN_VALUE(world, raptor_world, NULL);
+
+ raptor_world_open(world);
+
+ if(literal)
+ literal_len = strlen((const char*)literal);
+
+ if(language)
+ language_len = strlen((const char*)language);
+
+ return raptor_new_term_from_counted_literal(world, literal, literal_len,
+ datatype, language, language_len);
+}
+
+
+/**
* raptor_new_term_from_blank:
* @world: raptor world
* @blank: blank node identifier