1177633Sdfr/* $NetBSD: subr.c,v 1.17 2011/04/27 00:00:47 joerg Exp $ */ 2177633Sdfr 3177633Sdfr/*- 4177633Sdfr * Copyright (c) 1988, 1993 5177633Sdfr * The Regents of the University of California. All rights reserved. 6177685Sdfr * 7177633Sdfr * Redistribution and use in source and binary forms, with or without 8177633Sdfr * modification, are permitted provided that the following conditions 9177633Sdfr * are met: 10177633Sdfr * 1. Redistributions of source code must retain the above copyright 11177633Sdfr * notice, this list of conditions and the following disclaimer. 12177633Sdfr * 2. Redistributions in binary form must reproduce the above copyright 13177633Sdfr * notice, this list of conditions and the following disclaimer in the 14177633Sdfr * documentation and/or other materials provided with the distribution. 15177633Sdfr * 3. Neither the name of the University nor the names of its contributors 16177633Sdfr * may be used to endorse or promote products derived from this software 17177633Sdfr * without specific prior written permission. 18177633Sdfr * 19177633Sdfr * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 20177633Sdfr * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21177633Sdfr * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22177633Sdfr * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 23177633Sdfr * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24177633Sdfr * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 25177633Sdfr * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 26177633Sdfr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27177633Sdfr * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28177633Sdfr * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29177633Sdfr * SUCH DAMAGE. 30177633Sdfr */ 31177633Sdfr 32177633Sdfr#include <sys/cdefs.h> 33177633Sdfr#ifndef lint 34177633Sdfr#if 0 35177633Sdfrstatic char sccsid[] = "@(#)subr.c 8.2 (Berkeley) 4/28/95"; 36177633Sdfr#else 37177633Sdfr__RCSID("$NetBSD: subr.c,v 1.17 2011/04/27 00:00:47 joerg Exp $"); 38177633Sdfr#endif 39177633Sdfr#endif /* not lint */ 40177633Sdfr 41177633Sdfr#include <sys/param.h> 42177633Sdfr#include <sys/time.h> 43177633Sdfr#include <sys/uio.h> 44177633Sdfr#include <sys/ktrace.h> 45177633Sdfr 46177633Sdfr#include <stdio.h> 47177633Sdfr 48177633Sdfr#include "ktrace.h" 49177633Sdfr 50177633Sdfrint 51177633Sdfrgetpoints(int facs, char *s) 52177633Sdfr{ 53177633Sdfr int fac; 54177633Sdfr int add = 1; 55177633Sdfr 56177633Sdfr /* Make -t-x equivalent to -t+-x since that is rather more useful */ 57177633Sdfr if (*s == '-' && (facs & ALL_POINTS) == 0) 58177633Sdfr facs |= DEF_POINTS; 59177633Sdfr 60177633Sdfr for (;;) { 61177633Sdfr switch (*s++) { 62177633Sdfr case 0: 63177633Sdfr return facs; 64177633Sdfr case 'A': 65177633Sdfr fac = ALL_POINTS; 66177633Sdfr break; 67177633Sdfr case 'a': 68177633Sdfr fac = KTRFAC_EXEC_ARG; 69177633Sdfr break; 70177633Sdfr case 'c': 71177633Sdfr fac = KTRFAC_SYSCALL | KTRFAC_SYSRET; 72177633Sdfr break; 73177633Sdfr case 'e': 74177633Sdfr fac = KTRFAC_EMUL; 75177633Sdfr break; 76177633Sdfr case 'f': 77177633Sdfr fac = KTRFAC_EXEC_FD; 78177633Sdfr break; 79177633Sdfr case 'i': 80177633Sdfr fac = KTRFAC_GENIO; 81177633Sdfr break; 82177633Sdfr case 'n': 83177633Sdfr fac = KTRFAC_NAMEI; 84177633Sdfr break; 85177633Sdfr case 's': 86177633Sdfr fac = KTRFAC_PSIG; 87177633Sdfr break; 88177633Sdfr case 'u': 89177633Sdfr fac = KTRFAC_USER; 90177633Sdfr break; 91177633Sdfr case 'S': 92177633Sdfr fac = KTRFAC_MIB; 93177633Sdfr break; 94177633Sdfr case 'v': 95177633Sdfr fac = KTRFAC_EXEC_ENV; 96177633Sdfr break; 97177633Sdfr case 'w': 98177633Sdfr fac = KTRFAC_CSW; 99177633Sdfr break; 100177633Sdfr case '+': 101177633Sdfr if (!add) { 102177633Sdfr add = 1; 103177633Sdfr continue; 104177633Sdfr } 105177633Sdfr fac = DEF_POINTS; 106177633Sdfr break; 107177633Sdfr case '-': 108177633Sdfr add = 0; 109177633Sdfr continue; 110177633Sdfr default: 111177633Sdfr return (-1); 112177633Sdfr } 113177633Sdfr if (add) 114177633Sdfr facs |= fac; 115177633Sdfr else 116177633Sdfr facs &= ~fac; 117177633Sdfr } 118177633Sdfr} 119177633Sdfr