1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- #include <stdlib.h>
- #include <signal.h>
- #include <string.h>
- #include <unistd.h>
- #include <dirent.h>
- #include <grass/gis.h>
- #include <grass/glocale.h>
- #include "proto.h"
- static int stop_wx(const char *);
- static int stop(const char *);
- int stop_mon(const char *name)
- {
- if (!check_mon(name)) {
- G_fatal_error(_("Monitor <%s> is not running"), name);
- }
-
- if (strncmp(name, "wx", 2) == 0)
- stop_wx(name);
- return stop(name);
- }
- int stop(const char *name)
- {
- char *mon_path, file_path[GPATH_MAX];
- struct dirent *dp;
- DIR *dirp;
- mon_path = get_path(name, TRUE);
- dirp = opendir(mon_path);
- while ((dp = readdir(dirp)) != NULL) {
- if (!dp->d_name || dp->d_name[0] == '.')
- continue;
- sprintf(file_path, "%s/%s", mon_path, dp->d_name);
- if (unlink(file_path) == -1)
- G_warning(_("Unable to delete file <%s>"), file_path);
- }
- closedir(dirp);
-
- if (rmdir(mon_path) == -1)
- G_warning(_("Unable to delete directory <%s>"), mon_path);
- G_free(mon_path);
- G_unsetenv("MONITOR");
- return 0;
- }
- int stop_wx(const char *name)
- {
- char *mon_path, *pid;
- char pid_file[GPATH_MAX], buf[512];
- FILE *fp;
-
- mon_path = get_path(name, FALSE);
- G_file_name(pid_file, mon_path, "pid", G_mapset());
-
- fp = fopen(pid_file, "r");
- if (!fp) {
- G_warning(_("Unable to open file <%s>"), pid_file);
- return 1;
- }
- pid = NULL;
- if (G_getl2(buf, sizeof(buf) - 1, fp) != 0)
- pid = G_store(buf);
- fclose(fp);
-
- if (!pid) {
- G_warning(_("Unable to read file <%s>"), pid_file);
- return 1;
- }
-
- #ifdef __MINGW32__
- /* TODO */
- #else
- if (kill((pid_t) atoi(pid), SIGTERM) != 0) {
- /* G_fatal_error(_("Unable to stop monitor <%s>"), name); */
- }
- #endif
-
- return 0;
- }
|