diff options
author | Ian Jackson <ian.jackson@eu.citrix.com> | 2011-01-28 16:43:53 +0000 |
---|---|---|
committer | Ian Jackson <ian.jackson@eu.citrix.com> | 2011-01-28 16:43:53 +0000 |
commit | a76377f10e9df051a820c55ab83ed9fffa7e9a53 (patch) | |
tree | d6db568ae273229f41b67636ed7967212cbaaadc | |
parent | 4df98b33c284d5f0e923e67b78a66d679636ca10 (diff) | |
download | xen-a76377f10e9df051a820c55ab83ed9fffa7e9a53.tar.gz xen-a76377f10e9df051a820c55ab83ed9fffa7e9a53.tar.bz2 xen-a76377f10e9df051a820c55ab83ed9fffa7e9a53.zip |
libxl: correct error path in libxl_userdata_retrieve
Firstly, if libxl_read_file_contents fails, it doesn't really leave
*data and *datalen_r undefined - it leaves them unchanged. Tighten up
the spec for the benefit of libxl_userdata_retrieve.
Secondly, libxl_userdata_retrieve ignored errors, assuming they were
all ENOENT. Instead it should fail on unexpected errors.
Signed-off-by: Ian Jackson <ian.jackson@eu.citrix.com>
Acked-by: Jim Fehlig <jfehlig@novell.com>
Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
-rw-r--r-- | tools/libxl/libxl_dom.c | 5 | ||||
-rw-r--r-- | tools/libxl/libxl_utils.h | 2 |
2 files changed, 5 insertions, 2 deletions
diff --git a/tools/libxl/libxl_dom.c b/tools/libxl/libxl_dom.c index 7e49c5afaf..29a92fd172 100644 --- a/tools/libxl/libxl_dom.c +++ b/tools/libxl/libxl_dom.c @@ -671,7 +671,10 @@ int libxl_userdata_retrieve(libxl_ctx *ctx, uint32_t domid, } e = libxl_read_file_contents(ctx, filename, data_r ? &data : 0, &datalen); - + if (e && errno != ENOENT) { + rc = ERROR_FAIL; + goto out; + } if (!e && !datalen) { LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "userdata file %s is empty", filename); if (data_r) assert(!*data_r); diff --git a/tools/libxl/libxl_utils.h b/tools/libxl/libxl_utils.h index 3ec67e5eb0..348dd79864 100644 --- a/tools/libxl/libxl_utils.h +++ b/tools/libxl/libxl_utils.h @@ -36,7 +36,7 @@ int libxl_read_file_contents(libxl_ctx *ctx, const char *filename, /* Reads the contents of the plain file filename into a mallocd * buffer. Returns 0 or errno. Any errors other than ENOENT are logged. * If the file is empty, *data_r and *datalen_r are set to 0. - * On error, *data_r and *datalen_r are undefined. + * On error, *data_r and *datalen_r are unchanged. * data_r and/or datalen_r may be 0. */ |