Update to 0.10.

This commit is contained in:
Jussi Lehtola 2012-11-24 15:07:01 +02:00
parent 49cb6cca76
commit f6d6e72421
4 changed files with 9 additions and 129 deletions

1
.gitignore vendored
View File

@ -1 +1,2 @@
json-c-0.9.tar.gz json-c-0.9.tar.gz
/json-c-0.10.tar.gz

View File

@ -1,120 +0,0 @@
From a503ee8217a9912f3c58acae33cf3d1d840dab6c Mon Sep 17 00:00:00 2001
From: Jehiah Czebotar <jehiah@gmail.com>
Date: Wed, 8 Dec 2010 03:52:07 +0000
Subject: [patch json-c] add json_tokener_parse_verbose, and return NULL on
parser errors
git-svn-id: http://svn.metaparadigm.com/svn/json-c/trunk@62 327403b1-1117-474d-bef2-5cb71233fd97
---
bits.h | 3 ++-
json_tokener.c | 18 +++++++++++++++++-
json_tokener.h | 3 ++-
test1.c | 15 +++++++++++++--
4 files changed, 34 insertions(+), 5 deletions(-)
diff --git a/bits.h b/bits.h
index f308da3..c8cbbc8 100644
--- a/bits.h
+++ b/bits.h
@@ -22,6 +22,7 @@
#define hexdigit(x) (((x) <= '9') ? (x) - '0' : ((x) & 7) + 9)
#define error_ptr(error) ((void*)error)
-#define is_error(ptr) ((unsigned long)ptr > (unsigned long)-4000L)
+#define error_description(error) (json_tokener_errors[error])
+#define is_error(ptr) (ptr == NULL)
#endif
diff --git a/json_tokener.c b/json_tokener.c
index da414e7..df106b1 100644
--- a/json_tokener.c
+++ b/json_tokener.c
@@ -115,11 +115,27 @@ struct json_object* json_tokener_parse(const char *str)
tok = json_tokener_new();
obj = json_tokener_parse_ex(tok, str, -1);
if(tok->err != json_tokener_success)
- obj = (struct json_object*)error_ptr(-tok->err);
+ obj = NULL;
json_tokener_free(tok);
return obj;
}
+struct json_object* json_tokener_parse_verbose(const char *str, enum json_tokener_error *error)
+{
+ struct json_tokener* tok;
+ struct json_object* obj;
+
+ tok = json_tokener_new();
+ obj = json_tokener_parse_ex(tok, str, -1);
+ *error = tok->err;
+ if(tok->err != json_tokener_success) {
+ obj = NULL;
+ }
+
+ json_tokener_free(tok);
+ return obj;
+}
+
#if !HAVE_STRNDUP
/* CAW: compliant version of strndup() */
diff --git a/json_tokener.h b/json_tokener.h
index 7d40b40..162a152 100644
--- a/json_tokener.h
+++ b/json_tokener.h
@@ -76,7 +76,7 @@ struct json_tokener
char *str;
struct printbuf *pb;
int depth, is_double, st_pos, char_offset;
- ptrdiff_t err;
+ enum json_tokener_error err;
unsigned int ucs_char;
char quote_char;
struct json_tokener_srec stack[JSON_TOKENER_MAX_DEPTH];
@@ -88,6 +88,7 @@ extern struct json_tokener* json_tokener_new(void);
extern void json_tokener_free(struct json_tokener *tok);
extern void json_tokener_reset(struct json_tokener *tok);
extern struct json_object* json_tokener_parse(const char *str);
+extern struct json_object* json_tokener_parse_verbose(const char *str, enum json_tokener_error *error);
extern struct json_object* json_tokener_parse_ex(struct json_tokener *tok,
const char *str, int len);
diff --git a/test1.c b/test1.c
index a3cc6d9..ac1b882 100644
--- a/test1.c
+++ b/test1.c
@@ -2,6 +2,7 @@
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
+#include <assert.h>
#include "json.h"
@@ -135,11 +136,21 @@ int main(int argc, char **argv)
printf("new_obj.to_string()=%s\n", json_object_to_json_string(new_obj));
json_object_put(new_obj);
+ enum json_tokener_error error = json_tokener_success;
+ new_obj = json_tokener_parse_verbose("{ foo }", &error);
+ assert (error == json_tokener_error_parse_object_key_name);
+ assert (new_obj == NULL);
+
new_obj = json_tokener_parse("{ foo }");
- if(is_error(new_obj)) printf("got error as expected\n");
+ assert (new_obj == NULL);
+
+ // if(is_error(new_obj)) printf("got error as expected\n");
new_obj = json_tokener_parse("foo");
- if(is_error(new_obj)) printf("got error as expected\n");
+ assert (new_obj == NULL);
+ new_obj = json_tokener_parse_verbose("foo", &error);
+ assert (new_obj == NULL);
+ assert (error == json_tokener_error_parse_boolean);
new_obj = json_tokener_parse("{ \"foo");
if(is_error(new_obj)) printf("got error as expected\n");
--
1.7.6.4

View File

@ -1,16 +1,13 @@
Name: json-c Name: json-c
Version: 0.9 Version: 0.10
Release: 5%{?dist} Release: 1%{?dist}
Summary: A JSON implementation in C Summary: A JSON implementation in C
Group: Development/Libraries Group: Development/Libraries
License: MIT License: MIT
URL: http://oss.metaparadigm.com/json-c/ URL: https://github.com/json-c/json-c/wiki
Source0: http://oss.metaparadigm.com/json-c/json-c-%{version}.tar.gz Source0: https://github.com/downloads/json-c/json-c/json-c-%{version}.tar.gz
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
# Upstream has applied this in git master branch
Patch0: json-c-add-json_tokener_parse_verbose-and-return-NULL-on-pa.patch
%description %description
JSON-C implements a reference counting object model that allows you to easily JSON-C implements a reference counting object model that allows you to easily
construct JSON objects in C, output them as JSON formatted strings and parse construct JSON objects in C, output them as JSON formatted strings and parse
@ -36,7 +33,6 @@ This package contains the reference manual for json-c.
%prep %prep
%setup -q %setup -q
%patch0 -p1
for doc in ChangeLog; do for doc in ChangeLog; do
iconv -f iso-8859-1 -t utf8 $doc > $doc.new && iconv -f iso-8859-1 -t utf8 $doc > $doc.new &&
touch -r $doc $doc.new && touch -r $doc $doc.new &&
@ -75,6 +71,9 @@ rm -rf %{buildroot}
%doc doc/html/* %doc doc/html/*
%changelog %changelog
* Sat Nov 24 2012 Jussi Lehtola <jussilehtola@fedoraproject.org> - 0.10-1
- Update to 0.10 (BZ #879771).
* Thu Jul 19 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.9-5 * Thu Jul 19 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.9-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild

View File

@ -1 +1 @@
3a13d264528dcbaf3931b0cede24abae json-c-0.9.tar.gz a4edc79410eb894f08d7d52ca9f88732 json-c-0.10.tar.gz