summaryrefslogtreecommitdiff
path: root/playlist.c
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-05-28 21:21:39 +0200
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-05-28 21:21:39 +0200
commit57b6b29f7c7d5f984d259e3f5c4222425fa8693e (patch)
treeade2a8db950012da9ab6aabbf2bc54fdfc59f3d6 /playlist.c
parent4573f1bbb69d1991464e8d351df3f9958e4b09f1 (diff)
check playlist file existance before moving
Diffstat (limited to 'playlist.c')
-rw-r--r--playlist.c51
1 files changed, 33 insertions, 18 deletions
diff --git a/playlist.c b/playlist.c
index fa9c7917..51470a29 100644
--- a/playlist.c
+++ b/playlist.c
@@ -540,12 +540,18 @@ plt_move (int from, int to) {
PLT_UNLOCK;
return;
}
- trace ("move %s->%s\n", path1, temp);
- int err = rename (path1, temp);
- if (err != 0) {
- fprintf (stderr, "playlist rename %s->%s failed: %s\n", path1, temp, strerror (errno));
- PLT_UNLOCK;
- return;
+
+ struct stat st;
+ int err = stat (path1, &st);
+ if (!err) {
+ trace ("move %s->%s\n", path1, temp);
+
+ int err = rename (path1, temp);
+ if (err != 0) {
+ fprintf (stderr, "playlist rename %s->%s failed: %s\n", path1, temp, strerror (errno));
+ PLT_UNLOCK;
+ return;
+ }
}
// remove 'from' from list
@@ -576,10 +582,13 @@ plt_move (int from, int to) {
fprintf (stderr, "error: failed to make path string for playlist file\n");
continue;
}
- trace ("move %s->%s\n", path2, path1);
- int err = rename (path2, path1);
- if (err != 0) {
- fprintf (stderr, "playlist rename %s->%s failed: %s\n", path2, path1, strerror (errno));
+ int err = stat (path2, &st);
+ if (!err) {
+ trace ("move %s->%s\n", path2, path1);
+ int err = rename (path2, path1);
+ if (err != 0) {
+ fprintf (stderr, "playlist rename %s->%s failed: %s\n", path2, path1, strerror (errno));
+ }
}
}
// open new gap
@@ -594,10 +603,13 @@ plt_move (int from, int to) {
fprintf (stderr, "error: failed to make path string for playlist file\n");
continue;
}
- trace ("move %s->%s\n", path1, path2);
- int err = rename (path1, path2);
- if (err != 0) {
- fprintf (stderr, "playlist rename %s->%s failed: %s\n", path1, path2, strerror (errno));
+ int err = stat (path1, &st);
+ if (!err) {
+ trace ("move %s->%s\n", path1, path2);
+ int err = rename (path1, path2);
+ if (err != 0) {
+ fprintf (stderr, "playlist rename %s->%s failed: %s\n", path1, path2, strerror (errno));
+ }
}
}
// move temp file
@@ -605,10 +617,13 @@ plt_move (int from, int to) {
fprintf (stderr, "error: failed to make path string for playlist file\n");
}
else {
- trace ("move %s->%s\n", temp, path1);
- int err = rename (temp, path1);
- if (err != 0) {
- fprintf (stderr, "playlist rename %s->%s failed: %s\n", temp, path1, strerror (errno));
+ int err = stat (path1, &st);
+ if (!err) {
+ trace ("move %s->%s\n", temp, path1);
+ int err = rename (temp, path1);
+ if (err != 0) {
+ fprintf (stderr, "playlist rename %s->%s failed: %s\n", temp, path1, strerror (errno));
+ }
}
}