On Thu, 31 May 2018 21:26:02 -0400 Keno Fischer <k...@juliacomputing.com> wrote:
> These functions will need custom implementations on Darwin. Since the > implementation is very similar among all of them, and 9p-util already > has the _nofollow version of fgetxattrat, let's move them all there. > > Signed-off-by: Keno Fischer <k...@juliacomputing.com> > --- > This cleanup makes sense irrespective of the rest of the series. Applied to 9p-next. Thanks! > Changes since v1: > * fgetxattr_follow is dropped in favor of a different approach > later in the series. > > hw/9pfs/9p-util.c | 33 +++++++++++++++++++++++++++++++++ > hw/9pfs/9p-util.h | 4 ++++ > hw/9pfs/9p-xattr.c | 33 --------------------------------- > 3 files changed, 37 insertions(+), 33 deletions(-) > > diff --git a/hw/9pfs/9p-util.c b/hw/9pfs/9p-util.c > index f709c27..614b7fc 100644 > --- a/hw/9pfs/9p-util.c > +++ b/hw/9pfs/9p-util.c > @@ -24,3 +24,36 @@ ssize_t fgetxattrat_nofollow(int dirfd, const char > *filename, const char *name, > g_free(proc_path); > return ret; > } > + > +ssize_t flistxattrat_nofollow(int dirfd, const char *filename, > + char *list, size_t size) > +{ > + char *proc_path = g_strdup_printf("/proc/self/fd/%d/%s", dirfd, > filename); > + int ret; > + > + ret = llistxattr(proc_path, list, size); > + g_free(proc_path); > + return ret; > +} > + > +ssize_t fremovexattrat_nofollow(int dirfd, const char *filename, > + const char *name) > +{ > + char *proc_path = g_strdup_printf("/proc/self/fd/%d/%s", dirfd, > filename); > + int ret; > + > + ret = lremovexattr(proc_path, name); > + g_free(proc_path); > + return ret; > +} > + > +int fsetxattrat_nofollow(int dirfd, const char *filename, const char *name, > + void *value, size_t size, int flags) > +{ > + char *proc_path = g_strdup_printf("/proc/self/fd/%d/%s", dirfd, > filename); > + int ret; > + > + ret = lsetxattr(proc_path, name, value, size, flags); > + g_free(proc_path); > + return ret; > +} > diff --git a/hw/9pfs/9p-util.h b/hw/9pfs/9p-util.h > index dc0d2e2..79ed6b2 100644 > --- a/hw/9pfs/9p-util.h > +++ b/hw/9pfs/9p-util.h > @@ -60,5 +60,9 @@ ssize_t fgetxattrat_nofollow(int dirfd, const char *path, > const char *name, > void *value, size_t size); > int fsetxattrat_nofollow(int dirfd, const char *path, const char *name, > void *value, size_t size, int flags); > +ssize_t flistxattrat_nofollow(int dirfd, const char *filename, > + char *list, size_t size); > +ssize_t fremovexattrat_nofollow(int dirfd, const char *filename, > + const char *name); > > #endif > diff --git a/hw/9pfs/9p-xattr.c b/hw/9pfs/9p-xattr.c > index d05c1a1..c696d8f 100644 > --- a/hw/9pfs/9p-xattr.c > +++ b/hw/9pfs/9p-xattr.c > @@ -60,17 +60,6 @@ ssize_t pt_listxattr(FsContext *ctx, const char *path, > return name_size; > } > > -static ssize_t flistxattrat_nofollow(int dirfd, const char *filename, > - char *list, size_t size) > -{ > - char *proc_path = g_strdup_printf("/proc/self/fd/%d/%s", dirfd, > filename); > - int ret; > - > - ret = llistxattr(proc_path, list, size); > - g_free(proc_path); > - return ret; > -} > - > /* > * Get the list and pass to each layer to find out whether > * to send the data or not > @@ -196,17 +185,6 @@ ssize_t pt_getxattr(FsContext *ctx, const char *path, > const char *name, > return local_getxattr_nofollow(ctx, path, name, value, size); > } > > -int fsetxattrat_nofollow(int dirfd, const char *filename, const char *name, > - void *value, size_t size, int flags) > -{ > - char *proc_path = g_strdup_printf("/proc/self/fd/%d/%s", dirfd, > filename); > - int ret; > - > - ret = lsetxattr(proc_path, name, value, size, flags); > - g_free(proc_path); > - return ret; > -} > - > ssize_t local_setxattr_nofollow(FsContext *ctx, const char *path, > const char *name, void *value, size_t size, > int flags) > @@ -235,17 +213,6 @@ int pt_setxattr(FsContext *ctx, const char *path, const > char *name, void *value, > return local_setxattr_nofollow(ctx, path, name, value, size, flags); > } > > -static ssize_t fremovexattrat_nofollow(int dirfd, const char *filename, > - const char *name) > -{ > - char *proc_path = g_strdup_printf("/proc/self/fd/%d/%s", dirfd, > filename); > - int ret; > - > - ret = lremovexattr(proc_path, name); > - g_free(proc_path); > - return ret; > -} > - > ssize_t local_removexattr_nofollow(FsContext *ctx, const char *path, > const char *name) > {