diff options
author | Dave Beckett <dave@dajobe.org> | 2010-06-02 12:22:15 -0700 |
---|---|---|
committer | Dave Beckett <dave@dajobe.org> | 2010-06-02 12:22:15 -0700 |
commit | cb9e73420fe02ed1eec330b3b1b4a35e870a590e (patch) | |
tree | e72a8cbf99867daac81ec886af0c1152027ea930 /src/raptor_term.c | |
parent | 0120d2846fbcf25480dd64d11dfa0cfac43e4546 (diff) | |
download | raptor-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.c | 77 |
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 |