summaryrefslogtreecommitdiff
path: root/hw/9pfs/9p-local.c
diff options
context:
space:
mode:
authorGreg Kurz <groug@kaod.org>2017-02-26 23:41:55 +0100
committerGreg Kurz <groug@kaod.org>2017-02-28 11:21:14 +0100
commit21328e1e57f526e3f0c2fcd00f10c8aa6e7bc07f (patch)
tree270327f9b95346c9e1817a450bdee79be588dddc /hw/9pfs/9p-local.c
parent00c90bd1c2ff6aabb9ca948a254ba044a403e399 (diff)
downloadqemu-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.c13
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;
}