GRASS 8 Programmer's Manual 8.6.0dev(2026)-f6f2c534ea
Loading...
Searching...
No Matches
legal_dbname.c
Go to the documentation of this file.
1/*!
2 \file lib/db/dbmi_base/legal_dbname.c
3
4 \brief DBMI Library (base) - validate DB names
5
6 \todo Are we as restrictive here as for vector names?
7
8 (C) 1999-2009, 2011 by the GRASS Development Team
9
10 This program is free software under the GNU General Public License
11 (>=v2). Read the file COPYING that comes with GRASS for details.
12
13 \author Joel Jones (CERL/UIUC), Radim Blazek
14 \author Doxygenized by Martin Landa <landa.martin gmail.com> (2011)
15 */
16
17#include <grass/gis.h>
18#include <grass/dbmi.h>
19#include <grass/glocale.h>
20
21/*!
22 \brief Check if output is legal table name
23
24 Rule: [A-Za-z][A-Za-z0-9_@]*
25 \param s table name to be checked
26
27 \return 1 OK
28 \return -1 if name does not start with letter A..Za..z or if name does
29 not continue with A..Za..z0..9_@
30 */
31int db_legal_tablename(const char *s)
32{
33 char buf[GNAME_MAX];
34
35 snprintf(buf, sizeof(buf), "%s", s);
36
37 if (*s == '.' || *s == 0) {
39 _("Illegal table map name <%s>. May not contain '.' or 'NULL'."),
40 buf);
41 return DB_FAILED;
42 }
43
44 /* file name must start with letter */
45 if (!((*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z'))) {
46 G_warning(_("Illegal table map name <%s>. Must start with a letter."),
47 buf);
48 return DB_FAILED;
49 }
50
51 for (s++; *s; s++)
52 if (!((*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z') ||
53 (*s >= '0' && *s <= '9') || *s == '_' || *s == '@')) {
55 _("Illegal table map name <%s>. Character <%c> not allowed."),
56 buf, *s);
57 return DB_FAILED;
58 }
59
60 return DB_OK;
61}
Main header of GRASS DataBase Management Interface.
#define DB_FAILED
Definition dbmi.h:72
#define DB_OK
Definition dbmi.h:71
void G_warning(const char *,...) __attribute__((format(printf
#define GNAME_MAX
Definition gis.h:196
#define _(str)
Definition glocale.h:10
int db_legal_tablename(const char *s)
Check if output is legal table name.