diff options
| author | Miika Pekkarinen <miipekk@ihme.org> | 2005-11-18 19:28:22 +0000 |
|---|---|---|
| committer | Miika Pekkarinen <miipekk@ihme.org> | 2005-11-18 19:28:22 +0000 |
| commit | 10f2f89d0fd491df9294867eb5689c65d002ce15 (patch) | |
| tree | 3c57f90786db48d860ab47b42dd20ea9a1677ccd | |
| parent | 32a43e2ee688bf8b3c930685400a52910c512a1e (diff) | |
| download | rockbox-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.c | 18 |
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) |