int dir_list::add_dir()

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;
}