diff options
author | Alexey Yakovenko <wakeroid@gmail.com> | 2010-05-28 21:21:39 +0200 |
---|---|---|
committer | Alexey Yakovenko <wakeroid@gmail.com> | 2010-05-28 21:21:39 +0200 |
commit | 57b6b29f7c7d5f984d259e3f5c4222425fa8693e (patch) | |
tree | ade2a8db950012da9ab6aabbf2bc54fdfc59f3d6 /playlist.c | |
parent | 4573f1bbb69d1991464e8d351df3f9958e4b09f1 (diff) |
check playlist file existance before moving
Diffstat (limited to 'playlist.c')
-rw-r--r-- | playlist.c | 51 |
1 files changed, 33 insertions, 18 deletions
@@ -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)); + } } } |