summaryrefslogtreecommitdiffstats
path: root/sdcard
diff options
context:
space:
mode:
authorMike Lockwood <lockwood@android.com>2011-01-25 17:22:47 -0800
committerMike Lockwood <lockwood@android.com>2011-01-25 17:22:47 -0800
commit75e17a8908d52e32f5de85b90b74e156265c60c6 (patch)
tree76e95f73469ae49e5be12f4a929d9abd52008579 /sdcard
parent1147407becd8569ad1ddcf620a10076675ef92da (diff)
downloadsystem_core-75e17a8908d52e32f5de85b90b74e156265c60c6.zip
system_core-75e17a8908d52e32f5de85b90b74e156265c60c6.tar.gz
system_core-75e17a8908d52e32f5de85b90b74e156265c60c6.tar.bz2
sdcard: Fix readdir implementation so rewinddir will work correctly
Fixes problem with "ls -R" in /mnt/sdcard BUG: 3309556 Change-Id: Ie2246585439116de3cb40f4005f3b44a0439f54c Signed-off-by: Mike Lockwood <lockwood@android.com>
Diffstat (limited to 'sdcard')
-rw-r--r--sdcard/sdcard.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/sdcard/sdcard.c b/sdcard/sdcard.c
index 9bb9d4b..0b8f656 100644
--- a/sdcard/sdcard.c
+++ b/sdcard/sdcard.c
@@ -845,13 +845,19 @@ void handle_fuse_request(struct fuse *fuse, struct fuse_in_header *hdr, void *da
struct dirent *de;
struct dirhandle *h = id_to_ptr(req->fh);
TRACE("READDIR %p\n", h);
+ if (req->offset == 0) {
+ /* rewinddir() might have been called above us, so rewind here too */
+ TRACE("calling rewinddir()\n");
+ rewinddir(h->d);
+ }
de = readdir(h->d);
if (!de) {
fuse_status(fuse, hdr->unique, 0);
return;
}
fde->ino = FUSE_UNKNOWN_INO;
- fde->off = 0;
+ /* increment the offset so we can detect when rewinddir() seeks back to the beginning */
+ fde->off = req->offset + 1;
fde->type = de->d_type;
fde->namelen = strlen(de->d_name);
memcpy(fde->name, de->d_name, fde->namelen + 1);