本文整理汇总了C++中SCARG函数的典型用法代码示例。如果您正苦于以下问题:C++ SCARG函数的具体用法?C++ SCARG怎么用?C++ SCARG使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了SCARG函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: linux_sys_sched_get_priority_min
int
linux_sys_sched_get_priority_min(struct lwp *l, const struct linux_sys_sched_get_priority_min_args *uap, register_t *retval)
{
/* {
syscallarg(int) policy;
} */
switch (SCARG(uap, policy)) {
case LINUX_SCHED_OTHER:
*retval = 0;
break;
case LINUX_SCHED_FIFO:
case LINUX_SCHED_RR:
*retval = LINUX_SCHED_RTPRIO_MIN;
break;
default:
return EINVAL;
}
return 0;
}
示例2: ultrix_sys_sigvec
int
ultrix_sys_sigvec(struct lwp *l, const struct ultrix_sys_sigvec_args *uap, register_t *retval)
{
struct sigvec nsv, osv;
struct sigaction nsa, osa;
int error;
if (SCARG(uap, nsv)) {
error = copyin(SCARG(uap, nsv), &nsv, sizeof(nsv));
if (error)
return error;
nsa.sa_handler = nsv.sv_handler;
#if 0 /* documentation */
/* ONSTACK is identical */
nsa.sa_flags = nsv.sv_flags & ULTRIX_SV_ONSTACK;
if ((nsv.sv_flags & ULTRIX_SV_OLDSIG)
/* old signal() - always restart */
|| (!(nsv.sv_flags & ULTRIX_SV_INTERRUPT))
/* inverted meaning (same bit) */
)
nsa.sa_flags |= SA_RESTART;
#else /* optimized - assuming ULTRIX_SV_OLDSIG=>!ULTRIX_SV_INTERRUPT */
nsa.sa_flags = nsv.sv_flags & ~ULTRIX_SV_OLDSIG;
nsa.sa_flags ^= SA_RESTART;
#endif
native_sigset13_to_sigset(&nsv.sv_mask, &nsa.sa_mask);
}
error = sigaction1(l, SCARG(uap, signum),
SCARG(uap, nsv) ? &nsa : 0, SCARG(uap, osv) ? &osa : 0,
NULL, 0);
if (error)
return error;
if (SCARG(uap, osv)) {
osv.sv_handler = osa.sa_handler;
osv.sv_flags = osa.sa_flags ^ SA_RESTART;
osv.sv_flags &= (ULTRIX_SV_ONSTACK | ULTRIX_SV_INTERRUPT);
native_sigset_to_sigset13(&osa.sa_mask, &osv.sv_mask);
error = copyout(&osv, SCARG(uap, osv), sizeof(osv));
if (error)
return error;
}
return 0;
}
示例3: darwin_sys_socket
int
darwin_sys_socket(struct lwp *l, const struct darwin_sys_socket_args *uap, register_t *retval)
{
/* {
syscallarg(int) domain;
syscallarg(int) type;
syscallarg(int) protocol;
} */
struct compat_30_sys_socket_args cup;
if ((unsigned)SCARG(uap, domain) >= __arraycount(darwin_to_native_af))
return (EPROTONOSUPPORT);
SCARG(&cup, domain) = darwin_to_native_af[SCARG(uap, domain)];
SCARG(&cup, type) = SCARG(uap, type);
SCARG(&cup, protocol) = SCARG(uap, protocol);
return compat_30_sys_socket(l, &cup, retval);
}
示例4: sys_getsid
/*
* Return the process group ID of the session leader (session ID)
* for the specified process.
*/
int
sys_getsid(struct lwp *l, const struct sys_getsid_args *uap, register_t *retval)
{
/* {
syscalldarg(pid_t) pid;
} */
pid_t pid = SCARG(uap, pid);
struct proc *p;
int error = 0;
mutex_enter(proc_lock);
if (pid == 0)
*retval = l->l_proc->p_session->s_sid;
else if ((p = proc_find(pid)) != NULL)
*retval = p->p_session->s_sid;
else
error = ESRCH;
mutex_exit(proc_lock);
return error;
}
示例5: svr4_ustat
int
svr4_ustat(struct lwp *l, const struct svr4_ustat_args *uap, register_t *retval)
{
/* {
syscallarg(svr4_dev_t) dev;
syscallarg(struct svr4_ustat *) name;
} */
struct svr4_ustat us;
int error;
memset(&us, 0, sizeof us);
/*
* XXX: should set f_tfree and f_tinode at least
* How do we translate dev -> fstat? (and then to svr4_ustat)
*/
if ((error = copyout(&us, SCARG(uap, name), sizeof us)) != 0)
return (error);
return 0;
}
示例6: linux_sys_rt_queueinfo
/*
* Once more: only a signal conversion is needed.
* Note: also used as sys_rt_queueinfo. The info field is ignored.
*/
int
linux_sys_rt_queueinfo(struct lwp *l, const struct linux_sys_rt_queueinfo_args *uap, register_t *retval)
{
/*
syscallarg(int) pid;
syscallarg(int) signum;
syscallarg(linix_siginfo_t *) uinfo;
*/
int error;
linux_siginfo_t info;
error = copyin(SCARG(uap, uinfo), &info, sizeof(info));
if (error)
return error;
if (info.lsi_code >= 0)
return EPERM;
/* XXX To really implement this we need to */
/* XXX keep a list of queued signals somewhere. */
return (linux_sys_kill(l, (const void *)uap, retval));
}
示例7: netbsd32_sigqueueinfo
int
netbsd32_sigqueueinfo(struct lwp *l,
const struct netbsd32_sigqueueinfo_args *uap, register_t *retval)
{
/* {
syscallarg(pid_t) pid;
syscallarg(const netbsd32_siginfop_t) info;
} */
struct __ksiginfo32 ksi32;
ksiginfo_t ksi;
int error;
if ((error = copyin(SCARG_P32(uap, info), &ksi32,
sizeof(ksi32))) != 0)
return error;
KSI_INIT(&ksi);
netbsd32_ksi32_to_ksi(&ksi.ksi_info, &ksi32);
return kill1(l, SCARG(uap, pid), &ksi, retval);
}
示例8: ultrix_sys_execve
int
ultrix_sys_execve(struct lwp *l, const struct ultrix_sys_execve_args *uap, register_t *retval)
{
/* {
syscallarg(const char *) path;
syscallarg(char **) argv;
syscallarg(char **) envp;
} */
struct sys_execve_args ap;
SCARG(&ap, path) = SCARG(uap, path);
SCARG(&ap, argp) = SCARG(uap, argp);
SCARG(&ap, envp) = SCARG(uap, envp);
return sys_execve(l, &ap, retval);
}
示例9: netbsd32_sigaction
int
netbsd32_sigaction(struct lwp *l, const struct netbsd32_sigaction_args *uap, register_t *retval)
{
/* {
syscallarg(int) signum;
syscallarg(const netbsd32_sigactionp_t) nsa;
syscallarg(netbsd32_sigactionp_t) osa;
} */
struct sigaction nsa, osa;
struct netbsd32_sigaction13 *sa32p, sa32;
int error;
if (SCARG_P32(uap, nsa)) {
sa32p = SCARG_P32(uap, nsa);
if (copyin(sa32p, &sa32, sizeof(sa32)))
return EFAULT;
nsa.sa_handler = (void *)NETBSD32PTR64(sa32.netbsd32_sa_handler);
memset(&nsa.sa_mask, 0, sizeof(nsa.sa_mask));
nsa.sa_mask.__bits[0] = sa32.netbsd32_sa_mask;
nsa.sa_flags = sa32.netbsd32_sa_flags;
}
error = sigaction1(l, SCARG(uap, signum),
SCARG_P32(uap, nsa) ? &nsa : 0,
SCARG_P32(uap, osa) ? &osa : 0,
NULL, 0);
if (error)
return (error);
if (SCARG_P32(uap, osa)) {
NETBSD32PTR32(sa32.netbsd32_sa_handler, osa.sa_handler);
sa32.netbsd32_sa_mask = osa.sa_mask.__bits[0];
sa32.netbsd32_sa_flags = osa.sa_flags;
sa32p = SCARG_P32(uap, osa);
if (copyout(&sa32, sa32p, sizeof(sa32)))
return EFAULT;
}
return (0);
}
示例10: linux32_sys_fstat64
int
linux32_sys_fstat64(struct lwp *l, const struct linux32_sys_fstat64_args *uap, register_t *retval)
{
/* {
syscallarg(int) fd;
syscallarg(linux32_stat64p) sp;
} */
int error;
struct stat st;
struct linux32_stat64 st32;
struct linux32_stat64 *st32p;
error = do_sys_fstat(SCARG(uap, fd), &st);
if (error != 0)
return error;
linux32_from_stat(&st, &st32);
st32p = SCARG_P32(uap, sp);
return copyout(&st32, st32p, sizeof(*st32p));
}
示例11: ultrix_sys_setpgrp
int
ultrix_sys_setpgrp(struct lwp *l, const struct ultrix_sys_setpgrp_args *uap, register_t *retval)
{
struct proc *p = l->l_proc;
struct sys_setpgid_args ap;
SCARG(&ap, pid) = SCARG(uap, pid);
SCARG(&ap, pgid) = SCARG(uap, pgid);
/*
* difference to our setpgid call is to include backwards
* compatibility to pre-setsid() binaries. Do setsid()
* instead of setpgid() in those cases where the process
* tries to create a new session the old way.
*/
if (!SCARG(&ap, pgid) &&
(!SCARG(&ap, pid) || SCARG(&ap, pid) == p->p_pid))
return sys_setsid(l, &ap, retval);
else
return sys_setpgid(l, &ap, retval);
}
示例12: linux_sys_sigsetmask
/*
* The following three functions fiddle with a process' signal mask.
* Convert the signal masks because of the different signal
* values for Linux. The need for this is the reason why
* they are here, and have not been mapped directly.
*/
int
linux_sys_sigsetmask(struct lwp *l, const struct linux_sys_sigsetmask_args *uap, register_t *retval)
{
/* {
syscallarg(linux_old_sigset_t) mask;
} */
sigset_t nbss, obss;
linux_old_sigset_t nlss, olss;
struct proc *p = l->l_proc;
int error;
nlss = SCARG(uap, mask);
linux_old_to_native_sigset(&nbss, &nlss);
mutex_enter(p->p_lock);
error = sigprocmask1(l, SIG_SETMASK, &nbss, &obss);
mutex_exit(p->p_lock);
if (error)
return (error);
native_to_linux_old_sigset(&olss, &obss);
*retval = olss;
return (0);
}
示例13: netbsd32___clock_getres50
int
netbsd32___clock_getres50(struct lwp *l, const struct netbsd32___clock_getres50_args *uap, register_t *retval)
{
/* {
syscallarg(netbsd32_clockid_t) clock_id;
syscallarg(netbsd32_timespecp_t) tp;
} */
struct netbsd32_timespec ts32;
struct timespec ts;
int error = 0;
error = clock_getres1(SCARG(uap, clock_id), &ts);
if (error != 0)
return error;
if (SCARG_P32(uap, tp)) {
netbsd32_from_timespec(&ts, &ts32);
error = copyout(&ts32, SCARG_P32(uap, tp), sizeof(ts32));
}
return error;
}
示例14: kldload
int
kldload(struct proc* p, struct kldload_args* uap)
{
char* filename = NULL, *modulename;
linker_file_t lf;
int error = 0;
p->p_retval[0] = -1;
if (securelevel > 0)
return EPERM;
if (error = suser(p->p_ucred, &p->p_acflag))
return error;
filename = malloc(MAXPATHLEN, M_TEMP, M_WAITOK);
if (error = copyinstr(SCARG(uap, file), filename, MAXPATHLEN, NULL))
goto out;
/* Can't load more than one module with the same name */
modulename = rindex(filename, '/');
if (modulename == NULL)
modulename = filename;
if (linker_find_file_by_name(modulename)) {
error = EEXIST;
goto out;
}
if (error = linker_load_file(filename, &lf))
goto out;
lf->userrefs++;
p->p_retval[0] = lf->id;
out:
if (filename)
free(filename, M_TEMP);
return error;
}
示例15: linux_sys_sched_setaffinity
int
linux_sys_sched_setaffinity(struct lwp *l, const struct linux_sys_sched_setaffinity_args *uap, register_t *retval)
{
/* {
syscallarg(linux_pid_t) pid;
syscallarg(unsigned int) len;
syscallarg(unsigned long *) mask;
} */
proc_t *p;
/* XXX: Pointless check. TODO: Actually implement this. */
mutex_enter(proc_lock);
p = proc_find(SCARG(uap, pid));
mutex_exit(proc_lock);
if (p == NULL) {
return ESRCH;
}
/* Let's ignore it */
DPRINTF(("%s\n", __func__));
return 0;
}