On Sat, 26 May 2018 01:23:08 -0400
keno@juliacomputing.com wrote:
> From: Keno Fischer <keno@alumni.harvard.edu>
>
> - Darwin doesn't have strchrnul
> - Comparisons of mode_t with -1 require an explicit cast, since mode_t
> is unsigned on Darwin.
>
> Signed-off-by: Keno Fischer <keno@juliacomputing.com>
> ---
> hw/9pfs/9p-local.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c
> index fd65d04..6e0b2e8 100644
> --- a/hw/9pfs/9p-local.c
> +++ b/hw/9pfs/9p-local.c
> @@ -67,7 +67,10 @@ int local_open_nofollow(FsContext *fs_ctx, const char *path, int flags,
> assert(*path != '/');
>
> head = g_strdup(path);
> - c = strchrnul(path, '/');
> + /* equivalent to strchrnul(), but that is not available on Darwin */
Please make a qemu_strchrnul() helper with a separate implementation for Darwin
then. I guess you can put it in this file since there aren't any other users in
the QEMU code base.
> + c = strchr(path, '/');
> + if (!c)
> + c = path + strlen(path);
> if (*c) {
> /* Intermediate path element */
> head[c - path] = 0;
> @@ -310,7 +313,7 @@ update_map_file:
> if (credp->fc_gid != -1) {
> gid = credp->fc_gid;
> }
> - if (credp->fc_mode != -1) {
> + if (credp->fc_mode != (mode_t)-1) {
> mode = credp->fc_mode;
> }
> if (credp->fc_rdev != -1) {
> @@ -416,7 +419,7 @@ static int local_set_xattrat(int dirfd, const char *path, FsCred *credp)
> return err;
> }
> }
> - if (credp->fc_mode != -1) {
> + if (credp->fc_mode != (mode_t)-1) {
> uint32_t tmp_mode = cpu_to_le32(credp->fc_mode);
> err = fsetxattrat_nofollow(dirfd, path, "user.virtfs.mode", &tmp_mode,
> sizeof(mode_t), 0);