/soc/2015/jgeboski/facebook: d6cb70301fea: facebook: refactored ...

James Geboski jgeboski at gmail.com
Sat Aug 1 17:27:14 EDT 2015


Changeset: d6cb70301feada5e305a0c4ed0edeab40db77ab7
Author:	 James Geboski <jgeboski at gmail.com>
Date:	 2015-08-01 17:26 -0400
Branch:	 facebook
URL: https://hg.pidgin.im/soc/2015/jgeboski/facebook/rev/d6cb70301fea

Description:

facebook: refactored error propagation

diffstat:

 libpurple/glibcompat.h              |  19 +++++++++++++++++++
 libpurple/protocols/facebook/api.c  |  16 ++++++----------
 libpurple/protocols/facebook/mqtt.c |   9 +++------
 3 files changed, 28 insertions(+), 16 deletions(-)

diffs (110 lines):

diff --git a/libpurple/glibcompat.h b/libpurple/glibcompat.h
--- a/libpurple/glibcompat.h
+++ b/libpurple/glibcompat.h
@@ -168,6 +168,25 @@ static inline void g_object_class_instal
 		g_object_class_install_property(oclass, i, pspecs[i]);
 }
 
+#if !GLIB_CHECK_VERSION(2, 22, 0)
+
+#include <stdarg.h>
+
+static inline GError * g_error_new_valist(GQuark domain, gint code,
+	const gchar *format, va_list args)
+{
+	gchar *str;
+	GError *error;
+
+	str = g_strdup_vprintf(format, args);
+	error = g_error_new_literal(domain, code, str);
+
+	g_free(str);
+	return error;
+}
+
+#endif /* < 2.22.0 */
+
 #endif /* < 2.26.0 */
 
 #endif /* < 2.28.0 */
diff --git a/libpurple/protocols/facebook/api.c b/libpurple/protocols/facebook/api.c
--- a/libpurple/protocols/facebook/api.c
+++ b/libpurple/protocols/facebook/api.c
@@ -23,8 +23,9 @@
 #include <stdarg.h>
 #include <string.h>
 
+#include "glibcompat.h"
+
 #include "api.h"
-#include "glibcompat.h"
 #include "http.h"
 #include "json.h"
 #include "marshal.h"
@@ -329,9 +330,8 @@ fb_api_json_chk(FbApi *api, gconstpointe
 	priv = api->priv;
 
 	if (G_UNLIKELY(size == 0)) {
-		g_set_error(&err, FB_API_ERROR, FB_API_ERROR_GENERAL,
-		            _("Invalid JSON data"));
-		FB_API_ERROR_CHK(api, err, return FALSE);
+		fb_api_error(api, FB_API_ERROR_GENERAL, _("Empty JSON data"));
+		return FALSE;
 	}
 
 	root = fb_json_node_new(data, size, &err);
@@ -1043,19 +1043,15 @@ fb_api_rehash(FbApi *api)
 void
 fb_api_error(FbApi *api, FbApiError error, const gchar *format, ...)
 {
-	gchar *str;
-	GError *err = NULL;
+	GError *err;
 	va_list ap;
 
 	g_return_if_fail(FB_IS_API(api));
 
 	va_start(ap, format);
-	str = g_strdup_vprintf(format, ap);
+	err = g_error_new_valist(FB_API_ERROR, error, format, ap);
 	va_end(ap);
 
-	g_set_error(&err, FB_API_ERROR, error, "%s", str);
-	g_free(str);
-
 	g_signal_emit_by_name(api, "error", err);
 	g_error_free(err);
 }
diff --git a/libpurple/protocols/facebook/mqtt.c b/libpurple/protocols/facebook/mqtt.c
--- a/libpurple/protocols/facebook/mqtt.c
+++ b/libpurple/protocols/facebook/mqtt.c
@@ -27,6 +27,7 @@
 
 #include "account.h"
 #include "eventloop.h"
+#include "glibcompat.h"
 #include "sslconn.h"
 
 #include "marshal.h"
@@ -237,19 +238,15 @@ fb_mqtt_close(FbMqtt *mqtt)
 void
 fb_mqtt_error(FbMqtt *mqtt, FbMqttError error, const gchar *format, ...)
 {
-	gchar *str;
-	GError *err = NULL;
+	GError *err;
 	va_list ap;
 
 	g_return_if_fail(FB_IS_MQTT(mqtt));
 
 	va_start(ap, format);
-	str = g_strdup_vprintf(format, ap);
+	err = g_error_new_valist(FB_MQTT_ERROR, error, format, ap);
 	va_end(ap);
 
-	g_set_error(&err, FB_MQTT_ERROR, error, "%s", str);
-	g_free(str);
-
 	g_signal_emit_by_name(mqtt, "error", err);
 	fb_mqtt_close(mqtt);
 	g_error_free(err);



More information about the Commits mailing list