configure.ac: Move OggVorbis Encoder to Encoder Plugins.
[mpd-mk.git] / src / exclude.c
blobdd46b58c71b5799135a4c285c3f564a48185c20d
1 /*
2 * Copyright (C) 2003-2010 The Music Player Daemon Project
3 * http://www.musicpd.org
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 * The .mpdignore backend code.
25 #include "config.h"
26 #include "exclude.h"
27 #include "path.h"
29 #include <assert.h>
30 #include <string.h>
31 #include <stdio.h>
32 #include <errno.h>
34 GSList *
35 exclude_list_load(const char *path_fs)
37 FILE *file;
38 char line[1024];
39 GSList *list = NULL;
41 assert(path_fs != NULL);
43 file = fopen(path_fs, "r");
44 if (file == NULL) {
45 if (errno != ENOENT) {
46 char *path_utf8 = fs_charset_to_utf8(path_fs);
47 g_debug("Failed to open %s: %s",
48 path_utf8, g_strerror(errno));
49 g_free(path_utf8);
52 return NULL;
55 while (fgets(line, sizeof(line), file) != NULL) {
56 char *p = strchr(line, '#');
57 if (p != NULL)
58 *p = 0;
60 p = g_strstrip(line);
61 if (*p != 0)
62 list = g_slist_prepend(list, g_pattern_spec_new(p));
65 fclose(file);
67 return list;
70 void
71 exclude_list_free(GSList *list)
73 while (list != NULL) {
74 GPatternSpec *pattern = list->data;
75 g_pattern_spec_free(pattern);
76 list = g_slist_remove(list, list->data);
80 bool
81 exclude_list_check(GSList *list, const char *name_fs)
83 assert(name_fs != NULL);
85 /* XXX include full path name in check */
87 for (; list != NULL; list = list->next) {
88 GPatternSpec *pattern = list->data;
90 if (g_pattern_match_string(pattern, name_fs))
91 return true;
94 return false;