Add the *xattr(2) family of syscalls. Just like the *extattr(2) family,

they're waiting for an actual FS back-end to be tested, but are still
straightforward enough.
This commit is contained in:
cube 2005-07-12 07:45:34 +00:00
parent 8a067178c8
commit 728e5e01bd
2 changed files with 225 additions and 3 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: netbsd32_netbsd.c,v 1.95 2005/07/11 20:18:05 cube Exp $ */
/* $NetBSD: netbsd32_netbsd.c,v 1.96 2005/07/12 07:45:34 cube Exp $ */
/*
* Copyright (c) 1998, 2001 Matthew R. Green
@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: netbsd32_netbsd.c,v 1.95 2005/07/11 20:18:05 cube Exp $");
__KERNEL_RCSID(0, "$NetBSD: netbsd32_netbsd.c,v 1.96 2005/07/12 07:45:34 cube Exp $");
#if defined(_KERNEL_OPT)
#include "opt_ddb.h"
@ -2591,3 +2591,195 @@ netbsd32_rasctl(struct lwp *l, void *v, register_t *retval)
NETBSD32TO64_UAP(op);
return sys_rasctl(l, &ua, retval);
}
int
netbsd32_setxattr(struct lwp *l, void *v, register_t *retval)
{
struct netbsd32_setxattr_args /* {
syscallarg(const netbsd32_charp) path;
syscallarg(const netbsd32_charp) name;
syscallarg(netbsd32_voidp) value;
syscallarg(netbsd32_size_t) size;
syscallarg(int) flags;
} */ *uap = v;
struct sys_setxattr_args ua;
NETBSD32TOP_UAP(path, const char);
NETBSD32TOP_UAP(name, const char);
NETBSD32TOP_UAP(value, void);
NETBSD32TOX_UAP(size, size_t);
NETBSD32TO64_UAP(flags);
return sys_setxattr(l, &ua, retval);
}
int
netbsd32_lsetxattr(struct lwp *l, void *v, register_t *retval)
{
struct netbsd32_lsetxattr_args /* {
syscallarg(const netbsd32_charp) path;
syscallarg(const netbsd32_charp) name;
syscallarg(netbsd32_voidp) value;
syscallarg(netbsd32_size_t) size;
syscallarg(int) flags;
} */ *uap = v;
struct sys_lsetxattr_args ua;
NETBSD32TOP_UAP(path, const char);
NETBSD32TOP_UAP(name, const char);
NETBSD32TOP_UAP(value, void);
NETBSD32TOX_UAP(size, size_t);
NETBSD32TO64_UAP(flags);
return sys_lsetxattr(l, &ua, retval);
}
int
netbsd32_fsetxattr(struct lwp *l, void *v, register_t *retval)
{
struct netbsd32_fsetxattr_args /* {
syscallarg(int) fd;
syscallarg(const netbsd32_charp) name;
syscallarg(netbsd32_voidp) value;
syscallarg(netbsd32_size_t) size;
syscallarg(int) flags;
} */ *uap = v;
struct sys_fsetxattr_args ua;
NETBSD32TO64_UAP(fd);
NETBSD32TOP_UAP(name, const char);
NETBSD32TOP_UAP(value, void);
NETBSD32TOX_UAP(size, size_t);
NETBSD32TO64_UAP(flags);
return sys_fsetxattr(l, &ua, retval);
}
int
netbsd32_getxattr(struct lwp *l, void *v, register_t *retval)
{
struct netbsd32_getxattr_args /* {
syscallarg(const netbsd32_charp) path;
syscallarg(const netbsd32_charp) name;
syscallarg(netbsd32_voidp) value;
syscallarg(netbsd32_size_t) size;
} */ *uap = v;
struct sys_getxattr_args ua;
NETBSD32TOP_UAP(path, const char);
NETBSD32TOP_UAP(name, const char);
NETBSD32TOP_UAP(value, void);
NETBSD32TOX_UAP(size, size_t);
return sys_getxattr(l, &ua, retval);
}
int
netbsd32_lgetxattr(struct lwp *l, void *v, register_t *retval)
{
struct netbsd32_lgetxattr_args /* {
syscallarg(const netbsd32_charp) path;
syscallarg(const netbsd32_charp) name;
syscallarg(netbsd32_voidp) value;
syscallarg(netbsd32_size_t) size;
} */ *uap = v;
struct sys_lgetxattr_args ua;
NETBSD32TOP_UAP(path, const char);
NETBSD32TOP_UAP(name, const char);
NETBSD32TOP_UAP(value, void);
NETBSD32TOX_UAP(size, size_t);
return sys_lgetxattr(l, &ua, retval);
}
int
netbsd32_fgetxattr(struct lwp *l, void *v, register_t *retval)
{
struct netbsd32_fgetxattr_args /* {
syscallarg(int) fd;
syscallarg(const netbsd32_charp) name;
syscallarg(netbsd32_voidp) value;
syscallarg(netbsd32_size_t) size;
} */ *uap = v;
struct sys_fgetxattr_args ua;
NETBSD32TO64_UAP(fd);
NETBSD32TOP_UAP(name, const char);
NETBSD32TOP_UAP(value, void);
NETBSD32TOX_UAP(size, size_t);
return sys_fgetxattr(l, &ua, retval);
}
int
netbsd32_listxattr(struct lwp *l, void *v, register_t *retval)
{
struct netbsd32_listxattr_args /* {
syscallarg(const netbsd32_charp) path;
syscallarg(netbsd32_charp) list;
syscallarg(netbsd32_size_t) size;
} */ *uap = v;
struct sys_listxattr_args ua;
NETBSD32TOP_UAP(path, const char);
NETBSD32TOP_UAP(list, char);
NETBSD32TOX_UAP(size, size_t);
return sys_listxattr(l, &ua, retval);
}
int
netbsd32_llistxattr(struct lwp *l, void *v, register_t *retval)
{
struct netbsd32_llistxattr_args /* {
syscallarg(const netbsd32_charp) path;
syscallarg(netbsd32_charp) list;
syscallarg(netbsd32_size_t) size;
} */ *uap = v;
struct sys_llistxattr_args ua;
NETBSD32TOP_UAP(path, const char);
NETBSD32TOP_UAP(list, char);
NETBSD32TOX_UAP(size, size_t);
return sys_llistxattr(l, &ua, retval);
}
int
netbsd32_flistxattr(struct lwp *l, void *v, register_t *retval)
{
struct netbsd32_flistxattr_args /* {
syscallarg(int) fd;
syscallarg(netbsd32_charp) list;
syscallarg(netbsd32_size_t) size;
} */ *uap = v;
struct sys_flistxattr_args ua;
NETBSD32TO64_UAP(fd);
NETBSD32TOP_UAP(list, char);
NETBSD32TOX_UAP(size, size_t);
return sys_flistxattr(l, &ua, retval);
}
int
netbsd32_removexattr(struct lwp *l, void *v, register_t *retval)
{
struct netbsd32_removexattr_args /* {
syscallarg(const netbsd32_charp) path;
syscallarg(const netbsd32_charp) name;
} */ *uap = v;
struct sys_removexattr_args ua;
NETBSD32TOP_UAP(path, const char);
NETBSD32TOP_UAP(name, const char);
return sys_removexattr(l, &ua, retval);
}
int
netbsd32_lremovexattr(struct lwp *l, void *v, register_t *retval)
{
struct netbsd32_lremovexattr_args /* {
syscallarg(const netbsd32_charp) path;
syscallarg(const netbsd32_charp) name;
} */ *uap = v;
struct sys_lremovexattr_args ua;
NETBSD32TOP_UAP(path, const char);
NETBSD32TOP_UAP(name, const char);
return sys_lremovexattr(l, &ua, retval);
}
int
netbsd32_fremovexattr(struct lwp *l, void *v, register_t *retval)
{
struct netbsd32_fremovexattr_args /* {
syscallarg(int) fd;
syscallarg(const netbsd32_charp) name;
} */ *uap = v;
struct sys_fremovexattr_args ua;
NETBSD32TO64_UAP(fd);
NETBSD32TOP_UAP(name, const char);
return sys_fremovexattr(l, &ua, retval);
}

View File

@ -1,4 +1,4 @@
$NetBSD: syscalls.master,v 1.34 2005/07/11 20:18:05 cube Exp $
$NetBSD: syscalls.master,v 1.35 2005/07/12 07:45:34 cube Exp $
; from: NetBSD: syscalls.master,v 1.81 1998/07/05 08:49:50 jonathan Exp
; @(#)syscalls.master 8.2 (Berkeley) 1/13/94
@ -604,3 +604,33 @@
const netbsd32_timespecp_t ts, const netbsd32_sigsetp_t mask); }
374 STD { int netbsd32_pollts(netbsd32_pollfdp_t fds, u_int nfds, \
const netbsd32_timespecp_t ts, const netbsd32_sigsetp_t mask); }
375 STD { int netbsd32_setxattr(const netbsd32_charp path, \
const netbsd32_charp name, netbsd32_voidp value, \
netbsd32_size_t size, int flags); }
376 STD { int netbsd32_lsetxattr(const netbsd32_charp path, \
const netbsd32_charp name, netbsd32_voidp value, \
netbsd32_size_t size, int flags); }
377 STD { int netbsd32_fsetxattr(int fd, \
const netbsd32_charp name, netbsd32_voidp value, \
netbsd32_size_t size, int flags); }
378 STD { int netbsd32_getxattr(const netbsd32_charp path, \
const netbsd32_charp name, netbsd32_voidp value, \
netbsd32_size_t size); }
379 STD { int netbsd32_lgetxattr(const netbsd32_charp path, \
const netbsd32_charp name, netbsd32_voidp value, \
netbsd32_size_t size); }
380 STD { int netbsd32_fgetxattr(int fd, \
const netbsd32_charp name, netbsd32_voidp value, \
netbsd32_size_t size); }
381 STD { int netbsd32_listxattr(const netbsd32_charp path, \
netbsd32_charp list, netbsd32_size_t size); }
382 STD { int netbsd32_llistxattr(const netbsd32_charp path, \
netbsd32_charp list, netbsd32_size_t size); }
383 STD { int netbsd32_flistxattr(int fd, \
netbsd32_charp list, netbsd32_size_t size); }
384 STD { int netbsd32_removexattr(const netbsd32_charp path, \
const netbsd32_charp name); }
385 STD { int netbsd32_lremovexattr(const netbsd32_charp path, \
const netbsd32_charp name); }
386 STD { int netbsd32_fremovexattr(int fd, \
const netbsd32_charp name); }