Browse Source

imagery lib: Use HOST_DIRSEP instead of hardcoded value; New function to find signature files (required for https://trac.osgeo.org/grass/ticket/3000)

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@68433 15284696-431f-4ddb-bdfa-cd5b030d7da7
Maris Nartiss 9 years ago
parent
commit
c324d19dc4
2 changed files with 40 additions and 2 deletions
  1. 1 0
      include/defs/imagery.h
  2. 39 2
      lib/imagery/find.c

+ 1 - 0
include/defs/imagery.h

@@ -21,6 +21,7 @@ int I_find_group(const char *);
 int I_find_group_file(const char *, const char *);
 int I_find_subgroup(const char *, const char *);
 int I_find_subgroup_file(const char *, const char *, const char *);
+int I_find_signature_file(const char *, const char *, const char *, const char *);
 
 /* fopen.c */
 FILE *I_fopen_group_file_new(const char *, const char *);

+ 39 - 2
lib/imagery/find.c

@@ -45,7 +45,8 @@ int I_find_subgroup(const char *group, const char *subgroup)
     if (subgroup == NULL || *subgroup == 0)
         return 0;
 
-    sprintf(element, "subgroup/%s", subgroup);
+    sprintf(element, "subgroup%c%s", HOST_DIRSEP, subgroup);
+    G_debug(5, "I_find_subgroup() element: %s", element);
 
     return G_find_file2_misc("group", element, group, G_mapset()) != NULL;
 }
@@ -62,7 +63,43 @@ int I_find_subgroup_file(const char *group, const char *subgroup,
     if (file == NULL || *file == 0)
         return 0;
 
-    sprintf(element, "subgroup/%s/%s", subgroup, file);
+    sprintf(element, "subgroup%c%s%c%s", HOST_DIRSEP, subgroup, HOST_DIRSEP, file);
+    G_debug(5, "I_find_subgroup_file() element: %s", element);
 
     return G_find_file2_misc("group", element, group, G_mapset()) != NULL;
 }
+
+/*!
+ * \brief does signature file exists?
+ *
+ * Returns 1 if the
+ * specified <b>signature</b> exists in the specified subgroup; 0 otherwise.
+ * 
+ * Should be used to check if signature file exists after G_parser run
+ * when generating new signature file.
+ *
+ *  \param group - group where to search
+ *  \param subgroup - subgroup containing signatures
+ *  \param type - type of signature ("sig" or "sigset")
+ *  \param file - name of signature file
+ *  \return int
+ */
+int I_find_signature_file(const char *group, const char *subgroup,
+                     const char *type, const char *file)
+{
+    char element[GNAME_MAX * 2];
+    
+    if (!I_find_group(group))
+        return 0;
+    if (subgroup == NULL || *subgroup == 0)
+        return 0;
+    if (type == NULL || *type == 0)
+        return 0;
+    if (file == NULL || *file == 0)
+        return 0;
+        
+    sprintf(element, "subgroup%c%s%c%s%c%s", HOST_DIRSEP, subgroup, HOST_DIRSEP, type, HOST_DIRSEP, file);
+    G_debug(5, "I_find_signature_file() element: %s", element);
+    
+    return G_find_file2_misc("group", element, group, G_mapset()) != NULL;
+}