From 10f2f89d0fd491df9294867eb5689c65d002ce15 Mon Sep 17 00:00:00 2001 From: Miika Pekkarinen Date: Fri, 18 Nov 2005 19:28:22 +0000 Subject: 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 --- firmware/common/dircache.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/firmware/common/dircache.c b/firmware/common/dircache.c index 259c34cdf5..0d93a42a61 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) -- cgit v1.2.3