diff options
author | Philip Withnall <philip.withnall@collabora.co.uk> | 2015-02-06 15:10:35 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2015-08-18 14:11:52 +0100 |
commit | 8fd3660b4bc7e764cc57d11bbba8ef3a0ab2ee7d (patch) | |
tree | 1a936d6e278fbaf7e4003c1bef6daf95a97d19c6 /json-glib/json-reader.c | |
parent | f7eb50b5b03ee5870e476135bd989cb49d8d44c2 (diff) | |
download | json-glib-8fd3660b4bc7e764cc57d11bbba8ef3a0ab2ee7d.tar.gz |
reader: Clarify use of json_reader_end_[element|member]() with errors
Include an example showing that the end function must be called on both
code paths (success and failure) if the reader object is to be used
afterwards.
https://bugzilla.gnome.org/show_bug.cgi?id=744100
Diffstat (limited to 'json-glib/json-reader.c')
-rw-r--r-- | json-glib/json-reader.c | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/json-glib/json-reader.c b/json-glib/json-reader.c index 85455a3..f04ef5a 100644 --- a/json-glib/json-reader.c +++ b/json-glib/json-reader.c @@ -433,7 +433,21 @@ json_reader_is_value (JsonReader *reader) * * If @reader is not currently on an array or an object, or if the @index_ is * bigger than the size of the array or the object, the #JsonReader will be - * put in an error state until json_reader_end_element() is called. + * put in an error state until json_reader_end_element() is called. This means + * that if used conditionally, json_reader_end_element() must be called on both + * code paths: + * + * |[ + * if (!json_reader_read_element (reader, 1)) + * { + * json_reader_end_element (reader); + * g_set_error (error, …); + * return FALSE; + * } + * + * str_value = json_reader_get_string_value (reader); + * json_reader_end_element (reader); + * ]| * * Return value: %TRUE on success, and %FALSE otherwise * @@ -615,7 +629,20 @@ json_reader_count_elements (JsonReader *reader) * * If @reader is not currently on an object, or if the @member_name is not * defined in the object, the #JsonReader will be put in an error state until - * json_reader_end_member() is called. + * json_reader_end_member() is called. This means that if used conditionally, + * json_reader_end_member() must be called on both code paths: + * + * |[ + * if (!json_reader_read_member (reader, "title")) + * { + * json_reader_end_member (reader); + * g_set_error (error, …); + * return FALSE; + * } + * + * str_value = json_reader_get_string_value (reader); + * json_reader_end_member (reader); + * ]| * * Return value: %TRUE on success, and %FALSE otherwise * |