[kdbus] Fix freeing allocated memory
[platform/upstream/glib.git] / gio / gdummyproxyresolver.c
1 /* GIO - GLib Input, Output and Streaming Library
2  *
3  * Copyright (C) 2010 Collabora, Ltd.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General
16  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>.
17  *
18  * Author: Nicolas Dufresne <nicolas.dufresne@collabora.co.uk>
19  */
20
21 #include "config.h"
22
23 #include "gdummyproxyresolver.h"
24
25 #include <glib.h>
26
27 #include "gasyncresult.h"
28 #include "gcancellable.h"
29 #include "gproxyresolver.h"
30 #include "gtask.h"
31
32 #include "giomodule.h"
33 #include "giomodule-priv.h"
34
35 struct _GDummyProxyResolver {
36   GObject parent_instance;
37 };
38
39 static void g_dummy_proxy_resolver_iface_init (GProxyResolverInterface *iface);
40
41 #define g_dummy_proxy_resolver_get_type _g_dummy_proxy_resolver_get_type
42 G_DEFINE_TYPE_WITH_CODE (GDummyProxyResolver, g_dummy_proxy_resolver, G_TYPE_OBJECT,
43                          G_IMPLEMENT_INTERFACE (G_TYPE_PROXY_RESOLVER,
44                                                 g_dummy_proxy_resolver_iface_init)
45                          _g_io_modules_ensure_extension_points_registered ();
46                          g_io_extension_point_implement (G_PROXY_RESOLVER_EXTENSION_POINT_NAME,
47                                                          g_define_type_id,
48                                                          "dummy",
49                                                          -100))
50
51 static void
52 g_dummy_proxy_resolver_finalize (GObject *object)
53 {
54   /* must chain up */
55   G_OBJECT_CLASS (g_dummy_proxy_resolver_parent_class)->finalize (object);
56 }
57
58 static void
59 g_dummy_proxy_resolver_init (GDummyProxyResolver *resolver)
60 {
61 }
62
63 static gboolean
64 g_dummy_proxy_resolver_is_supported (GProxyResolver *resolver)
65 {
66   return TRUE;
67 }
68
69 static gchar **
70 g_dummy_proxy_resolver_lookup (GProxyResolver  *resolver,
71                                const gchar     *uri,
72                                GCancellable    *cancellable,
73                                GError         **error)
74 {
75   gchar **proxies;
76
77   if (g_cancellable_set_error_if_cancelled (cancellable, error))
78     return NULL;
79
80   proxies = g_new0 (gchar *, 2);
81   proxies[0] = g_strdup ("direct://");
82
83   return proxies;
84 }
85
86 static void
87 g_dummy_proxy_resolver_lookup_async (GProxyResolver      *resolver,
88                                      const gchar         *uri,
89                                      GCancellable        *cancellable,
90                                      GAsyncReadyCallback  callback,
91                                      gpointer             user_data)
92 {
93   GError *error = NULL;
94   GTask *task;
95   gchar **proxies;
96
97   task = g_task_new (resolver, cancellable, callback, user_data);
98
99   proxies = g_dummy_proxy_resolver_lookup (resolver, uri, cancellable, &error);
100   if (proxies)
101     g_task_return_pointer (task, proxies, (GDestroyNotify) g_strfreev);
102   else
103     g_task_return_error (task, error);
104   g_object_unref (task);
105 }
106
107 static gchar **
108 g_dummy_proxy_resolver_lookup_finish (GProxyResolver     *resolver,
109                                       GAsyncResult       *result,
110                                       GError            **error)
111 {
112   g_return_val_if_fail (g_task_is_valid (result, resolver), NULL);
113
114   return g_task_propagate_pointer (G_TASK (result), error);
115 }
116
117 static void
118 g_dummy_proxy_resolver_class_init (GDummyProxyResolverClass *resolver_class)
119 {
120   GObjectClass *object_class;
121   
122   object_class = G_OBJECT_CLASS (resolver_class);
123   object_class->finalize = g_dummy_proxy_resolver_finalize;
124 }
125
126 static void
127 g_dummy_proxy_resolver_iface_init (GProxyResolverInterface *iface)
128 {
129   iface->is_supported = g_dummy_proxy_resolver_is_supported;
130   iface->lookup = g_dummy_proxy_resolver_lookup;
131   iface->lookup_async = g_dummy_proxy_resolver_lookup_async;
132   iface->lookup_finish = g_dummy_proxy_resolver_lookup_finish;
133 }