gisi: Remove forward reference
authorPekka Pessi <pekka.pessi@nokia.com>
Tue, 23 Nov 2010 14:07:00 +0000 (16:07 +0200)
committerAki Niemi <aki.niemi@nokia.com>
Wed, 22 Dec 2010 15:13:47 +0000 (17:13 +0200)
gisi/modem.c

index 746a56f..971d09e 100644 (file)
@@ -275,53 +275,44 @@ static gboolean isi_callback(GIOChannel *channel, GIOCondition cond,
        return TRUE;
 }
 
-GIsiModem *g_isi_modem_create(unsigned index)
+static gboolean modem_subs_update(gpointer data)
 {
-       GIsiModem *modem;
-       GIOChannel *inds;
-       GIOChannel *reqs;
-
-       if (index == 0) {
-               errno = ENODEV;
-               return NULL;
-       }
+       GHashTableIter iter;
+       gpointer keyptr, value;
 
-       modem = g_try_new0(GIsiModem, 1);
-       if (!modem) {
-               errno = ENOMEM;
-               return NULL;
-       }
+       GIsiModem *modem = data;
+       uint8_t msg[3 + 256] = {
+               0, PNS_SUBSCRIBED_RESOURCES_IND,
+               0,
+       };
+       uint8_t count = 0;
 
-       inds = g_isi_phonet_new(index);
-       reqs = g_isi_phonet_new(index);
+       modem->subs_source = 0;
 
-       if (!inds || !reqs) {
-               g_free(modem);
-               return NULL;
-       }
+       g_hash_table_iter_init(&iter, modem->services);
 
-       modem->req_fd = g_io_channel_unix_get_fd(reqs);
-       modem->req_watch = g_io_add_watch(reqs,
-                                       G_IO_IN|G_IO_ERR|G_IO_HUP|G_IO_NVAL,
-                                       isi_callback, modem);
-       modem->ind_fd = g_io_channel_unix_get_fd(inds);
-       modem->ind_watch = g_io_add_watch(inds,
-                                       G_IO_IN|G_IO_ERR|G_IO_HUP|G_IO_NVAL,
-                                       isi_callback, modem);
+       while (g_hash_table_iter_next(&iter, &keyptr, &value)) {
+               GIsiServiceMux *mux = value;
 
-       g_io_channel_unref(reqs);
-       g_io_channel_unref(inds);
+               if (mux->subscriptions > 0) {
+                       msg[3 + count] = mux->resource;
+                       count++;
+               }
+       }
+       msg[2] = count;
 
-       modem->index = index;
-       modem->services = g_hash_table_new_full(g_direct_hash, NULL,
-                                               NULL, service_finalize);
+       sendto(modem->ind_fd, msg, 3 + msg[2], MSG_NOSIGNAL, (void *)&commgr,
+               sizeof(commgr));
 
-       return modem;
+       return FALSE;
 }
 
-GIsiModem *g_isi_modem_create_by_name(const char *name)
+static void modem_subs_update_when_idle(GIsiModem *modem)
 {
-       return g_isi_modem_create(if_nametoindex(name));
+       if (modem->subs_source > 0)
+               return;
+
+       modem->subs_source = g_idle_add(modem_subs_update, modem);
 }
 
 static void service_name_register(GIsiServiceMux *mux)
@@ -358,45 +349,85 @@ static void service_name_deregister(GIsiServiceMux *mux)
                (void *)&namesrv, sizeof(namesrv));
 }
 
-static gboolean modem_subs_update(gpointer data)
+static void pending_destroy(gpointer value, gpointer user)
 {
-       GHashTableIter iter;
-       gpointer keyptr, value;
+       GIsiPending *op = value;
 
-       GIsiModem *modem = data;
-       uint8_t msg[3 + 256] = {
-               0, PNS_SUBSCRIBED_RESOURCES_IND,
-               0,
-       };
-       uint8_t count = 0;
+       if (!op)
+               return;
 
-       modem->subs_source = 0;
+       if (op->timeout > 0)
+               g_source_remove(op->timeout);
 
-       g_hash_table_iter_init(&iter, modem->services);
+       if (op->destroy)
+               op->destroy(op->data);
 
-       while (g_hash_table_iter_next(&iter, &keyptr, &value)) {
-               GIsiServiceMux *mux = value;
+       g_free(op);
+}
 
-               if (mux->subscriptions > 0) {
-                       msg[3 + count] = mux->resource;
-                       count++;
-               }
-       }
-       msg[2] = count;
+static void service_finalize(gpointer value)
+{
+       GIsiServiceMux *mux = value;
+       GIsiModem *modem = mux->modem;
 
-       sendto(modem->ind_fd, msg, 3 + msg[2], MSG_NOSIGNAL, (void *)&commgr,
-               sizeof(commgr));
+       if (mux->subscriptions > 0)
+               modem_subs_update_when_idle(modem);
 
-       return FALSE;
-}
+       if (mux->registrations > 0)
+               service_name_deregister(mux);
 
+       g_slist_foreach(mux->pending, pending_destroy, NULL);
+       g_slist_free(mux->pending);
+       g_free(mux);
+}
 
-static void modem_subs_update_when_idle(GIsiModem *modem)
+GIsiModem *g_isi_modem_create(unsigned index)
 {
-       if (modem->subs_source > 0)
-               return;
+       GIsiModem *modem;
+       GIOChannel *inds;
+       GIOChannel *reqs;
 
-       modem->subs_source = g_idle_add(modem_subs_update, modem);
+       if (index == 0) {
+               errno = ENODEV;
+               return NULL;
+       }
+
+       modem = g_try_new0(GIsiModem, 1);
+       if (!modem) {
+               errno = ENOMEM;
+               return NULL;
+       }
+
+       inds = g_isi_phonet_new(index);
+       reqs = g_isi_phonet_new(index);
+
+       if (!inds || !reqs) {
+               g_free(modem);
+               return NULL;
+       }
+
+       modem->req_fd = g_io_channel_unix_get_fd(reqs);
+       modem->req_watch = g_io_add_watch(reqs,
+                                       G_IO_IN|G_IO_ERR|G_IO_HUP|G_IO_NVAL,
+                                       isi_callback, modem);
+       modem->ind_fd = g_io_channel_unix_get_fd(inds);
+       modem->ind_watch = g_io_add_watch(inds,
+                                       G_IO_IN|G_IO_ERR|G_IO_HUP|G_IO_NVAL,
+                                       isi_callback, modem);
+
+       g_io_channel_unref(reqs);
+       g_io_channel_unref(inds);
+
+       modem->index = index;
+       modem->services = g_hash_table_new_full(g_direct_hash, NULL,
+                                               NULL, service_finalize);
+
+       return modem;
+}
+
+GIsiModem *g_isi_modem_create_by_name(const char *name)
+{
+       return g_isi_modem_create(if_nametoindex(name));
 }
 
 static uint8_t service_next_utid(GIsiServiceMux *mux)
@@ -449,38 +480,6 @@ static void service_regs_decr(GIsiServiceMux *mux)
                service_name_deregister(mux);
 }
 
-static void pending_destroy(gpointer value, gpointer user)
-{
-       GIsiPending *op = value;
-
-       if (!op)
-               return;
-
-       if (op->timeout > 0)
-               g_source_remove(op->timeout);
-
-       if (op->destroy)
-               op->destroy(op->data);
-
-       g_free(op);
-}
-
-static void service_finalize(gpointer value)
-{
-       GIsiServiceMux *mux = value;
-       GIsiModem *modem = mux->modem;
-
-       if (mux->subscriptions > 0)
-               modem_subs_update_when_idle(modem);
-
-       if (mux->registrations > 0)
-               service_name_deregister(mux);
-
-       g_slist_foreach(mux->pending, pending_destroy, NULL);
-       g_slist_free(mux->pending);
-       g_free(mux);
-}
-
 void g_isi_modem_destroy(GIsiModem *modem)
 {
        if (!modem)