[maemo-commits] [maemo-commits] r10450 - in projects/haf/trunk/maemo-launcher: . launcher

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Wed Mar 7 23:50:29 EET 2007
Author: guillem
Date: 2007-03-07 23:50:26 +0200 (Wed, 07 Mar 2007)
New Revision: 10450

Added:
   projects/haf/trunk/maemo-launcher/launcher/booster_api.h
Modified:
   projects/haf/trunk/maemo-launcher/ChangeLog
   projects/haf/trunk/maemo-launcher/launcher/Makefile.am
   projects/haf/trunk/maemo-launcher/launcher/booster.c
   projects/haf/trunk/maemo-launcher/launcher/booster.h
   projects/haf/trunk/maemo-launcher/launcher/launcher.c
Log:
	* launcher/booster.h (LAUNCHER_BOOSTER_H): Renamed to ...
	(BOOSTER_H): ... this.
	(booster_module_load): Remove declaration.
	(boosters_alloc): New function declaration.
	(boosters_load): Likewise.
	(boosters_init): Likewise.
	(boosters_reload): Likewise.
	(booster_api_t, booster_state_t, BOOSTER_API_VERSION): Move ...
	* launcher/booster_api.h: ... here. New file.
	* launcher/booster.c (booster_new): New function.
	(boosters_alloc): Likewise.
	(boosters_load): Likewise.
	(boosters_init): Likewise.
	(boosters_reload): Likewise.
	* launcher/Makefile.am (maemo_launcherdir): New variable.
	(maemo_launcher_HEADERS): Likewise.
	* launcher/launcher.c (usage): Document new support for multiple
	boosters.
	(main): Rename variable 'booster' to 'boosters'. Use boosters_alloc
	when parsing the arguments and afterwards if 'boosters' is empty.
	Use boosters_load instead of booster_module_load and booster_preinit.
	Use boosters_reload instead of booster_reload. Use boosters_init
	instead of booster_init.


Modified: projects/haf/trunk/maemo-launcher/ChangeLog
===================================================================
--- projects/haf/trunk/maemo-launcher/ChangeLog	2007-03-07 14:59:44 UTC (rev 10449)
+++ projects/haf/trunk/maemo-launcher/ChangeLog	2007-03-07 21:50:26 UTC (rev 10450)
@@ -1,3 +1,30 @@
+2007-03-07  Johannes Schmid <johannes.schmid at openismus.com>,
+	    Guillem Jover  <guillem.jover at nokia.com>
+
+	* launcher/booster.h (LAUNCHER_BOOSTER_H): Renamed to ...
+	(BOOSTER_H): ... this.
+	(booster_module_load): Remove declaration.
+	(boosters_alloc): New function declaration.
+	(boosters_load): Likewise.
+	(boosters_init): Likewise.
+	(boosters_reload): Likewise.
+	(booster_api_t, booster_state_t, BOOSTER_API_VERSION): Move ...
+	* launcher/booster_api.h: ... here. New file.
+	* launcher/booster.c (booster_new): New function.
+	(boosters_alloc): Likewise.
+	(boosters_load): Likewise.
+	(boosters_init): Likewise.
+	(boosters_reload): Likewise.
+	* launcher/Makefile.am (maemo_launcherdir): New variable.
+	(maemo_launcher_HEADERS): Likewise.
+	* launcher/launcher.c (usage): Document new support for multiple
+	boosters.
+	(main): Rename variable 'booster' to 'boosters'. Use boosters_alloc
+	when parsing the arguments and afterwards if 'boosters' is empty.
+	Use boosters_load instead of booster_module_load and booster_preinit.
+	Use boosters_reload instead of booster_reload. Use boosters_init
+	instead of booster_init.
+
 2007-03-01  Guillem Jover  <guillem.jover at nokia.com>
 
 	* configure.ac: Bump version to 0.22~.

Modified: projects/haf/trunk/maemo-launcher/launcher/Makefile.am
===================================================================
--- projects/haf/trunk/maemo-launcher/launcher/Makefile.am	2007-03-07 14:59:44 UTC (rev 10449)
+++ projects/haf/trunk/maemo-launcher/launcher/Makefile.am	2007-03-07 21:50:26 UTC (rev 10450)
@@ -32,6 +32,8 @@
 
 bin_PROGRAMS = maemo-launcher maemo-invoker maemo-summoner
 
+maemo_launcherdir = $(pkgincludedir)
+maemo_launcher_HEADERS = booster_api.h
 maemo_launcher_SOURCES = \
 	launcher.c report.c report.h booster.c booster.h \
 	invokelib.c invokelib.h comm_dbus.c comm_dbus.h \

Modified: projects/haf/trunk/maemo-launcher/launcher/booster.c
===================================================================
--- projects/haf/trunk/maemo-launcher/launcher/booster.c	2007-03-07 14:59:44 UTC (rev 10449)
+++ projects/haf/trunk/maemo-launcher/launcher/booster.c	2007-03-07 21:50:26 UTC (rev 10450)
@@ -1,7 +1,7 @@
 /*
  * $Id$
  *
- * Copyright (C) 2006 Nokia Corporation
+ * Copyright (C) 2006, 2007 Nokia Corporation
  *
  * Author: Guillem Jover <guillem.jover at nokia.com>
  *
@@ -24,12 +24,28 @@
 
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <dlfcn.h>
 
 #include "booster.h"
 #include "report.h"
 
-void
+static booster_t *
+booster_new(const char *name)
+{
+  booster_t *booster;
+
+  booster = malloc(sizeof(*booster));
+  if (!booster)
+    die(50, "allocating booster\n");
+
+  booster->next = NULL;
+  booster->name = name;
+
+  return booster;
+}
+
+static void
 booster_module_load(booster_t *booster)
 {
   char *booster_path;
@@ -63,3 +79,60 @@
         booster->api->booster_version);
 }
 
+void
+boosters_alloc(booster_t **booster, const char *arg)
+{
+  char *name, *name_p;
+
+  /* Optimization: allocate once and share among all boosters, in case we want
+   * to free the boosters we'll have free only 'name' from the first entry. */
+  name = name_p = strdup(arg);
+  if (!name_p)
+    die(60, "allocating booster names\n");
+
+  for (name = name_p; *name_p; name_p++)
+  {
+    if (name == name_p)
+    {
+      *booster = booster_new(name);
+      booster = &((*booster)->next);
+    }
+    else if (*name_p == ',')
+    {
+      *name_p = '\0';
+      name = name_p + 1;
+    }
+  }
+}
+
+void
+boosters_load(booster_t *booster, int *argc, char **argv[])
+{
+  while (booster)
+  {
+    booster_module_load(booster);
+    booster->state = booster->api->booster_preinit(argc, argv);
+    booster = booster->next;
+  }
+}
+
+void
+boosters_init(booster_t *booster, char *argv0)
+{
+  while (booster)
+  {
+    booster->api->booster_init(argv0, booster->state);
+    booster = booster->next;
+  }
+}
+
+void
+boosters_reload(booster_t *booster)
+{
+  while (booster)
+  {
+    booster->api->booster_reload(booster->state);
+    booster = booster->next;
+  }
+}
+

Modified: projects/haf/trunk/maemo-launcher/launcher/booster.h
===================================================================
--- projects/haf/trunk/maemo-launcher/launcher/booster.h	2007-03-07 14:59:44 UTC (rev 10449)
+++ projects/haf/trunk/maemo-launcher/launcher/booster.h	2007-03-07 21:50:26 UTC (rev 10450)
@@ -20,28 +20,23 @@
  *
  */
 
-#ifndef LAUNCHER_BOOSTER_H
-#define LAUNCHER_BOOSTER_H
+#ifndef BOOSTER_H
+#define BOOSTER_H
 
-typedef void *booster_state_t;
+#include "booster_api.h"
 
-typedef struct {
-  int booster_version;
-  booster_state_t (*booster_preinit)(int *argc, char **argv[]);
-  void (*booster_init)(const char *progfilename, const booster_state_t state);
-  void (*booster_reload)(booster_state_t state);
-} booster_api_t;
-
-#define BOOSTER_API_VERSION 0
-
-typedef struct {
+typedef struct booster {
   booster_state_t	state;
   booster_api_t		*api;
   void			*so;
   const char		*name;
+  struct booster	*next;
 } booster_t;
 
-void booster_module_load(booster_t *mod);
+void boosters_alloc(booster_t **booster, const char *arg);
+void boosters_load(booster_t *booster, int *argc, char **argv[]);
+void boosters_init(booster_t *booster, char *argv0);
+void boosters_reload(booster_t *booster);
 
 #endif
 

Copied: projects/haf/trunk/maemo-launcher/launcher/booster_api.h (from rev 10256, projects/haf/trunk/maemo-launcher/launcher/booster.h)
===================================================================
--- projects/haf/trunk/maemo-launcher/launcher/booster.h	2007-02-28 14:12:05 UTC (rev 10256)
+++ projects/haf/trunk/maemo-launcher/launcher/booster_api.h	2007-03-07 21:50:26 UTC (rev 10450)
@@ -0,0 +1,38 @@
+/*
+ * $Id$
+ *
+ * Copyright (C) 2005, 2006 Nokia Corporation
+ *
+ * Author: Guillem Jover <guillem.jover at nokia.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ *
+ */
+
+#ifndef BOOSTER_API_H
+#define BOOSTER_API_H
+
+typedef void *booster_state_t;
+
+typedef struct {
+  int booster_version;
+  booster_state_t (*booster_preinit)(int *argc, char **argv[]);
+  void (*booster_init)(const char *progfilename, const booster_state_t state);
+  void (*booster_reload)(booster_state_t state);
+} booster_api_t;
+
+#define BOOSTER_API_VERSION 0
+
+#endif
+

Modified: projects/haf/trunk/maemo-launcher/launcher/launcher.c
===================================================================
--- projects/haf/trunk/maemo-launcher/launcher/launcher.c	2007-03-07 14:59:44 UTC (rev 10449)
+++ projects/haf/trunk/maemo-launcher/launcher/launcher.c	2007-03-07 21:50:26 UTC (rev 10450)
@@ -664,7 +664,9 @@
 	 "Options:\n"
 	 "  --daemon            Fork and go into the background.\n"
 	 "  --pidfile FILE      Specify a different pid file (default %s).\n"
-	 "  --booster MODULE    Specify a booster module to use (default '%s').\n"
+	 "  --booster MODULE,...\n"
+	 "                      Specify a comma-separated list of boosters to use"
+	 "                      (default '%s').\n"
 	 "  --send-app-died     Send application died signal.\n"
 	 "  --quiet             Do not print anything.\n"
 	 "  --version           Print program version.\n"
@@ -681,7 +683,7 @@
 int
 main(int argc, char *argv[])
 {
-  booster_t booster = { .name = BOOSTER_DEFAULT };
+  booster_t *boosters = NULL;
   kindergarten_t *childs;
   const int initial_child_slots = 64;
   int i;
@@ -706,7 +708,7 @@
     else if (strcmp(argv[i], "--booster") == 0)
     {
       if (argv[++i])
-	booster.name = argv[i];
+	boosters_alloc(&boosters, argv[i]);
     }
     else if (strcmp(argv[i], "--send-app-died") == 0)
       send_app_died = true;
@@ -718,13 +720,14 @@
       usage(-1);
   }
 
+  if (!boosters)
+    boosters_alloc(&boosters, BOOSTER_DEFAULT);
+
   /*
    * Daemon initialization.
    */
-  booster_module_load(&booster);
+  boosters_load(boosters, &argc, &argv);
 
-  booster.state = booster.api->booster_preinit(&argc, &argv);
-
   sigs_init();
   env_init();
 
@@ -766,7 +769,7 @@
 
     if (sighup_catched)
     {
-      booster.api->booster_reload(booster.state);
+      boosters_reload(boosters);
       sighup_catched = false;
     }
 
@@ -819,7 +822,7 @@
         info("invoking '%s'\n", prog.filename);
         set_progname(prog.argv[0], argc, argv);
 
-	booster.api->booster_init(prog.argv[0], booster.state);
+	boosters_init(boosters, prog.argv[0]);
 
 	launch_process(&prog);
       }


More information about the maemo-commits mailing list