in src/dir_list.h [104:141]
int dir_list::add_dir(const char *name, bool &is_new, int &d) {
if (!name || !*name)
return 1;
dir_type dir(name);
const char *end = name;
for (; *end; ++end) {
if (*end >= 'a' && *end <= 'z')
continue;
if (*end >= 'A' && *end <= 'Z')
continue;
if (*end >= '0' && *end <= '9')
continue;
switch (*end) {
default:
return 1;
case '_':
case '-':
case '+':
case '.':
continue;
}
}
bool found = false;
d = lookup_dir(name, found);
is_new = !found;
if (is_new) {
if (size_t(d) != list.size()) {
repeated_dirs.insert(d);
tracked_dirs.insert(d);
active_dirs.insert(d);
}
list.insert(list.begin() + d, dir);
}
if (name[0] == '-' && name[1] == 0)
list[d].is_root = true;
return 0;
}