GRASS GIS 7 Programmer's Manual  7.5.svn(2018)-r72735
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
find_etc.c
Go to the documentation of this file.
1 #include <stdlib.h>
2 #include <string.h>
3 #include <unistd.h>
4 #include <grass/gis.h>
5 
6 static char *G__find_etc(const char *name)
7 {
8  char path[GPATH_MAX];
9  const char *pathlist = getenv("GRASS_ADDON_ETC");
10 
11  /*
12  * reject illegal names
13  */
14  if (*name == 0 || *name == '.')
15  return NULL;
16 
17  /*
18  * search paths
19  */
20  if (pathlist) {
21  char **dirs = G_tokenize(pathlist, ":");
22  char *result = NULL;
23  int i;
24 
25  for (i = 0; dirs[i]; i++) {
26  sprintf(path, "%s/%s", dirs[i], name);
27 
28  if (access(path, 0) == 0) {
29  result = G_store(path);
30  break;
31  }
32  }
33 
34  G_free_tokens(dirs);
35 
36  if (result)
37  return result;
38  }
39 
40  /*
41  * check application etc dir
42  */
43  sprintf(path, "%s/etc/%s", G_gisbase(), name);
44  if (access(path, 0) == 0)
45  return G_store(path);
46 
47  return NULL;
48 }
49 
50 
51 /*!
52  * \brief searches for a file from the etc search list in GRASS_ADDON_ETC
53  * returns the full path to where the file was found.
54  *
55  * note:
56  * rejects all names that begin with "."
57  *
58  * \param name file name to look for
59  *
60  * \return pointer to a string with full path to
61  * where file was found, or NULL if not found
62  */
63 char *G_find_etc(const char *name)
64 {
65  return G__find_etc(name);
66 }
char * G_find_etc(const char *name)
searches for a file from the etc search list in GRASS_ADDON_ETC returns the full path to where the fi...
Definition: find_etc.c:63
char ** G_tokenize(const char *buf, const char *delim)
Tokenize string.
Definition: gis/token.c:48
char * G_store(const char *s)
Copy string to allocated memory.
Definition: strings.c:86
#define NULL
Definition: ccmath.h:32
#define GPATH_MAX
Definition: gis.h:151
Definition: path.h:16
void G_free_tokens(char **tokens)
Free memory allocated to tokens.
Definition: gis/token.c:204
const char * name
Definition: named_colr.c:7
char * getenv()
const char * G_gisbase(void)
Get full path name of the top level module directory.
Definition: gisbase.c:41