aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--Makefile.am1
-rw-r--r--src/update_io.c116
-rw-r--r--src/update_io.h51
-rw-r--r--src/update_walk.c101
4 files changed, 169 insertions, 100 deletions
diff --git a/Makefile.am b/Makefile.am
index 977a9c22d..21df3e554 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -265,6 +265,7 @@ src_mpd_SOURCES = \
src/filter_registry.c \
src/update.c \
src/update_queue.c \
+ src/update_io.c src/update_io.h \
src/update_walk.c \
src/update_remove.c \
src/client.c \
diff --git a/src/update_io.c b/src/update_io.c
new file mode 100644
index 000000000..887ebe2e5
--- /dev/null
+++ b/src/update_io.c
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2003-2012 The Music Player Daemon Project
+ * http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "config.h" /* must be first for large file support */
+#include "update_io.h"
+#include "mapper.h"
+#include "directory.h"
+
+#include <glib.h>
+
+#include <errno.h>
+#include <unistd.h>
+
+int
+stat_directory(const struct directory *directory, struct stat *st)
+{
+ char *path_fs = map_directory_fs(directory);
+ if (path_fs == NULL)
+ return -1;
+
+ int ret = stat(path_fs, st);
+ if (ret < 0)
+ g_warning("Failed to stat %s: %s", path_fs, g_strerror(errno));
+
+ g_free(path_fs);
+ return ret;
+}
+
+int
+stat_directory_child(const struct directory *parent, const char *name,
+ struct stat *st)
+{
+ char *path_fs = map_directory_child_fs(parent, name);
+ if (path_fs == NULL)
+ return -1;
+
+ int ret = stat(path_fs, st);
+ if (ret < 0)
+ g_warning("Failed to stat %s: %s", path_fs, g_strerror(errno));
+
+ g_free(path_fs);
+ return ret;
+}
+
+bool
+directory_exists(const struct directory *directory)
+{
+ char *path_fs = map_directory_fs(directory);
+ if (path_fs == NULL)
+ /* invalid path: cannot exist */
+ return false;
+
+ GFileTest test = directory->device == DEVICE_INARCHIVE ||
+ directory->device == DEVICE_CONTAINER
+ ? G_FILE_TEST_IS_REGULAR
+ : G_FILE_TEST_IS_DIR;
+
+ bool exists = g_file_test(path_fs, test);
+ g_free(path_fs);
+
+ return exists;
+}
+
+bool
+directory_child_is_regular(const struct directory *directory,
+ const char *name_utf8)
+{
+ char *path_fs = map_directory_child_fs(directory, name_utf8);
+ if (path_fs == NULL)
+ return false;
+
+ struct stat st;
+ bool is_regular = stat(path_fs, &st) == 0 && S_ISREG(st.st_mode);
+ g_free(path_fs);
+
+ return is_regular;
+}
+
+bool
+directory_child_access(const struct directory *directory,
+ const char *name, int mode)
+{
+#ifdef WIN32
+ /* access() is useless on WIN32 */
+ (void)directory;
+ (void)name;
+ (void)mode;
+ return true;
+#else
+ char *path = map_directory_child_fs(directory, name);
+ if (path == NULL)
+ /* something went wrong, but that isn't a permission
+ problem */
+ return true;
+
+ bool success = access(path, mode) == 0 || errno != EACCES;
+ g_free(path);
+ return success;
+#endif
+}
diff --git a/src/update_io.h b/src/update_io.h
new file mode 100644
index 000000000..6ff1ccebd
--- /dev/null
+++ b/src/update_io.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2003-2012 The Music Player Daemon Project
+ * http://www.musicpd.org
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef MPD_UPDATE_IO_H
+#define MPD_UPDATE_IO_H
+
+#include "check.h"
+
+#include <stdbool.h>
+#include <sys/stat.h>
+
+struct directory;
+
+int
+stat_directory(const struct directory *directory, struct stat *st);
+
+int
+stat_directory_child(const struct directory *parent, const char *name,
+ struct stat *st);
+
+bool
+directory_exists(const struct directory *directory);
+
+bool
+directory_child_is_regular(const struct directory *directory,
+ const char *name_utf8);
+
+/**
+ * Checks if the given permissions on the mapped file are given.
+ */
+bool
+directory_child_access(const struct directory *directory,
+ const char *name, int mode);
+
+#endif
diff --git a/src/update_walk.c b/src/update_walk.c
index 18846250a..cc0749e6d 100644
--- a/src/update_walk.c
+++ b/src/update_walk.c
@@ -19,6 +19,7 @@
#include "config.h" /* must be first for large file support */
#include "update_internal.h"
+#include "update_io.h"
#include "database.h"
#include "db_lock.h"
#include "exclude.h"
@@ -208,44 +209,6 @@ remove_excluded_from_directory(struct directory *directory,
db_unlock();
}
-static bool
-directory_exists(const struct directory *directory)
-{
- char *path_fs;
- GFileTest test;
- bool exists;
-
- path_fs = map_directory_fs(directory);
- if (path_fs == NULL)
- /* invalid path: cannot exist */
- return false;
-
- test = directory->device == DEVICE_INARCHIVE ||
- directory->device == DEVICE_CONTAINER
- ? G_FILE_TEST_IS_REGULAR
- : G_FILE_TEST_IS_DIR;
-
- exists = g_file_test(path_fs, test);
- g_free(path_fs);
-
- return exists;
-}
-
-static bool
-directory_child_is_regular(const struct directory *directory,
- const char *name_utf8)
-{
- char *path_fs = map_directory_child_fs(directory, name_utf8);
- if (path_fs == NULL)
- return false;
-
- struct stat st;
- bool is_regular = stat(path_fs, &st) == 0 && S_ISREG(st.st_mode);
- g_free(path_fs);
-
- return is_regular;
-}
-
static void
removeDeletedFromDirectory(struct directory *directory)
{
@@ -288,42 +251,6 @@ removeDeletedFromDirectory(struct directory *directory)
}
}
-static int
-stat_directory(const struct directory *directory, struct stat *st)
-{
- char *path_fs;
- int ret;
-
- path_fs = map_directory_fs(directory);
- if (path_fs == NULL)
- return -1;
- ret = stat(path_fs, st);
- if (ret < 0)
- g_warning("Failed to stat %s: %s", path_fs, g_strerror(errno));
-
- g_free(path_fs);
- return ret;
-}
-
-static int
-stat_directory_child(const struct directory *parent, const char *name,
- struct stat *st)
-{
- char *path_fs;
- int ret;
-
- path_fs = map_directory_child_fs(parent, name);
- if (path_fs == NULL)
- return -1;
-
- ret = stat(path_fs, st);
- if (ret < 0)
- g_warning("Failed to stat %s: %s", path_fs, g_strerror(errno));
-
- g_free(path_fs);
- return ret;
-}
-
#ifndef G_OS_WIN32
static int
statDirectory(struct directory *dir)
@@ -540,32 +467,6 @@ update_container_file( struct directory* directory,
return true;
}
-/**
- * Checks if the given permissions on the mapped file are given.
- */
-static bool
-directory_child_access(const struct directory *directory,
- const char *name, int mode)
-{
-#ifdef WIN32
- /* access() is useless on WIN32 */
- (void)directory;
- (void)name;
- (void)mode;
- return true;
-#else
- char *path = map_directory_child_fs(directory, name);
- if (path == NULL)
- /* something went wrong, but that isn't a permission
- problem */
- return true;
-
- bool success = access(path, mode) == 0 || errno != EACCES;
- g_free(path);
- return success;
-#endif
-}
-
static void
update_song_file(struct directory *directory,
const char *name, const struct stat *st,