GRASS GIS 8 Programmer's Manual  8.5.0dev(2024)-602118adcc
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  * \brief searches for a file from the etc search list in GRASS_ADDON_ETC
52  * returns the full path to where the file was found.
53  *
54  * note:
55  * rejects all names that begin with "."
56  *
57  * \param name file name to look for
58  *
59  * \return pointer to a string with full path to
60  * where file was found, or NULL if not found
61  */
62 char *G_find_etc(const char *name)
63 {
64  return G__find_etc(name);
65 }
#define NULL
Definition: ccmath.h:32
void G_free_tokens(char **)
Free memory allocated to tokens.
Definition: gis/token.c:198
const char * G_gisbase(void)
Get full path name of the top level module directory.
Definition: gisbase.c:39
char * G_store(const char *)
Copy string to allocated memory.
Definition: strings.c:87
char ** G_tokenize(const char *, const char *)
Tokenize string.
Definition: gis/token.c:47
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:62
#define GPATH_MAX
Definition: gis.h:194
const char * name
Definition: named_colr.c:6
Definition: path.h:15