diff options
author | Greg Kurz <groug@kaod.org> | 2017-02-26 23:41:55 +0100 |
---|---|---|
committer | Greg Kurz <groug@kaod.org> | 2017-02-28 11:21:14 +0100 |
commit | 21328e1e57f526e3f0c2fcd00f10c8aa6e7bc07f (patch) | |
tree | 270327f9b95346c9e1817a450bdee79be588dddc /hw/9pfs/9p-local.c | |
parent | 00c90bd1c2ff6aabb9ca948a254ba044a403e399 (diff) | |
download | qemu-21328e1e57f526e3f0c2fcd00f10c8aa6e7bc07f.zip |
9pfs: remove side-effects in local_open() and local_opendir()
If these functions fail, they should not change *fs. Let's use local
variables to fix this.
Signed-off-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'hw/9pfs/9p-local.c')
-rw-r--r-- | hw/9pfs/9p-local.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c index 4a8e628117..607cd2aece 100644 --- a/hw/9pfs/9p-local.c +++ b/hw/9pfs/9p-local.c @@ -356,10 +356,15 @@ static int local_open(FsContext *ctx, V9fsPath *fs_path, { char *buffer; char *path = fs_path->data; + int fd; buffer = rpath(ctx, path); - fs->fd = open(buffer, flags | O_NOFOLLOW); + fd = open(buffer, flags | O_NOFOLLOW); g_free(buffer); + if (fd == -1) { + return -1; + } + fs->fd = fd; return fs->fd; } @@ -368,13 +373,15 @@ static int local_opendir(FsContext *ctx, { char *buffer; char *path = fs_path->data; + DIR *stream; buffer = rpath(ctx, path); - fs->dir.stream = opendir(buffer); + stream = opendir(buffer); g_free(buffer); - if (!fs->dir.stream) { + if (!stream) { return -1; } + fs->dir.stream = stream; return 0; } |