瀏覽代碼

i.group: Allow listing group and subgroup contents also for groups from other mapsets.

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@73633 15284696-431f-4ddb-bdfa-cd5b030d7da7
Maris Nartiss 6 年之前
父節點
當前提交
4a067b470b
共有 1 個文件被更改,包括 14 次插入23 次删除
  1. 14 23
      imagery/i.group/main.c

+ 14 - 23
imagery/i.group/main.c

@@ -35,11 +35,12 @@ static int remove_group_files(char group[INAME_LEN], char **rasters, int k);
 static int remove_subgroup_files(char group[INAME_LEN],
 				 char subgroup[INAME_LEN], char **rasters,
 				 int k);
-static void print_subgroups(char *group, int simple);
+static void print_subgroups(const char *group, const char *mapset, int simple);
 
 int main(int argc, char *argv[])
 {
-    char group[GNAME_MAX], mapset[GMAPSET_MAX];
+    char group[GNAME_MAX];
+    const char *mapset = NULL;
     char **rasters = NULL;
     int m, k = 0;
 
@@ -147,18 +148,11 @@ int main(int argc, char *argv[])
     if (k < 1 && !(l->answer || s->answer))	/* remove if input is requirement */
 	G_fatal_error(_("No input raster map(s) specified"));
 
-    /* check if current mapset:  (imagery libs are very lacking in this dept)
-       - abort if not,
-       - remove @mapset part if it is
+    /* Get groups mapset. Remove @mapset if group contains
      */
-    if (G_name_is_fully_qualified(grp->answer, group, mapset)) {
-	if (strcmp(mapset, G_mapset()))
-	    G_fatal_error(_("Group must exist in the current mapset"));
-    }
-    else {
-	strcpy(group, grp->answer);	/* FIXME for buffer overflow (have the parser check that?) */
-    }
-
+    strcpy(group, grp->answer);
+    mapset = G_find_file("group", group, mapset);
+    
     if (r->answer) {
 	/* Remove files from Group */
 
@@ -181,17 +175,14 @@ int main(int argc, char *argv[])
     else {
 	if (l->answer || s->answer) {
 	    /* List raster maps in group */
+        if (!I_find_group2(group, mapset))
+            G_fatal_error(_("Group <%s> not found"), group);
 
 	    struct Ref ref;
 
-	    if (I_find_group(group) == 0) {
-		G_fatal_error(_
-			      ("Specified group does not exist in current mapset"));
-	    }
-
 	    if (sgrp->answer) {
 		/* list subgroup files */
-		I_get_subgroup_ref(group, sgrp->answer, &ref);
+		I_get_subgroup_ref2(group, sgrp->answer, mapset, &ref);
 		if (simple_flag->answer) {
 		    G_message(_
 			      ("Subgroup <%s> of group <%s> references the following raster maps:"),
@@ -202,11 +193,11 @@ int main(int argc, char *argv[])
 		    I_list_subgroup(group, sgrp->answer, &ref, stdout);
 	    }
 	    else if (s->answer) {
-		print_subgroups(group, simple_flag->answer);
+		print_subgroups(group, mapset, simple_flag->answer);
 	    }
 	    else {
 		/* list group files */
-		I_get_group_ref(group, &ref);
+		I_get_group_ref2(group, mapset, &ref);
 		if (simple_flag->answer) {
 		    G_message(_
 			      ("Group <%s> references the following raster maps:"),
@@ -445,14 +436,14 @@ static int remove_subgroup_files(char group[INAME_LEN],
     return 0;
 }
 
-static void print_subgroups(char *group, int simple)
+static void print_subgroups(const char *group, const char *mapset, int simple)
 {
     int subgs_num, i;
     int len, tot_len;
     int max;
     char **subgs;
 
-    subgs = I_list_subgroups(group, &subgs_num);
+    subgs = I_list_subgroups2(group, mapset, &subgs_num);
     if (simple)
 	for (i = 0; i < subgs_num; i++)
 	    fprintf(stdout, "%s\n", subgs[i]);