static int statoverride_list(const char *const *argv) { struct fileiterator *iter; struct filenamenode *file; const char *thisarg; struct glob_node *glob_list = NULL; int ret = 1; while ((thisarg = *argv++)) { char *pattern = path_cleanup(thisarg); glob_list_prepend(&glob_list, pattern); } if (glob_list == NULL) glob_list_prepend(&glob_list, m_strdup("*")); iter = files_db_iter_new(); while ((file = files_db_iter_next(iter))) { struct glob_node *g; for (g = glob_list; g; g = g->next) { if (fnmatch(g->pattern, file->name, 0) == 0) { statdb_node_print(stdout, file); ret = 0; break; } } } files_db_iter_free(iter); glob_list_free(glob_list); return ret; }
static int diversion_list(const char *const *argv) { struct fsys_hash_iter *iter; struct fsys_namenode *namenode; struct glob_node *glob_list = NULL; const char *pattern; while ((pattern = *argv++)) glob_list_prepend(&glob_list, m_strdup(pattern)); if (glob_list == NULL) glob_list_prepend(&glob_list, m_strdup("*")); iter = fsys_hash_iter_new(); while ((namenode = fsys_hash_iter_next(iter))) { struct glob_node *g; struct fsys_diversion *contest = namenode->divert; struct fsys_diversion *altname; const char *pkgname; if (contest == NULL || contest->useinstead == NULL) continue; altname = contest->useinstead->divert; pkgname = diversion_pkg_name(contest); for (g = glob_list; g; g = g->next) { if (fnmatch(g->pattern, pkgname, 0) == 0 || fnmatch(g->pattern, contest->useinstead->name, 0) == 0 || fnmatch(g->pattern, altname->camefrom->name, 0) == 0) { printf("%s\n", diversion_describe(contest)); break; } } } fsys_hash_iter_free(iter); glob_list_free(glob_list); return 0; }