From: Keno Fischer <k...@alumni.harvard.edu> This code relied on P9_DOTL_AT_REMOVEDIR and AT_REMOVEDIR having the same numerical value, but on Darwin, they do not.
Signed-off-by: Keno Fischer <k...@juliacomputing.com> --- hw/9pfs/9p-local.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/hw/9pfs/9p-local.c b/hw/9pfs/9p-local.c index 6e0b2e8..c55ea25 100644 --- a/hw/9pfs/9p-local.c +++ b/hw/9pfs/9p-local.c @@ -1376,7 +1376,17 @@ static int local_unlinkat(FsContext *ctx, V9fsPath *dir, return -1; } - ret = local_unlinkat_common(ctx, dirfd, name, flags); + if ((flags & ~P9_DOTL_AT_REMOVEDIR) != 0) { + errno = EINVAL; + return -1; + } + + size_t rflags = 0; + if (flags & P9_DOTL_AT_REMOVEDIR) { + rflags |= AT_REMOVEDIR; + } + + ret = local_unlinkat_common(ctx, dirfd, name, rflags); close_preserve_errno(dirfd); return ret; } -- 2.8.1