/* get list of running monitors */ void list_mon(char ***list, int *n) { int i; const char *name; const char *env_prefix = "MONITOR_"; int env_prefix_len; char **tokens; env_prefix_len = strlen(env_prefix); *list = NULL; *n = 0; tokens = NULL; for (i = 0; (name = G_get_env_name(i)); i++) { if (strncmp(env_prefix, name, env_prefix_len) == 0) { tokens = G_tokenize(name, "_"); if (G_number_of_tokens(tokens) != 3 || strcmp(tokens[2], "ENVFILE") != 0) continue; *list = G_realloc(*list, (*n + 1) * sizeof(char *)); /* GRASS variable names are upper case, but monitor names are lower * case. */ (*list)[*n] = G_store_lower(tokens[1]); (*n)++; G_free_tokens(tokens); tokens = NULL; } } }
void clean_env(const char *name) { int i; char *u_name; const char *env_prefix = "MONITOR_"; const char *env; int env_prefix_len; char **tokens; u_name = G_store_upper(name); env_prefix_len = strlen(env_prefix); tokens = NULL; for (i = 0; (env = G_get_env_name(i)); i++) { if (strncmp(env_prefix, env, env_prefix_len) != 0) continue; tokens = G_tokenize(env, "_"); if (G_number_of_tokens(tokens) != 3 || strcmp(tokens[1], u_name) != 0) continue; G_unsetenv(env); i--; /* env has been removed for the list */ G_free_tokens(tokens); tokens = NULL; } G_unsetenv("MONITOR"); }