mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 08:43:55 -06:00
9p: introduce the V9fsDir type
If we are to switch back to readdir(), we need a more complex type than DIR * to be able to serialize concurrent accesses to the directory stream. This patch introduces a placeholder type and fixes all users. Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
This commit is contained in:
parent
8762a46d36
commit
f314ea4e30
5 changed files with 39 additions and 35 deletions
|
@ -112,7 +112,7 @@ static int handle_close(FsContext *ctx, V9fsFidOpenState *fs)
|
|||
|
||||
static int handle_closedir(FsContext *ctx, V9fsFidOpenState *fs)
|
||||
{
|
||||
return closedir(fs->dir);
|
||||
return closedir(fs->dir.stream);
|
||||
}
|
||||
|
||||
static int handle_open(FsContext *ctx, V9fsPath *fs_path,
|
||||
|
@ -132,8 +132,8 @@ static int handle_opendir(FsContext *ctx,
|
|||
if (ret < 0) {
|
||||
return -1;
|
||||
}
|
||||
fs->dir = fdopendir(ret);
|
||||
if (!fs->dir) {
|
||||
fs->dir.stream = fdopendir(ret);
|
||||
if (!fs->dir.stream) {
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
|
@ -141,24 +141,24 @@ static int handle_opendir(FsContext *ctx,
|
|||
|
||||
static void handle_rewinddir(FsContext *ctx, V9fsFidOpenState *fs)
|
||||
{
|
||||
rewinddir(fs->dir);
|
||||
rewinddir(fs->dir.stream);
|
||||
}
|
||||
|
||||
static off_t handle_telldir(FsContext *ctx, V9fsFidOpenState *fs)
|
||||
{
|
||||
return telldir(fs->dir);
|
||||
return telldir(fs->dir.stream);
|
||||
}
|
||||
|
||||
static int handle_readdir_r(FsContext *ctx, V9fsFidOpenState *fs,
|
||||
struct dirent *entry,
|
||||
struct dirent **result)
|
||||
{
|
||||
return readdir_r(fs->dir, entry, result);
|
||||
return readdir_r(fs->dir.stream, entry, result);
|
||||
}
|
||||
|
||||
static void handle_seekdir(FsContext *ctx, V9fsFidOpenState *fs, off_t off)
|
||||
{
|
||||
seekdir(fs->dir, off);
|
||||
seekdir(fs->dir.stream, off);
|
||||
}
|
||||
|
||||
static ssize_t handle_preadv(FsContext *ctx, V9fsFidOpenState *fs,
|
||||
|
@ -262,7 +262,7 @@ static int handle_fstat(FsContext *fs_ctx, int fid_type,
|
|||
int fd;
|
||||
|
||||
if (fid_type == P9_FID_DIR) {
|
||||
fd = dirfd(fs->dir);
|
||||
fd = dirfd(fs->dir.stream);
|
||||
} else {
|
||||
fd = fs->fd;
|
||||
}
|
||||
|
@ -409,7 +409,7 @@ static int handle_fsync(FsContext *ctx, int fid_type,
|
|||
int fd;
|
||||
|
||||
if (fid_type == P9_FID_DIR) {
|
||||
fd = dirfd(fs->dir);
|
||||
fd = dirfd(fs->dir.stream);
|
||||
} else {
|
||||
fd = fs->fd;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue