/* * 9p utilities (Linux Implementation) * * Copyright IBM, Corp. 2017 * * Authors: * Greg Kurz * * This work is licensed under the terms of the GNU GPL, version 2 or later. * See the COPYING file in the top-level directory. */ /* * Not so fast! You might want to read the 9p developer docs first: * https://wiki.qemu.org/Documentation/9p */ #include "qemu/osdep.h" #include "qemu/xattr.h" #include "9p-util.h" ssize_t fgetxattrat_nofollow(int dirfd, const char *filename, const char *name, void *value, size_t size) { char *proc_path = g_strdup_printf("/proc/self/fd/%d/%s", dirfd, filename); int ret; ret = lgetxattr(proc_path, name, value, size); 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; } int qemu_mknodat(int dirfd, const char *filename, mode_t mode, dev_t dev) { return mknodat(dirfd, filename, mode, dev); }