summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiika Pekkarinen <miipekk@ihme.org>2005-11-18 19:28:22 +0000
committerMiika Pekkarinen <miipekk@ihme.org>2005-11-18 19:28:22 +0000
commit10f2f89d0fd491df9294867eb5689c65d002ce15 (patch)
tree3c57f90786db48d860ab47b42dd20ea9a1677ccd
parent32a43e2ee688bf8b3c930685400a52910c512a1e (diff)
downloadrockbox-10f2f89d0fd491df9294867eb5689c65d002ce15.zip
rockbox-10f2f89d0fd491df9294867eb5689c65d002ce15.tar.gz
rockbox-10f2f89d0fd491df9294867eb5689c65d002ce15.tar.bz2
rockbox-10f2f89d0fd491df9294867eb5689c65d002ce15.tar.xz
Fixed an empty directory problem with dircache when renaming files.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@7966 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/common/dircache.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/firmware/common/dircache.c b/firmware/common/dircache.c
index 259c34c..0d93a42 100644
--- a/firmware/common/dircache.c
+++ b/firmware/common/dircache.c
@@ -708,6 +708,7 @@ void dircache_remove(const char *name)
void dircache_rename(const char *oldpath, const char *newpath)
{ /* Test ok. */
struct dircache_entry *entry, *newentry;
+ struct dircache_entry oldentry;
if (!dircache_initialized)
return ;
@@ -724,6 +725,10 @@ void dircache_rename(const char *oldpath, const char *newpath)
/* Delete the old entry. */
entry->name_len = 0;
+ /** If we rename the same filename twice in a row, we need to
+ * save the data, because the entry will be re-used. */
+ oldentry = *entry;
+
newentry = dircache_new_entry(newpath, entry->attribute);
if (newentry == NULL)
{
@@ -731,13 +736,12 @@ void dircache_rename(const char *oldpath, const char *newpath)
return ;
}
- //newentry->down = entry->down;
- //entry->down = 0;
-
- newentry->size = entry->size;
- newentry->startcluster = entry->startcluster;
- newentry->wrttime = entry->wrttime;
- newentry->wrtdate = entry->wrtdate;
+ newentry->down = oldentry.down;
+ newentry->up = oldentry.up;
+ newentry->size = oldentry.size;
+ newentry->startcluster = oldentry.startcluster;
+ newentry->wrttime = oldentry.wrttime;
+ newentry->wrtdate = oldentry.wrtdate;
}
void dircache_add_file(const char *path)