|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V11 2/5] libxl_utils: add internal function to read sysfs file contents
On 15/12/15 05:54, Chunyan Liu wrote:
> Add a new function libxl_read_sysfs_file_contents to handle sysfs file
> specially. It would be used in later pvusb work.
>
> Signed-off-by: Chunyan Liu <cyliu@xxxxxxxx>
> ---
> tools/libxl/libxl_internal.h | 4 +++
> tools/libxl/libxl_utils.c | 77
> ++++++++++++++++++++++++++++++++++++++++++++
> 2 files changed, 81 insertions(+)
>
> diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
> index beaef3f..6b873c7 100644
> --- a/tools/libxl/libxl_internal.h
> +++ b/tools/libxl/libxl_internal.h
> @@ -4026,6 +4026,10 @@ void libxl__bitmap_copy_best_effort(libxl__gc *gc,
> libxl_bitmap *dptr,
>
> int libxl__count_physical_sockets(libxl__gc *gc, int *sockets);
>
> +_hidden int libxl__read_sysfs_file_contents(libxl__gc *gc,
> + const char *filename,
> + void **data_r,
> + int *datalen_r);
>
> #define LIBXL_QEMU_USER_PREFIX "xen-qemuuser"
> #define LIBXL_QEMU_USER_BASE LIBXL_QEMU_USER_PREFIX"-domid"
> diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c
> index e42422a..7f612a6 100644
> --- a/tools/libxl/libxl_utils.c
> +++ b/tools/libxl/libxl_utils.c
> @@ -396,6 +396,83 @@ int libxl_read_file_contents(libxl_ctx *ctx, const char
> *filename,
> return e;
> }
>
> +int libxl__read_sysfs_file_contents(libxl__gc *gc, const char *filename,
> + void **data_r, int *datalen_r)
> +{
> + FILE *f = 0;
> + uint8_t *data = 0;
> + int datalen = 0;
> + int e;
> + struct stat stab;
> + ssize_t rs;
> +
> + f = fopen(filename, "r");
> + if (!f) {
> + if (errno == ENOENT) return ENOENT;
> + LOGE(ERROR, "failed to open %s", filename);
> + goto xe;
> + }
> +
> + if (fstat(fileno(f), &stab)) {
> + LOGE(ERROR, "failed to fstat %s", filename);
> + goto xe;
> + }
> +
> + if (!S_ISREG(stab.st_mode)) {
> + LOGE(ERROR, "%s is not a plain file", filename);
> + errno = ENOTTY;
> + goto xe;
> + }
> +
> + if (stab.st_size > INT_MAX) {
> + LOG(ERROR, "file %s is far too large", filename);
> + errno = EFBIG;
> + goto xe;
> + }
> +
> + datalen = stab.st_size;
> +
> + if (stab.st_size && data_r) {
> + data = libxl__malloc(gc, datalen);
> + if (!data) goto xe;
I think the libxl allocation functions never return NULL (if the malloc
fails, the function itself will crash the whole process). So yu don't
need to do these null-checks here after libxl__malloc() and
libxl__realloc().
Everything else looks OK to me.
-George
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |