GRASS GIS 7 Programmer's Manual  7.0.3(2016)-r00000
legal_name.c
Go to the documentation of this file.
1 
14 #include <stdio.h>
15 #include <string.h>
16 #include <grass/gis.h>
17 #include <grass/glocale.h>
18 
34 int G_legal_filename(const char *s)
35 {
36  const char *name = s;
37 
38  if (*s == '.' || *s == 0) {
39  G_warning(_("Illegal filename <%s>. Cannot start with '.' or be 'NULL'."), name);
40  return -1;
41  }
42 
43  for (; *s; s++)
44  if (*s == '/' || *s == '"' || *s == '\'' || *s <= ' ' ||
45  *s == '@' || *s == ',' || *s == '=' || *s == '*' || *s > 0176) {
46  G_warning(_("Illegal filename <%s>. Character <%c> not allowed.\n"), name, *s);
47  return -1;
48  }
49 
50  return 1;
51 }
52 
68 int G_check_input_output_name(const char *input, const char *output,
69  int error)
70 {
71  const char *mapset;
72 
73  if (output == NULL)
74  return 0; /* don't die on undefined parameters */
75  if (G_legal_filename(output) == -1) {
76  if (error == G_FATAL_EXIT) {
77  G_fatal_error(_("Output raster map name <%s> is not valid map name"),
78  output);
79  }
80  else if (error == G_FATAL_PRINT) {
81  G_warning(_("Output raster map name <%s> is not valid map name"),
82  output);
83  return 1;
84  }
85  else { /* G_FATAL_RETURN */
86  return 1;
87  }
88  }
89 
90  mapset = G_find_raster2(input, "");
91 
92  if (mapset == NULL) {
93  if (error == G_FATAL_EXIT) {
94  G_fatal_error(_("Raster map <%s> not found"), input);
95  }
96  else if (error == G_FATAL_PRINT) {
97  G_warning(_("Raster map <%s> not found"), input);
98  return 1;
99  }
100  else { /* G_FATAL_RETURN */
101  return 1;
102  }
103  }
104 
105  if (strcmp(mapset, G_mapset()) == 0) {
106  char nm[1000], ms[1000];
107  const char *in;
108 
109  if (G_name_is_fully_qualified(input, nm, ms)) {
110  in = nm;
111  }
112  else {
113  in = input;
114  }
115 
116  if (strcmp(in, output) == 0) {
117  if (error == G_FATAL_EXIT) {
118  G_fatal_error(_("Output raster map <%s> is used as input"),
119  output);
120  }
121  else if (error == G_FATAL_PRINT) {
122  G_warning(_("Output raster map <%s> is used as input"),
123  output);
124  return 1;
125  }
126  else { /* G_FATAL_RETURN */
127  return 1;
128  }
129  }
130  }
131 
132  return 0;
133 }
const char * G_mapset(void)
Get current mapset name.
Definition: mapset.c:33
#define NULL
Definition: ccmath.h:32
void G_fatal_error(const char *msg,...)
Print a fatal error message to stderr.
Definition: gis/error.c:159
void output(const char *fmt,...)
const char * G_find_raster2(const char *name, const char *mapset)
Find a raster map (look but don&#39;t touch)
Definition: find_rast.c:76
int G_name_is_fully_qualified(const char *fullname, char *name, char *mapset)
Check if map name is fully qualified (map @ mapset)
Definition: nme_in_mps.c:36
const char * name
Definition: named_colr.c:7
void G_warning(const char *msg,...)
Print a warning message to stderr.
Definition: gis/error.c:203