mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
[readdir] introduce ->iterate(), ctx->pos, dir_emit()
New method - ->iterate(file, ctx). That's the replacement for ->readdir(); it takes callback from ctx->actor, uses ctx->pos instead of file->f_pos and calls dir_emit(ctx, ...) instead of filldir(data, ...). It does *not* update file->f_pos (or look at it, for that matter); iterate_dir() does the update. Note that dir_emit() takes the offset from ctx->pos (and eventually filldir_t will lose that argument). Signed-off-by: Al Viro <[email protected]>
This commit is contained in:
parent
5c0ba4e076
commit
bb6f619b3a
7 changed files with 47 additions and 18 deletions
|
|
@ -975,7 +975,7 @@ asmlinkage long compat_sys_getdents(unsigned int fd,
|
|||
error = buf.error;
|
||||
lastdirent = buf.previous;
|
||||
if (lastdirent) {
|
||||
if (put_user(f.file->f_pos, &lastdirent->d_off))
|
||||
if (put_user(buf.ctx.pos, &lastdirent->d_off))
|
||||
error = -EFAULT;
|
||||
else
|
||||
error = count - buf.count;
|
||||
|
|
@ -1062,7 +1062,7 @@ asmlinkage long compat_sys_getdents64(unsigned int fd,
|
|||
error = buf.error;
|
||||
lastdirent = buf.previous;
|
||||
if (lastdirent) {
|
||||
typeof(lastdirent->d_off) d_off = f.file->f_pos;
|
||||
typeof(lastdirent->d_off) d_off = buf.ctx.pos;
|
||||
if (__put_user_unaligned(d_off, &lastdirent->d_off))
|
||||
error = -EFAULT;
|
||||
else
|
||||
|
|
|
|||
Loading…
Reference in a new issue