[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH-for-4.14 2/2] tools: make libxenhypfs interface more future proof
As compilers are free to choose the width of an enum they should be avoided in stable interfaces when declaring a variable. So the struct xenhypfs_dirent definition should be modified to have explicitly sized members for type and encoding and the related enums should be defined separately. Additionally it is better to have a larger flags member in that struct with the "writable" indicator occupying only a single bit. This will make future additions easier. Suggested-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Signed-off-by: Juergen Gross <jgross@xxxxxxxx> --- tools/libs/hypfs/core.c | 2 +- tools/libs/hypfs/include/xenhypfs.h | 31 +++++++++++++++++------------ tools/misc/xenhypfs.c | 3 ++- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/tools/libs/hypfs/core.c b/tools/libs/hypfs/core.c index d4309b5ae2..c91e165705 100644 --- a/tools/libs/hypfs/core.c +++ b/tools/libs/hypfs/core.c @@ -204,7 +204,7 @@ static void xenhypfs_set_attrs(struct xen_hypfs_direntry *entry, dirent->type = xenhypfs_type_blob; } - dirent->is_writable = entry->max_write_len; + dirent->flags = entry->max_write_len ? XENHYPFS_FLAG_WRITABLE : 0; } void *xenhypfs_read_raw(xenhypfs_handle *fshdl, const char *path, diff --git a/tools/libs/hypfs/include/xenhypfs.h b/tools/libs/hypfs/include/xenhypfs.h index ab157edceb..25432d2a16 100644 --- a/tools/libs/hypfs/include/xenhypfs.h +++ b/tools/libs/hypfs/include/xenhypfs.h @@ -26,22 +26,27 @@ struct xentoollog_logger; typedef struct xenhypfs_handle xenhypfs_handle; +enum xenhypfs_type { + xenhypfs_type_dir, + xenhypfs_type_blob, + xenhypfs_type_string, + xenhypfs_type_uint, + xenhypfs_type_int, + xenhypfs_type_bool, +}; + +enum xenhypfs_encoding { + xenhypfs_enc_plain, + xenhypfs_enc_gzip +}; + struct xenhypfs_dirent { char *name; size_t size; - enum { - xenhypfs_type_dir, - xenhypfs_type_blob, - xenhypfs_type_string, - xenhypfs_type_uint, - xenhypfs_type_int, - xenhypfs_type_bool - } type; - enum { - xenhypfs_enc_plain, - xenhypfs_enc_gzip - } encoding; - bool is_writable; + unsigned short type; + unsigned short encoding; + unsigned int flags; +#define XENHYPFS_FLAG_WRITABLE 0x00000001 }; xenhypfs_handle *xenhypfs_open(struct xentoollog_logger *logger, diff --git a/tools/misc/xenhypfs.c b/tools/misc/xenhypfs.c index 5145b8969f..5da24aed90 100644 --- a/tools/misc/xenhypfs.c +++ b/tools/misc/xenhypfs.c @@ -125,7 +125,8 @@ static int xenhypfs_ls(char *path) } else { for (i = 0; i < n; i++) printf("%s r%c %s\n", xenhypfs_type(ent + i), - ent[i].is_writable ? 'w' : '-', ent[i].name); + (ent[i].flags & XENHYPFS_FLAG_WRITABLE) ? 'w' : '-', + ent[i].name); free(ent); } -- 2.26.2
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |