aboutsummaryrefslogtreecommitdiffstats
path: root/src/storedPlaylist.c
diff options
context:
space:
mode:
authorJ. Alexander Treuman <jat@spatialrift.net>2007-05-24 18:07:19 +0000
committerJ. Alexander Treuman <jat@spatialrift.net>2007-05-24 18:07:19 +0000
commit7ba357a04e75c51f898e9418cab24d10c74ab37c (patch)
treea607055f440379beb1ea54dc6eb116a796c39ed9 /src/storedPlaylist.c
parent0d7d2ebf80be04864eff70369d7aa88a5670806a (diff)
downloadmpd-7ba357a04e75c51f898e9418cab24d10c74ab37c.tar.gz
mpd-7ba357a04e75c51f898e9418cab24d10c74ab37c.tar.xz
mpd-7ba357a04e75c51f898e9418cab24d10c74ab37c.zip
Adding rename command, for renaming stored playlists.
git-svn-id: https://svn.musicpd.org/mpd/trunk@6246 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Diffstat (limited to 'src/storedPlaylist.c')
-rw-r--r--src/storedPlaylist.c65
1 files changed, 65 insertions, 0 deletions
diff --git a/src/storedPlaylist.c b/src/storedPlaylist.c
index 8bec60e71..3559d1e2f 100644
--- a/src/storedPlaylist.c
+++ b/src/storedPlaylist.c
@@ -489,3 +489,68 @@ void appendPlaylistToStoredPlaylist(StoredPlaylist *sp, Playlist *playlist)
appendSongToStoredPlaylist(sp, playlist->songs[i]);
}
}
+
+int renameStoredPlaylist(int fd, const char *utf8from, const char *utf8to)
+{
+ struct stat st;
+ char *from;
+ char *to;
+ int ret = 0;
+
+ from = xstrdup(utf8pathToFsPathInStoredPlaylist(utf8from, fd));
+ if (!from)
+ return -1;
+
+ to = xstrdup(utf8pathToFsPathInStoredPlaylist(utf8to, fd));
+ if (!to) {
+ free(from);
+ return -1;
+ }
+
+ if (stat(from, &st) != 0) {
+ if (fd != -1) {
+ commandError(fd, ACK_ERROR_NO_EXIST,
+ "no playlist named \"%s\"", utf8from);
+ }
+
+ ERROR("no playlist named \"%s\"\n", utf8from);
+
+ ret = -1;
+ goto out;
+ }
+
+ if (stat(to, &st) == 0) {
+ if (fd != -1) {
+ commandError(fd, ACK_ERROR_EXIST, "a file or directory "
+ "already exists with the name \"%s\"",
+ utf8to);
+ }
+
+ ERROR("a file or directory already exists with the "
+ "name \"%s\"\n", utf8to);
+
+ ret = -1;
+ goto out;
+ }
+
+ if (rename(from, to) < 0) {
+ if (fd != -1) {
+ commandError(fd, ACK_ERROR_UNKNOWN,
+ "could not rename playlist \"%s\" to "
+ "\"%s\": %s", utf8from, utf8to,
+ strerror(errno));
+ }
+
+ ERROR("could not rename playlist \"%s\" to \"%s\": %s\n",
+ utf8from, utf8to, strerror(errno));
+
+ ret = -1;
+ goto out;
+ }
+
+out:
+ free(from);
+ free(to);
+
+ return ret;
+}