File: construct_pattern.c

package info (click to toggle)
grass 8.4.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 277,040 kB
  • sloc: ansic: 460,798; python: 227,732; cpp: 42,026; sh: 11,262; makefile: 7,007; xml: 3,637; sql: 968; lex: 520; javascript: 484; yacc: 450; asm: 387; perl: 157; sed: 25; objc: 6; ruby: 4
file content (62 lines) | stat: -rw-r--r-- 1,565 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <ctype.h>
#include <string.h>
#include <grass/gis.h>
#include <grass/glocale.h>

char *construct_pattern(char **names)
{
    char *pattern, *p;
    int i, j, len, found_illegal_names;
    const char *mapset;
    char xname[GNAME_MAX], xmapset[GMAPSET_MAX];

    len = 0;
    for (i = 0; names[i]; i++) {
        if ((p = strchr(names[i], '@')))
            len += p - names[i];
        else
            len += strlen(names[i]);

        /* make room for escaping special characters */
        for (j = 0; names[i][j]; j++)
            len += !isalnum(names[i][j]);
    }
    len += i; /* # names - 1 commas + \0 */

    pattern = p = (char *)G_malloc(len);

    mapset = G_mapset();
    found_illegal_names = 0;

    for (i = 0; names[i]; i++) {
        char *name;

        name = names[i];
        if (G_name_is_fully_qualified(name, xname, xmapset)) {
            if (strcmp(xmapset, mapset) != 0)
                G_fatal_error(_("%s: Cannot remove or exclude files not in "
                                "the current mapset."),
                              name);
            name = xname;
        }

        if (G_legal_filename(name) == -1)
            found_illegal_names = 1;

        if (i)
            *p++ = ',';

        for (j = 0; name[j]; j++) {
            if (!isalnum(name[j]))
                *p++ = '\\';
            *p++ = name[j];
        }
    }
    *p = '\0';

    if (found_illegal_names)
        G_fatal_error(_("Illegal filenames not allowed in the name or ignore "
                        "option."));

    return pattern;
}