From 858e43dea92474f0e48975b0cae9d9d84809f4b3 Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Fri, 29 Jun 2007 11:15:36 +0000 Subject: Add the native factory by bertf --- diff --git a/.gitignore b/.gitignore index 22b0384..6217e61 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ Makefile.in *.deps *.libs *.la +*.o *.lo *.loT .*.sw? diff --git a/bin/.gitignore b/bin/.gitignore new file mode 100644 index 0000000..10c2d34 --- /dev/null +++ b/bin/.gitignore @@ -0,0 +1 @@ +sugar-native-factory diff --git a/bin/Makefile.am b/bin/Makefile.am index ffbc7bb..ecc0e0d 100644 --- a/bin/Makefile.am +++ b/bin/Makefile.am @@ -1,6 +1,12 @@ sugardir = $(pkgdatadir)/bin sugar_SCRIPTS = sugar-activity-factory +bin_PROGRAMS = sugar-native-factory + +sugar_native_factory_SOURCE = sugar-native-factory.c +sugar_native_factory_CFLAGS = $(NATIVE_FACTORY_CFLAGS) +sugar_native_factory_LDADD = $(NATIVE_FACTORY_LIBS) + bin_SCRIPTS = \ sugar \ sugar-activity \ diff --git a/bin/sugar-native-factory.c b/bin/sugar-native-factory.c new file mode 100644 index 0000000..a04cd94 --- /dev/null +++ b/bin/sugar-native-factory.c @@ -0,0 +1,307 @@ +/* +Copyright (c) 2007 Bert Freudenberg + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + + + +#include +#include +#include +#include +#include +#include +#include + +char* prog; + +/* command and arguments for activity instance*/ +static char* inst_argv[100]; +static int inst_argc = 0; + +/* instance process ids */ +static pid_t pidv[100]; +static int pidc = 0; + +/* instance process id that exited before it was added */ +static pid_t exited = 0; + + + +/* add and remove instances, quit when last instance exits*/ + +static void +quit() +{ + fprintf(stderr, "%s: quitting\n", prog); + exit(0); +} + + +static void +add_pid(pid_t pid) +{ + if (pid == exited) + { + fprintf(stderr, "%s: ign instance pid %i\n", prog, pid); + exited = 0; + if (pidc == 0) + quit(); + return; + } + pidv[pidc++] = pid; + fprintf(stderr, "%s: add instance pid %i\n", prog, pid); +} + + +static void +remove_pid(pid_t pid) +{ + int i; + for (i=0; i