aboutsummaryrefslogtreecommitdiffstats
path: root/tools/killev.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/killev.c')
-rw-r--r--tools/killev.c213
1 files changed, 0 insertions, 213 deletions
diff --git a/tools/killev.c b/tools/killev.c
deleted file mode 100644
index f272602ac2..0000000000
--- a/tools/killev.c
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) version 3.
- *
- * 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with the program; if not, see <http://www.gnu.org/licenses/>
- *
- *
- * Authors:
- *
- * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/wait.h>
-
-#include <bonobo/bonobo-exception.h>
-#include <bonobo-activation/bonobo-activation.h>
-#include <glib/gi18n.h>
-#include <libgnome/gnome-util.h>
-
-typedef struct {
- gchar *location;
- GPtrArray *names;
-} KillevComponent;
-
-static GSList *languages = NULL;
-static GHashTable *components;
-
-static gboolean
-kill_process (const gchar *proc_name, KillevComponent *comp)
-{
- gint status, i;
- gchar *command;
- GString *desc;
-
- command = g_strdup_printf (KILL_PROCESS_CMD " -0 %s 2> /dev/null",
- proc_name);
- status = system (command);
- g_free (command);
-
- if (status == -1 || !WIFEXITED (status)) {
- /* This most likely means that KILL_PROCESS_CMD wasn't
- * found, so just bail completely.
- */
- fprintf (stderr, _("Could not execute '%s': %s\n"),
- KILL_PROCESS_CMD, g_strerror (errno));
- exit (1);
- }
-
- if (WEXITSTATUS (status) != 0)
- return FALSE;
-
- desc = g_string_new (NULL);
- for (i = 0; i < comp->names->len; i++) {
- if (i > 0)
- g_string_append (desc, " / ");
- g_string_append (desc, comp->names->pdata[i]);
- }
-
- printf (_("Shutting down %s (%s)\n"), proc_name, desc->str);
- g_string_free (desc, TRUE);
- command = g_strdup_printf (KILL_PROCESS_CMD " -9 %s 2> /dev/null",
- proc_name);
- system (command);
- g_free (command);
- return TRUE;
-}
-
-static const gchar *patterns[] = {
- "%s", "%.16s", "lt-%s", "lt-%.13s", "%s.bin"
-};
-static const gint n_patterns = G_N_ELEMENTS (patterns);
-
-static void
-kill_component (KillevComponent *comp)
-{
- gchar *base_name, *exe_name, *dash;
- gint i;
-
- base_name = g_strdup (comp->location);
- try_again:
- for (i = 0; i < n_patterns; i++) {
- exe_name = g_strdup_printf (patterns[i], base_name);
- if (kill_process (exe_name, comp)) {
- g_free (exe_name);
- g_free (base_name);
- return;
- }
- g_free (exe_name);
- }
-
- dash = strrchr (base_name, '-');
- if (dash && !strcmp (dash + 1, BASE_VERSION)) {
- *dash = '\0';
- goto try_again;
- }
-
- g_free (base_name);
-}
-
-static void
-add_matching_query (const gchar *query)
-{
- Bonobo_ServerInfoList *info_list;
- Bonobo_ServerInfo *info;
- CORBA_Environment ev;
- const gchar *location, *name;
- KillevComponent *comp;
- gint i;
-
- CORBA_exception_init (&ev);
-
- info_list = bonobo_activation_query (query, NULL, &ev);
- if (ev._major != CORBA_NO_EXCEPTION) {
- printf ("Bonobo activation failure: %s\n",
- bonobo_exception_get_text (&ev));
- CORBA_exception_free (&ev);
- return;
- }
-
- for (i = 0; i < info_list->_length; i++) {
- info = &info_list->_buffer[i];
-
- if (strcmp (info->server_type, "exe") != 0)
- continue;
-
- location = info->location_info;
- if (strchr (location, '/'))
- location = strrchr (location, '/') + 1;
-
- comp = g_hash_table_lookup (components, location);
- if (!comp) {
- comp = g_new (KillevComponent, 1);
- comp->location = g_strdup (location);
- comp->names = g_ptr_array_new ();
- g_hash_table_insert (components, comp->location, comp);
- }
-
- name = bonobo_server_info_prop_lookup (info, "name", languages);
- if (name)
- g_ptr_array_add (comp->names, g_strdup (name));
- }
-
- CORBA_free (info_list);
- CORBA_exception_free (&ev);
-}
-
-static void
-add_matching_repo_id (const gchar *repo_id)
-{
- gchar *query;
-
- query = g_strdup_printf ("repo_ids.has ('%s')", repo_id);
- add_matching_query (query);
- g_free (query);
-}
-
-static void
-add_matching_iid (const gchar *iid)
-{
- gchar *query;
-
- query = g_strdup_printf ("iid == '%s'", iid);
- add_matching_query (query);
- g_free (query);
-}
-
-gint
-main (gint argc, gchar **argv)
-{
- const gchar * const *language_names;
-
- bindtextdomain (GETTEXT_PACKAGE, EVOLUTION_LOCALEDIR);
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- textdomain (GETTEXT_PACKAGE);
-
- gnome_program_init (PACKAGE, VERSION, LIBGNOME_MODULE, argc, argv,
- GNOME_PROGRAM_STANDARD_PROPERTIES,
- NULL);
-
- language_names = g_get_language_names ();
- while (*language_names != NULL)
- languages = g_slist_append (
- languages, (gpointer) *language_names++);
-
- components = g_hash_table_new_full (
- g_str_hash, g_str_equal,
- (GDestroyNotify) NULL,
- (GDestroyNotify) kill_component);
-
- add_matching_iid ("OAFIID:GNOME_Evolution_Calendar_AlarmNotify_Factory:" BASE_VERSION);
- g_hash_table_remove_all (components);
-
- g_hash_table_destroy (components);
-
- return 0;
-}