[libsoup/new-io] Add some error checking



commit 611b29aa63b4a3f3d1286311df9a025e32d438aa
Author: Benjamin Otte <otte gnome org>
Date:   Sun Dec 20 12:02:22 2009 +0100

    Add some error checking

 libsoup/soup-request.c |   24 ++----------------------
 libsoup/soup-session.c |   24 ++++++++++++++++++++++++
 2 files changed, 26 insertions(+), 22 deletions(-)
---
diff --git a/libsoup/soup-request.c b/libsoup/soup-request.c
index a969c9d..3623cb8 100644
--- a/libsoup/soup-request.c
+++ b/libsoup/soup-request.c
@@ -40,8 +40,6 @@
  * Since: 2.30
  **/
 
-static void soup_request_interface_init (SoupRequestInterface *interface);
-
 static void          send_async_default  (SoupRequest          *request,
 					  GCancellable         *cancellable,
 					  GAsyncReadyCallback   callback,
@@ -50,28 +48,10 @@ static GInputStream *send_finish_default (SoupRequest          *request,
 					  GAsyncResult         *result,
 					  GError              **error);
 
-GType
-soup_request_get_type (void)
-{
-  static volatile gsize g_define_type_id__volatile = 0;
-  if (g_once_init_enter (&g_define_type_id__volatile))
-    {
-      GType g_define_type_id =
-        g_type_register_static_simple (G_TYPE_INTERFACE,
-                                       g_intern_static_string ("SoupRequest"),
-                                       sizeof (SoupRequestInterface),
-                                       (GClassInitFunc)soup_request_interface_init,
-                                       0,
-                                       (GInstanceInitFunc)NULL,
-                                       (GTypeFlags) 0);
-      g_type_interface_add_prerequisite (g_define_type_id, G_TYPE_OBJECT);
-      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id);
-    }
-  return g_define_type_id__volatile;
-}
+G_DEFINE_INTERFACE (SoupRequest, soup_request, G_TYPE_OBJECT)
 
 static void
-soup_request_interface_init (SoupRequestInterface *interface)
+soup_request_default_init (SoupRequestInterface *interface)
 {
 	interface->send_async = send_async_default;
 	interface->send_finish = send_finish_default;
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c
index bfa2cbe..97c6d35 100644
--- a/libsoup/soup-session.c
+++ b/libsoup/soup-session.c
@@ -2010,6 +2010,27 @@ init_request_types (SoupSessionPrivate *priv)
 			     GSIZE_TO_POINTER (SOUP_TYPE_REQUEST_FTP));
 }
 
+/* RFC 2396, 3.1 */
+static gboolean
+soup_scheme_is_valid (const char *scheme)
+{
+        if (scheme == NULL ||
+            !g_ascii_isalpha (*scheme))
+                return FALSE;
+
+        scheme++;
+        while (*scheme) {
+                if (!g_ascii_isalpha (*scheme) &&
+                    !g_ascii_isdigit (*scheme) &&
+                    *scheme != '+' &&
+                    *scheme != '-' &&
+                    *scheme != '.')
+                        return FALSE;
+                scheme++;
+        }
+        return TRUE;
+}
+
 void
 soup_session_add_protocol (SoupSession *session,
 			   const char  *scheme,
@@ -2018,6 +2039,8 @@ soup_session_add_protocol (SoupSession *session,
 	SoupSessionPrivate *priv;
 
 	g_return_if_fail (SOUP_IS_SESSION (session));
+	g_return_if_fail (soup_scheme_is_valid (scheme));
+	g_return_if_fail (g_type_is_a (request_type, SOUP_TYPE_REQUEST));
 
 	priv = SOUP_SESSION_GET_PRIVATE (session);
 	init_request_types (priv);
@@ -2032,6 +2055,7 @@ soup_session_remove_protocol (SoupSession *session,
 	SoupSessionPrivate *priv;
 
 	g_return_if_fail (SOUP_IS_SESSION (session));
+	g_return_if_fail (soup_scheme_is_valid (scheme));
 
 	priv = SOUP_SESSION_GET_PRIVATE (session);
 	init_request_types (priv);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]