[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 06/19] hw/9pfs: Add missing definitions for Windows
|
From: |
Christian Schoenebeck |
|
Subject: |
Re: [PATCH v2 06/19] hw/9pfs: Add missing definitions for Windows |
|
Date: |
Mon, 14 Nov 2022 17:40:36 +0100 |
On Friday, November 11, 2022 5:22:12 AM CET Bin Meng wrote:
> From: Guohuai Shi <guohuai.shi@windriver.com>
>
> Some definitions currently used by the 9pfs codes are only available
> on POSIX platforms. Let's add our own ones in preparation to adding
> 9pfs support for Windows.
>
> Signed-off-by: Guohuai Shi <guohuai.shi@windriver.com>
> Signed-off-by: Bin Meng <bin.meng@windriver.com>
>
> ---
>
> Changes in v2:
> - Add S_IFLNK related macros to support symbolic link
>
> fsdev/file-op-9p.h | 33 +++++++++++++++++++++++++++++++++
> hw/9pfs/9p.h | 33 +++++++++++++++++++++++++++++++++
> 2 files changed, 66 insertions(+)
>
> diff --git a/fsdev/file-op-9p.h b/fsdev/file-op-9p.h
> index 4997677460..7d9a736b66 100644
> --- a/fsdev/file-op-9p.h
> +++ b/fsdev/file-op-9p.h
> @@ -27,6 +27,39 @@
> # include <sys/mount.h>
> #endif
>
> +#ifdef CONFIG_WIN32
> +
> +/* POSIX structure not defined in Windows */
> +
> +typedef uint32_t uid_t;
> +typedef uint32_t gid_t;
> +
> +/* from http://man7.org/linux/man-pages/man2/statfs.2.html */
> +typedef uint32_t __fsword_t;
> +typedef uint32_t fsblkcnt_t;
> +typedef uint32_t fsfilcnt_t;
> +
> +/* from linux/include/uapi/asm-generic/posix_types.h */
> +typedef struct {
> + long __val[2];
> +} fsid_t;
> +
> +struct statfs {
> + __fsword_t f_type;
> + __fsword_t f_bsize;
> + fsblkcnt_t f_blocks;
> + fsblkcnt_t f_bfree;
> + fsblkcnt_t f_bavail;
> + fsfilcnt_t f_files;
> + fsfilcnt_t f_ffree;
> + fsid_t f_fsid;
> + __fsword_t f_namelen;
> + __fsword_t f_frsize;
> + __fsword_t f_flags;
> +};
> +
Does it make sense to define all of these, even though not being used?
> +#endif /* CONFIG_WIN32 */
> +
> #define SM_LOCAL_MODE_BITS 0600
> #define SM_LOCAL_DIR_MODE_BITS 0700
>
> diff --git a/hw/9pfs/9p.h b/hw/9pfs/9p.h
> index 2fce4140d1..957a7e4ccc 100644
> --- a/hw/9pfs/9p.h
> +++ b/hw/9pfs/9p.h
> @@ -3,13 +3,46 @@
>
> #include <dirent.h>
> #include <utime.h>
> +#ifndef CONFIG_WIN32
> #include <sys/resource.h>
> +#endif
> #include "fsdev/file-op-9p.h"
> #include "fsdev/9p-iov-marshal.h"
> #include "qemu/thread.h"
> #include "qemu/coroutine.h"
> #include "qemu/qht.h"
>
> +#ifdef CONFIG_WIN32
> +
> +#define NAME_MAX MAX_PATH
That's not quite the same. MAX_PATH on Windows corresponds to PATH_MAX on
POSIX, which is the max. length of an entire path (i.e. drive, multiple
directory names, filename, backslashes). AFAICS MAX_PATH is 260 on Windows.
The max. length of a single filename component OTOH is 255 on Windows by
default. I don't know if there is a macro for the latter, if not, maybe
just hard coding it here for now?
> +
> +/* macros required for build, values do not matter */
> +#define AT_SYMLINK_NOFOLLOW 0x100 /* Do not follow symbolic links */
> +#define AT_REMOVEDIR 0x200 /* Remove directory instead of file */
> +#define O_DIRECTORY 02000000
> +
> +#define makedev(major, minor) \
> + ((dev_t)((((major) & 0xfff) << 8) | ((minor) & 0xff)))
> +#define major(dev) ((unsigned int)(((dev) >> 8) & 0xfff))
> +#define minor(dev) ((unsigned int)(((dev) & 0xff)))
> +
> +#ifndef S_IFLNK
> +/*
> + * Currenlty Windows/MinGW does not provide the following flag macros,
> + * so define them here for 9p codes.
> + *
> + * Once Windows/MinGW provides them, remove the defines to prevent conflicts.
> + */
> +#define S_IFLNK 0xA000
> +#define S_ISUID 0x0800
> +#define S_ISGID 0x0400
> +#define S_ISVTX 0x0200
> +
> +#define S_ISLNK(mode) ((mode & S_IFMT) == S_IFLNK)
> +#endif /* S_IFLNK */
> +
> +#endif /* CONFIG_WIN32 */
> +
> enum {
> P9_TLERROR = 6,
> P9_RLERROR,
>
[PATCH v2 03/19] hw/9pfs: Replace the direct call to xxxat() APIs with a wrapper, Bin Meng, 2022/11/10
[PATCH v2 05/19] hw/9pfs: Update 9pfs to use the new QemuFd_t type, Bin Meng, 2022/11/10
[PATCH v2 08/19] hw/9pfs: Update the local fs driver to support Windows, Bin Meng, 2022/11/10
[PATCH v2 07/19] hw/9pfs: Implement Windows specific utilities functions for 9pfs, Bin Meng, 2022/11/10