134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project/* 234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Copyright (c) 1993, 1994, 1995 Rick Sladkey <jrs@world.std.com> 334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * All rights reserved. 434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * Redistribution and use in source and binary forms, with or without 634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * modification, are permitted provided that the following conditions 734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * are met: 834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * notice, this list of conditions and the following disclaimer. 1034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 1134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 1234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * documentation and/or other materials provided with the distribution. 1334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 3. The name of the author may not be used to endorse or promote products 1434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * derived from this software without specific prior written permission. 1534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 1634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 1734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 1834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 1934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 2134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 2534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project * 27f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown * $Id$ 2834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project */ 2934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 3034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include "defs.h" 3134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 3234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef SVR4 3334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifndef HAVE_MP_PROCFS 3434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 3534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat proc_status_flags[] = { 3634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_STOPPED, "PR_STOPPED" }, 3734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_ISTOP, "PR_ISTOP" }, 3834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_DSTOP, "PR_DSTOP" }, 3934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_ASLEEP, "PR_ASLEEP" }, 4034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_FORK, "PR_FORK" }, 4134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_RLC, "PR_RLC" }, 4234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_PTRACE, "PR_PTRACE" }, 4334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_PCINVAL, "PR_PCINVAL" }, 4434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_ISSYS, "PR_ISSYS" }, 4534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef PR_STEP 4634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_STEP, "PR_STEP" }, 4734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 4834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef PR_KLC 4934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_KLC, "PR_KLC" }, 5034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 5134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef PR_ASYNC 5234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_ASYNC, "PR_ASYNC" }, 5334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 5434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef PR_PCOMPAT 5534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_PCOMPAT, "PR_PCOMPAT" }, 5634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 5734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { 0, NULL }, 5834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}; 5934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 6034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat proc_status_why[] = { 6134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_REQUESTED, "PR_REQUESTED" }, 6234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_SIGNALLED, "PR_SIGNALLED" }, 6334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_SYSENTRY, "PR_SYSENTRY" }, 6434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_SYSEXIT, "PR_SYSEXIT" }, 6534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_JOBCONTROL,"PR_JOBCONTROL" }, 6634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_FAULTED, "PR_FAULTED" }, 6734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef PR_SUSPENDED 6834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_SUSPENDED, "PR_SUSPENDED" }, 6934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 7034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef PR_CHECKPOINT 7134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PR_CHECKPOINT,"PR_CHECKPOINT" }, 7234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 7334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { 0, NULL }, 7434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}; 7534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 7634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat proc_run_flags[] = { 7734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PRCSIG, "PRCSIG" }, 7834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PRCFAULT, "PRCFAULT" }, 7934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PRSTRACE, "PRSTRACE" }, 8034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PRSHOLD, "PRSHOLD" }, 8134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PRSFAULT, "PRSFAULT" }, 8234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PRSVADDR, "PRSVADDR" }, 8334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PRSTEP, "PRSTEP" }, 8434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PRSABORT, "PRSABORT" }, 8534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PRSTOP, "PRSTOP" }, 8634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { 0, NULL }, 8734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}; 8834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 8934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint 9034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectproc_ioctl(tcp, code, arg) 9134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp; 9234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint code, arg; 9334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{ 9434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project int val; 9534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project prstatus_t status; 9634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project prrun_t run; 9734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 9834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project if (entering(tcp)) 9934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 0; 10034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 10134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project switch (code) { 10234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PIOCSTATUS: 10334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PIOCSTOP: 10434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PIOCWSTOP: 10534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project if (arg == 0) 10634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", NULL"); 10734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project else if (syserror(tcp)) 10834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", %#x", arg); 10934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project else if (umove(tcp, arg, &status) < 0) 11034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", {...}"); 11134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project else { 11234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", {pr_flags="); 11334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printflags(proc_status_flags, status.pr_flags, "PR_???"); 11434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project if (status.pr_why) { 11534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", pr_why="); 11634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printxval(proc_status_why, status.pr_why, 11734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project "PR_???"); 11834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 11934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project switch (status.pr_why) { 12034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PR_SIGNALLED: 12134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PR_JOBCONTROL: 12234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", pr_what="); 12334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printsignal(status.pr_what); 12434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project break; 12534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PR_FAULTED: 12634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", pr_what=%d", status.pr_what); 12734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project break; 12834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PR_SYSENTRY: 12934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PR_SYSEXIT: 13034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", pr_what=SYS_%s", 13134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project sysent[status.pr_what].sys_name); 13234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project break; 13334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 13434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", ...}"); 13534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 13634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 1; 13734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PIOCRUN: 13834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project if (arg == 0) 13934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", NULL"); 14034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project else if (umove(tcp, arg, &run) < 0) 14134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", {...}"); 14234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project else { 14334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", {pr_flags="); 14434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printflags(proc_run_flags, run.pr_flags, "PR???"); 14534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", ...}"); 14634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 14734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 1; 14834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef PIOCSET 14934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PIOCSET: 15034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PIOCRESET: 15134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project if (umove(tcp, arg, &val) < 0) 15234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", [?]"); 15334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project else { 15434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", ["); 15534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printflags(proc_status_flags, val, "PR_???"); 15634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("]"); 15734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 15834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 1; 15934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* PIOCSET */ 16034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PIOCKILL: 16134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PIOCUNKILL: 16234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project /* takes a pointer to a signal */ 16334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project if (umove(tcp, arg, &val) < 0) 16434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", [?]"); 16534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project else { 16634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", ["); 16734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printsignal(val); 16834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("]"); 16934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 17034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 1; 17134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PIOCSFORK: 17234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PIOCRFORK: 17334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PIOCSRLC: 17434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PIOCRRLC: 17534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project /* doesn't take an arg */ 17634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 1; 17734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project default: 17834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project /* ad naseum */ 17934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 0; 18034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 18134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project} 18234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 18334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* HAVE_MP_PROCFS */ 18434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif /* SVR4 */ 18534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 18634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#ifdef FREEBSD 18734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#include <sys/pioctl.h> 18834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 18934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat proc_status_why[] = { 19034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { S_EXEC, "S_EXEC" }, 19134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { S_SIG, "S_SIG" }, 19234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { S_SCE, "S_SCE" }, 19334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { S_SCX, "S_SCX" }, 19434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { S_CORE, "S_CORE" }, 19534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { S_EXIT, "S_EXIT" }, 19634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { 0, NULL } 19734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}; 19834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 19934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstatic const struct xlat proc_status_flags[] = { 20034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PF_LINGER, "PF_LINGER" }, 20134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { PF_ISUGID, "PF_ISUGID" }, 20234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project { 0, NULL } 20334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project}; 20434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 20534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint 20634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectproc_ioctl(tcp, code, arg) 20734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectstruct tcb *tcp; 20834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Projectint code, arg; 20934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project{ 21034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project int val; 21134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project struct procfs_status status; 21234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 21334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project if (entering(tcp)) 21434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 0; 21534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project 21634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project switch (code) { 21734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PIOCSTATUS: 21834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PIOCWAIT: 21934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project if (arg == 0) 22034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", NULL"); 22134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project else if (syserror(tcp)) 22234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", %x", arg); 22334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project else if (umove(tcp, arg, &status) < 0) 22434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", {...}"); 22534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project else { 22634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", {state=%d, flags=", status.state); 22734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printflags(proc_status_flags, status.flags, "PF_???"); 22834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", events="); 22934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printflags(proc_status_why, status.events, "S_???"); 23034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", why="); 23134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printxval(proc_status_why, status.why, "S_???"); 23234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", val=%lu}", status.val); 23334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 23434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 1; 23534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PIOCBIS: 23634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", "); 23734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printflags(proc_status_why, arg, "S_???"); 23834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 1; 23934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 1; 24034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PIOCSFL: 24134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", "); 24234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printflags(proc_status_flags, arg, "PF_???"); 24334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 1; 24434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project case PIOCGFL: 245f76f96e20f766e6bb91593885b1e800f8bc14a52Jeff Brown if (syserror(tcp)) 24634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", %#x", arg); 24734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project else if (umove(tcp, arg, &val) < 0) 24834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", {...}"); 24934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project else { 25034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf(", ["); 25134d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project printflags(proc_status_flags, val, "PF_???"); 25234d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project tprintf("]"); 25334d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 25434d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 1; 25534d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project default: 25634d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project /* ad naseum */ 25734d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project return 0; 25834d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project } 25934d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project} 26034d6eabc451f16d5f168fc1595ee604f21bccc51The Android Open Source Project#endif 261