Mon, 12 Sep 2016 08:55:35 -0500
gg: Protect against issues when closing while connecting
Since the GIOStream is cancelled when data is freed, any cancelled
callbacks are called after such data is freed. This patch guards against
cancelled calls by safely returning without accessing any freed data if
the connection has been cancelled (aka closed).
Futhermore, if GG tries to connect and is quickly disconnected,
ggp_tcpsocket_close() is never called. As far as I can tell, it's an
existing bug, but PurpleSockets both work differently when closing and
are closed by the connection if any leak. So the issue wasn't a major
problem. This patch lessens the issue by guarding against it, but it
should be fixed at some point.
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
1 | /* purple |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
2 | * |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
3 | * Purple is the legal property of its developers, whose names are too numerous |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
4 | * to list here. Please refer to the COPYRIGHT file distributed with this |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
5 | * source distribution. |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
6 | * |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
7 | * This program is free software; you can redistribute it and/or modify |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
8 | * it under the terms of the GNU General Public License as published by |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
9 | * the Free Software Foundation; either version 2 of the License, or |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
10 | * (at your option) any later version. |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
11 | * |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
12 | * This program is distributed in the hope that it will be useful, |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
15 | * GNU General Public License for more details. |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
16 | * |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
17 | * You should have received a copy of the GNU General Public License |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
18 | * along with this program; if not, write to the Free Software |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
20 | */ |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
21 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
22 | #include "internal.h" |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
23 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
24 | #include <stdarg.h> |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
25 | #include <string.h> |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
26 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
27 | #include "json.h" |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
28 | #include "util.h" |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
29 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
30 | typedef struct _FbJsonValue FbJsonValue; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
31 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
32 | struct _FbJsonValue |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
33 | { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
34 | const gchar *expr; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
35 | FbJsonType type; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
36 | gboolean required; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
37 | GValue value; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
38 | }; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
39 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
40 | struct _FbJsonValuesPrivate |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
41 | { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
42 | JsonNode *root; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
43 | GQueue *queue; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
44 | GList *next; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
45 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
46 | gboolean isarray; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
47 | JsonArray *array; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
48 | guint index; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
49 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
50 | GError *error; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
51 | }; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
52 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
53 | G_DEFINE_TYPE(FbJsonValues, fb_json_values, G_TYPE_OBJECT); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
54 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
55 | static void |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
56 | fb_json_values_dispose(GObject *obj) |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
57 | { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
58 | FbJsonValue *value; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
59 | FbJsonValuesPrivate *priv = FB_JSON_VALUES(obj)->priv; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
60 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
61 | while (!g_queue_is_empty(priv->queue)) { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
62 | value = g_queue_pop_head(priv->queue); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
63 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
64 | if (G_IS_VALUE(&value->value)) { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
65 | g_value_unset(&value->value); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
66 | } |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
67 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
68 | g_free(value); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
69 | } |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
70 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
71 | if (priv->array != NULL) { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
72 | json_array_unref(priv->array); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
73 | } |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
74 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
75 | if (priv->error != NULL) { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
76 | g_error_free(priv->error); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
77 | } |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
78 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
79 | g_queue_free(priv->queue); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
80 | } |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
81 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
82 | static void |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
83 | fb_json_values_class_init(FbJsonValuesClass *klass) |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
84 | { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
85 | GObjectClass *gklass = G_OBJECT_CLASS(klass); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
86 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
87 | gklass->dispose = fb_json_values_dispose; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
88 | g_type_class_add_private(klass, sizeof (FbJsonValuesPrivate)); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
89 | } |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
90 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
91 | static void |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
92 | fb_json_values_init(FbJsonValues *values) |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
93 | { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
94 | FbJsonValuesPrivate *priv; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
95 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
96 | priv = G_TYPE_INSTANCE_GET_PRIVATE(values, FB_TYPE_JSON_VALUES, |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
97 | FbJsonValuesPrivate); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
98 | values->priv = priv; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
99 | |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
100 | priv->queue = g_queue_new(); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
101 | } |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
102 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
103 | GQuark |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
104 | fb_json_error_quark(void) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
105 | { |
|
37252
be11d9f148a6
facebook: initialize static GQuarks
James Geboski <jgeboski@gmail.com>
parents:
37251
diff
changeset
|
106 | static GQuark q = 0; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
107 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
108 | if (G_UNLIKELY(q == 0)) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
109 | q = g_quark_from_static_string("fb-json-error-quark"); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
110 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
111 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
112 | return q; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
113 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
114 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
115 | JsonBuilder * |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
116 | fb_json_bldr_new(JsonNodeType type) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
117 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
118 | JsonBuilder *bldr; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
119 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
120 | bldr = json_builder_new(); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
121 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
122 | switch (type) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
123 | case JSON_NODE_ARRAY: |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
124 | fb_json_bldr_arr_begin(bldr, NULL); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
125 | break; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
126 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
127 | case JSON_NODE_OBJECT: |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
128 | fb_json_bldr_obj_begin(bldr, NULL); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
129 | break; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
130 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
131 | default: |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
132 | break; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
133 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
134 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
135 | return bldr; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
136 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
137 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
138 | gchar * |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
139 | fb_json_bldr_close(JsonBuilder *bldr, JsonNodeType type, gsize *size) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
140 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
141 | gchar *ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
142 | JsonGenerator *genr; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
143 | JsonNode *root; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
144 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
145 | switch (type) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
146 | case JSON_NODE_ARRAY: |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
147 | fb_json_bldr_arr_end(bldr); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
148 | break; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
149 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
150 | case JSON_NODE_OBJECT: |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
151 | fb_json_bldr_obj_end(bldr); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
152 | break; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
153 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
154 | default: |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
155 | break; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
156 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
157 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
158 | genr = json_generator_new(); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
159 | root = json_builder_get_root(bldr); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
160 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
161 | json_generator_set_root(genr, root); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
162 | ret = json_generator_to_data(genr, size); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
163 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
164 | json_node_free(root); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
165 | g_object_unref(genr); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
166 | g_object_unref(bldr); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
167 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
168 | return ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
169 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
170 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
171 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
172 | fb_json_bldr_arr_begin(JsonBuilder *bldr, const gchar *name) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
173 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
174 | if (name != NULL) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
175 | json_builder_set_member_name(bldr, name); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
176 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
177 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
178 | json_builder_begin_array(bldr); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
179 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
180 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
181 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
182 | fb_json_bldr_arr_end(JsonBuilder *bldr) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
183 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
184 | json_builder_end_array(bldr); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
185 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
186 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
187 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
188 | fb_json_bldr_obj_begin(JsonBuilder *bldr, const gchar *name) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
189 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
190 | if (name != NULL) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
191 | json_builder_set_member_name(bldr, name); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
192 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
193 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
194 | json_builder_begin_object(bldr); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
195 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
196 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
197 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
198 | fb_json_bldr_obj_end(JsonBuilder *bldr) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
199 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
200 | json_builder_end_object(bldr); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
201 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
202 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
203 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
204 | fb_json_bldr_add_bool(JsonBuilder *bldr, const gchar *name, gboolean value) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
205 | { |
|
37284
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
206 | if (name != NULL) { |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
207 | json_builder_set_member_name(bldr, name); |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
208 | } |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
209 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
210 | json_builder_add_boolean_value(bldr, value); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
211 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
212 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
213 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
214 | fb_json_bldr_add_dbl(JsonBuilder *bldr, const gchar *name, gdouble value) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
215 | { |
|
37284
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
216 | if (name != NULL) { |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
217 | json_builder_set_member_name(bldr, name); |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
218 | } |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
219 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
220 | json_builder_add_double_value(bldr, value); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
221 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
222 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
223 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
224 | fb_json_bldr_add_int(JsonBuilder *bldr, const gchar *name, gint64 value) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
225 | { |
|
37284
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
226 | if (name != NULL) { |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
227 | json_builder_set_member_name(bldr, name); |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
228 | } |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
229 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
230 | json_builder_add_int_value(bldr, value); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
231 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
232 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
233 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
234 | fb_json_bldr_add_str(JsonBuilder *bldr, const gchar *name, const gchar *value) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
235 | { |
|
37284
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
236 | if (name != NULL) { |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
237 | json_builder_set_member_name(bldr, name); |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
238 | } |
|
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
239 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
240 | json_builder_add_string_value(bldr, value); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
241 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
242 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
243 | void |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
244 | fb_json_bldr_add_strf(JsonBuilder *bldr, const gchar *name, |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
245 | const gchar *format, ...) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
246 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
247 | gchar *value; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
248 | va_list ap; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
249 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
250 | va_start(ap, format); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
251 | value = g_strdup_vprintf(format, ap); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
252 | va_end(ap); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
253 | |
|
37284
53cb588d8760
facebook: implemented kicking/leaving group chats
James Geboski <jgeboski@gmail.com>
parents:
37269
diff
changeset
|
254 | fb_json_bldr_add_str(bldr, name, value); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
255 | g_free(value); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
256 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
257 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
258 | JsonNode * |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
259 | fb_json_node_new(const gchar *data, gssize size, GError **error) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
260 | { |
|
37429
7f8a2f301a82
facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents:
37363
diff
changeset
|
261 | gchar *slice; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
262 | JsonNode *root; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
263 | JsonParser *prsr; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
264 | |
|
37431
df4d0ab7eaae
facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents:
37430
diff
changeset
|
265 | g_return_val_if_fail(data != NULL, NULL); |
|
df4d0ab7eaae
facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents:
37430
diff
changeset
|
266 | |
|
df4d0ab7eaae
facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents:
37430
diff
changeset
|
267 | if (size < 0) { |
|
df4d0ab7eaae
facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents:
37430
diff
changeset
|
268 | size = strlen(data); |
|
df4d0ab7eaae
facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents:
37430
diff
changeset
|
269 | } |
|
df4d0ab7eaae
facebook-json: fixed a size overflow with string duplication
James Geboski <jgeboski@gmail.com>
parents:
37430
diff
changeset
|
270 | |
|
37429
7f8a2f301a82
facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents:
37363
diff
changeset
|
271 | /* Ensure data is null terminated for json-glib < 1.0.2 */ |
|
7f8a2f301a82
facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents:
37363
diff
changeset
|
272 | slice = g_strndup(data, size); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
273 | prsr = json_parser_new(); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
274 | |
|
37429
7f8a2f301a82
facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents:
37363
diff
changeset
|
275 | if (!json_parser_load_from_data(prsr, slice, size, error)) { |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
276 | g_object_unref(prsr); |
|
37429
7f8a2f301a82
facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents:
37363
diff
changeset
|
277 | g_free(slice); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
278 | return NULL; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
279 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
280 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
281 | root = json_parser_get_root(prsr); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
282 | root = json_node_copy(root); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
283 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
284 | g_object_unref(prsr); |
|
37429
7f8a2f301a82
facebook-json: Ensure data is null terminated for json-glib < 1.0.2
dequis <dx@dxzone.com.ar>
parents:
37363
diff
changeset
|
285 | g_free(slice); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
286 | return root; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
287 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
288 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
289 | JsonNode * |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
290 | fb_json_node_get(JsonNode *root, const gchar *expr, GError **error) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
291 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
292 | GError *err = NULL; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
293 | guint size; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
294 | JsonArray *rslt; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
295 | JsonNode *node; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
296 | JsonNode *ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
297 | |
|
37430
56c7dbe97266
facebook-json:`Special-case "$" to return root for json-glib < 0.99.2
dequis <dx@dxzone.com.ar>
parents:
37429
diff
changeset
|
298 | /* Special case for json-glib < 0.99.2 */ |
|
56c7dbe97266
facebook-json:`Special-case "$" to return root for json-glib < 0.99.2
dequis <dx@dxzone.com.ar>
parents:
37429
diff
changeset
|
299 | if (purple_strequal(expr, "$")) { |
|
56c7dbe97266
facebook-json:`Special-case "$" to return root for json-glib < 0.99.2
dequis <dx@dxzone.com.ar>
parents:
37429
diff
changeset
|
300 | return json_node_copy(root); |
|
56c7dbe97266
facebook-json:`Special-case "$" to return root for json-glib < 0.99.2
dequis <dx@dxzone.com.ar>
parents:
37429
diff
changeset
|
301 | } |
|
56c7dbe97266
facebook-json:`Special-case "$" to return root for json-glib < 0.99.2
dequis <dx@dxzone.com.ar>
parents:
37429
diff
changeset
|
302 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
303 | node = json_path_query(expr, root, &err); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
304 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
305 | if (err != NULL) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
306 | g_propagate_error(error, err); |
|
37251
8d6136db4399
facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents:
37250
diff
changeset
|
307 | json_node_free(node); |
|
8d6136db4399
facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents:
37250
diff
changeset
|
308 | return NULL; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
309 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
310 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
311 | rslt = json_node_get_array(node); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
312 | size = json_array_get_length(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
313 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
314 | if (size < 1) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
315 | g_set_error(error, FB_JSON_ERROR, FB_JSON_ERROR_NOMATCH, |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
316 | _("No matches for %s"), expr); |
|
37251
8d6136db4399
facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents:
37250
diff
changeset
|
317 | json_node_free(node); |
|
8d6136db4399
facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents:
37250
diff
changeset
|
318 | return NULL; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
319 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
320 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
321 | if (size > 1) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
322 | g_set_error(error, FB_JSON_ERROR, FB_JSON_ERROR_AMBIGUOUS, |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
323 | _("Ambiguous matches for %s"), expr); |
|
37251
8d6136db4399
facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents:
37250
diff
changeset
|
324 | json_node_free(node); |
|
8d6136db4399
facebook: removed unnecessary gotos
James Geboski <jgeboski@gmail.com>
parents:
37250
diff
changeset
|
325 | return NULL; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
326 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
327 | |
|
37299
b14336308988
facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents:
37284
diff
changeset
|
328 | if (json_array_get_null_element(rslt, 0)) { |
|
b14336308988
facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents:
37284
diff
changeset
|
329 | g_set_error(error, FB_JSON_ERROR, FB_JSON_ERROR_NULL, |
|
b14336308988
facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents:
37284
diff
changeset
|
330 | _("Null value for %s"), expr); |
|
b14336308988
facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents:
37284
diff
changeset
|
331 | json_node_free(node); |
|
b14336308988
facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents:
37284
diff
changeset
|
332 | return NULL; |
|
b14336308988
facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents:
37284
diff
changeset
|
333 | } |
|
b14336308988
facebook: migrated FQL usage to GraphQL
James Geboski <jgeboski@gmail.com>
parents:
37284
diff
changeset
|
334 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
335 | ret = json_array_dup_element(rslt, 0); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
336 | json_node_free(node); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
337 | return ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
338 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
339 | |
|
37315
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
340 | JsonNode * |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
341 | fb_json_node_get_nth(JsonNode *root, guint n) |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
342 | { |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
343 | GList *vals; |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
344 | JsonNode *ret; |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
345 | JsonObject *obj; |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
346 | |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
347 | obj = json_node_get_object(root); |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
348 | vals = json_object_get_values(obj); |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
349 | ret = g_list_nth_data(vals, n); |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
350 | |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
351 | g_list_free(vals); |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
352 | return ret; |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
353 | } |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
354 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
355 | JsonArray * |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
356 | fb_json_node_get_arr(JsonNode *root, const gchar *expr, GError **error) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
357 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
358 | JsonArray *ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
359 | JsonNode *rslt; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
360 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
361 | rslt = fb_json_node_get(root, expr, error); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
362 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
363 | if (rslt == NULL) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
364 | return NULL; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
365 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
366 | |
|
37269
129e87951cd6
facebook: fixed JSON parsing for older json-glib versions
James Geboski <jgeboski@gmail.com>
parents:
37252
diff
changeset
|
367 | ret = json_node_dup_array(rslt); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
368 | json_node_free(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
369 | return ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
370 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
371 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
372 | gboolean |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
373 | fb_json_node_get_bool(JsonNode *root, const gchar *expr, GError **error) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
374 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
375 | gboolean ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
376 | JsonNode *rslt; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
377 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
378 | rslt = fb_json_node_get(root, expr, error); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
379 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
380 | if (rslt == NULL) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
381 | return FALSE; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
382 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
383 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
384 | ret = json_node_get_boolean(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
385 | json_node_free(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
386 | return ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
387 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
388 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
389 | gdouble |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
390 | fb_json_node_get_dbl(JsonNode *root, const gchar *expr, GError **error) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
391 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
392 | gdouble ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
393 | JsonNode *rslt; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
394 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
395 | rslt = fb_json_node_get(root, expr, error); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
396 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
397 | if (rslt == NULL) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
398 | return 0.0; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
399 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
400 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
401 | ret = json_node_get_double(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
402 | json_node_free(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
403 | return ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
404 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
405 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
406 | gint64 |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
407 | fb_json_node_get_int(JsonNode *root, const gchar *expr, GError **error) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
408 | { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
409 | gint64 ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
410 | JsonNode *rslt; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
411 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
412 | rslt = fb_json_node_get(root, expr, error); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
413 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
414 | if (rslt == NULL) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
415 | return 0; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
416 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
417 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
418 | ret = json_node_get_int(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
419 | json_node_free(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
420 | return ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
421 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
422 | |
|
37269
129e87951cd6
facebook: fixed JSON parsing for older json-glib versions
James Geboski <jgeboski@gmail.com>
parents:
37252
diff
changeset
|
423 | gchar * |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
424 | fb_json_node_get_str(JsonNode *root, const gchar *expr, GError **error) |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
425 | { |
|
37269
129e87951cd6
facebook: fixed JSON parsing for older json-glib versions
James Geboski <jgeboski@gmail.com>
parents:
37252
diff
changeset
|
426 | gchar *ret; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
427 | JsonNode *rslt; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
428 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
429 | rslt = fb_json_node_get(root, expr, error); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
430 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
431 | if (rslt == NULL) { |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
432 | return NULL; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
433 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
434 | |
|
37269
129e87951cd6
facebook: fixed JSON parsing for older json-glib versions
James Geboski <jgeboski@gmail.com>
parents:
37252
diff
changeset
|
435 | ret = json_node_dup_string(rslt); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
436 | json_node_free(rslt); |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
437 | return ret; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
438 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
439 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
440 | FbJsonValues * |
|
37334
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
441 | fb_json_values_new(JsonNode *root) |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
442 | { |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
443 | FbJsonValues *values; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
444 | FbJsonValuesPrivate *priv; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
445 | |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
446 | g_return_val_if_fail(root != NULL, NULL); |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
447 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
448 | values = g_object_new(FB_TYPE_JSON_VALUES, NULL); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
449 | priv = values->priv; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
450 | priv->root = root; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
451 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
452 | return values; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
453 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
454 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
455 | void |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
456 | fb_json_values_add(FbJsonValues *values, FbJsonType type, gboolean required, |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
457 | const gchar *expr) |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
458 | { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
459 | FbJsonValue *value; |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
460 | FbJsonValuesPrivate *priv; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
461 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
462 | g_return_if_fail(values != NULL); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
463 | g_return_if_fail(expr != NULL); |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
464 | priv = values->priv; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
465 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
466 | value = g_new0(FbJsonValue, 1); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
467 | value->expr = expr; |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
468 | value->type = type; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
469 | value->required = required; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
470 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
471 | g_queue_push_tail(priv->queue, value); |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
472 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
473 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
474 | JsonNode * |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
475 | fb_json_values_get_root(FbJsonValues *values) |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
476 | { |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
477 | FbJsonValuesPrivate *priv; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
478 | guint index; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
479 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
480 | g_return_val_if_fail(values != NULL, NULL); |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
481 | priv = values->priv; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
482 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
483 | if (priv->array == NULL) { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
484 | return priv->root; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
485 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
486 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
487 | g_return_val_if_fail(priv->index > 0, NULL); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
488 | index = priv->index - 1; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
489 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
490 | if (json_array_get_length(priv->array) <= index) { |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
491 | return NULL; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
492 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
493 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
494 | return json_array_get_element(priv->array, index); |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
495 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
496 | |
|
37334
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
497 | void |
|
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
498 | fb_json_values_set_array(FbJsonValues *values, gboolean required, |
|
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
499 | const gchar *expr) |
|
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
500 | { |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
501 | FbJsonValuesPrivate *priv; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
502 | |
|
37334
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
503 | g_return_if_fail(values != NULL); |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
504 | priv = values->priv; |
|
37334
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
505 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
506 | priv->array = fb_json_node_get_arr(priv->root, expr, &priv->error); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
507 | priv->isarray = TRUE; |
|
37334
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
508 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
509 | if ((priv->error != NULL) && !required) { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
510 | g_clear_error(&priv->error); |
|
37334
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
511 | } |
|
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
512 | } |
|
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
513 | |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
514 | gboolean |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
515 | fb_json_values_update(FbJsonValues *values, GError **error) |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
516 | { |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
517 | FbJsonValue *value; |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
518 | FbJsonValuesPrivate *priv; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
519 | GError *err = NULL; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
520 | GList *l; |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
521 | GType type; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
522 | JsonNode *root; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
523 | JsonNode *node; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
524 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
525 | g_return_val_if_fail(values != NULL, FALSE); |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
526 | priv = values->priv; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
527 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
528 | if (G_UNLIKELY(priv->error != NULL)) { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
529 | g_propagate_error(error, priv->error); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
530 | priv->error = NULL; |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
531 | return FALSE; |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
532 | } |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
533 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
534 | if (priv->isarray) { |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
535 | if ((priv->array == NULL) || |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
536 | (json_array_get_length(priv->array) <= priv->index)) |
|
37334
860ee76f5f58
facebook: fixed all JSON arrays being required
James Geboski <jgeboski@gmail.com>
parents:
37321
diff
changeset
|
537 | { |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
538 | return FALSE; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
539 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
540 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
541 | root = json_array_get_element(priv->array, priv->index++); |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
542 | } else { |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
543 | root = priv->root; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
544 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
545 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
546 | g_return_val_if_fail(root != NULL, FALSE); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
547 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
548 | for (l = priv->queue->head; l != NULL; l = l->next) { |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
549 | value = l->data; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
550 | node = fb_json_node_get(root, value->expr, &err); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
551 | |
|
37315
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
552 | if (G_IS_VALUE(&value->value)) { |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
553 | g_value_unset(&value->value); |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
554 | } |
|
7a7771557143
facebook: implemented handling of message attachments
James Geboski <jgeboski@gmail.com>
parents:
37314
diff
changeset
|
555 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
556 | if (err != NULL) { |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
557 | json_node_free(node); |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
558 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
559 | if (value->required) { |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
560 | g_propagate_error(error, err); |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
561 | return FALSE; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
562 | } |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
563 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
564 | g_clear_error(&err); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
565 | continue; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
566 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
567 | |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
568 | type = json_node_get_value_type(node); |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
569 | |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
570 | if (G_UNLIKELY(type != value->type)) { |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
571 | g_set_error(error, FB_JSON_ERROR, FB_JSON_ERROR_TYPE, |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
572 | _("Expected a %s but got a %s for %s"), |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
573 | g_type_name(value->type), |
|
37320
a21c8ba4d0e9
facebook: fixed the printing of invalid JSON type names
James Geboski <jgeboski@gmail.com>
parents:
37316
diff
changeset
|
574 | g_type_name(type), |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
575 | value->expr); |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
576 | json_node_free(node); |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
577 | return FALSE; |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
578 | } |
|
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
579 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
580 | json_node_get_value(node, &value->value); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
581 | json_node_free(node); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
582 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
583 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
584 | priv->next = priv->queue->head; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
585 | return TRUE; |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
586 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
587 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
588 | const GValue * |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
589 | fb_json_values_next(FbJsonValues *values) |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
590 | { |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
591 | FbJsonValue *value; |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
592 | FbJsonValuesPrivate *priv; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
593 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
594 | g_return_val_if_fail(values != NULL, NULL); |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
595 | priv = values->priv; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
596 | |
|
37363
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
597 | g_return_val_if_fail(priv->next != NULL, NULL); |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
598 | value = priv->next->data; |
|
7201f07fe8f7
facebook: gobjectified the FbJsonValues interface
James Geboski <jgeboski@gmail.com>
parents:
37334
diff
changeset
|
599 | priv->next = priv->next->next; |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
600 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
601 | if (!G_IS_VALUE(&value->value)) { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
602 | return NULL; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
603 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
604 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
605 | return &value->value; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
606 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
607 | |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
608 | gboolean |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
609 | fb_json_values_next_bool(FbJsonValues *values, gboolean defval) |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
610 | { |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
611 | const GValue *value; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
612 | |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
613 | value = fb_json_values_next(values); |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
614 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
615 | if (G_UNLIKELY(value == NULL)) { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
616 | return defval; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
617 | } |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
618 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
619 | return g_value_get_boolean(value); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
620 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
621 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
622 | gdouble |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
623 | fb_json_values_next_dbl(FbJsonValues *values, gdouble defval) |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
624 | { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
625 | const GValue *value; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
626 | |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
627 | value = fb_json_values_next(values); |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
628 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
629 | if (G_UNLIKELY(value == NULL)) { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
630 | return defval; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
631 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
632 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
633 | return g_value_get_double(value); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
634 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
635 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
636 | gint64 |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
637 | fb_json_values_next_int(FbJsonValues *values, gint64 defval) |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
638 | { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
639 | const GValue *value; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
640 | |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
641 | value = fb_json_values_next(values); |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
642 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
643 | if (G_UNLIKELY(value == NULL)) { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
644 | return defval; |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
645 | } |
|
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
646 | |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
647 | return g_value_get_int64(value); |
|
37250
3f5570a17b15
facebook: initial import of bitlbee-facebook
James Geboski <jgeboski@gmail.com>
parents:
diff
changeset
|
648 | } |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
649 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
650 | const gchar * |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
651 | fb_json_values_next_str(FbJsonValues *values, const gchar *defval) |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
652 | { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
653 | const GValue *value; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
654 | |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
655 | value = fb_json_values_next(values); |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
656 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
657 | if (G_UNLIKELY(value == NULL)) { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
658 | return defval; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
659 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
660 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
661 | return g_value_get_string(value); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
662 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
663 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
664 | gchar * |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
665 | fb_json_values_next_str_dup(FbJsonValues *values, const gchar *defval) |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
666 | { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
667 | const GValue *value; |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
668 | |
|
37316
9e3520d6ec49
facebook: refactored and improved JSON error handling
James Geboski <jgeboski@gmail.com>
parents:
37315
diff
changeset
|
669 | value = fb_json_values_next(values); |
|
37314
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
670 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
671 | if (G_UNLIKELY(value == NULL)) { |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
672 | return g_strdup(defval); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
673 | } |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
674 | |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
675 | return g_value_dup_string(value); |
|
1fedb5e19577
facebook: refactored the parsing of JSON values
James Geboski <jgeboski@gmail.com>
parents:
37299
diff
changeset
|
676 | } |