subr.c revision 23012
1185029Spjd/*- 2185029Spjd * Copyright (c) 1988, 1993 3185029Spjd * The Regents of the University of California. All rights reserved. 4185029Spjd * 5185029Spjd * Redistribution and use in source and binary forms, with or without 6185029Spjd * modification, are permitted provided that the following conditions 7185029Spjd * are met: 8185029Spjd * 1. Redistributions of source code must retain the above copyright 9185029Spjd * notice, this list of conditions and the following disclaimer. 10185029Spjd * 2. Redistributions in binary form must reproduce the above copyright 11185029Spjd * notice, this list of conditions and the following disclaimer in the 12185029Spjd * documentation and/or other materials provided with the distribution. 13185029Spjd * 3. All advertising materials mentioning features or use of this software 14185029Spjd * must display the following acknowledgement: 15185029Spjd * This product includes software developed by the University of 16185029Spjd * California, Berkeley and its contributors. 17185029Spjd * 4. Neither the name of the University nor the names of its contributors 18185029Spjd * may be used to endorse or promote products derived from this software 19185029Spjd * without specific prior written permission. 20185029Spjd * 21185029Spjd * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 22209962Smm * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23185029Spjd * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24185029Spjd * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 25185029Spjd * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 26185029Spjd * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 27185029Spjd * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28185029Spjd * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 29185029Spjd * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 30185029Spjd * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 31185029Spjd * SUCH DAMAGE. 32185029Spjd */ 33185029Spjd 34185029Spjd#ifndef lint 35185029Spjd#if 0 36185029Spjdstatic char sccsid[] = "@(#)subr.c 8.1 (Berkeley) 6/6/93"; 37185029Spjd#endif 38185029Spjdstatic const char rcsid[] = 39185029Spjd "$Id$"; 40185029Spjd#endif /* not lint */ 41185029Spjd 42185029Spjd#include <sys/param.h> 43185029Spjd#include <sys/file.h> 44185029Spjd#include <sys/user.h> 45185029Spjd#include <sys/proc.h> 46185029Spjd#include <sys/time.h> 47185029Spjd#include <sys/ktrace.h> 48185029Spjd 49185029Spjd#include <stdio.h> 50209962Smm 51209962Smm#include "ktrace.h" 52209962Smm 53209962Smmgetpoints(s) 54185029Spjd char *s; 55185029Spjd{ 56185029Spjd int facs = 0; 57185029Spjd 58185029Spjd while (*s) { 59185029Spjd switch(*s) { 60185029Spjd case 'c': 61185029Spjd facs |= KTRFAC_SYSCALL | KTRFAC_SYSRET; 62185029Spjd break; 63185029Spjd case 'n': 64185029Spjd facs |= KTRFAC_NAMEI; 65185029Spjd break; 66185029Spjd case 'i': 67185029Spjd facs |= KTRFAC_GENIO; 68185029Spjd break; 69185029Spjd case 's': 70185029Spjd facs |= KTRFAC_PSIG; 71185029Spjd break; 72185029Spjd case 'u': 73185029Spjd facs |= KTRFAC_USER; 74185029Spjd break; 75185029Spjd case 'w': 76185029Spjd facs |= KTRFAC_CSW; 77185029Spjd break; 78185029Spjd case '+': 79185029Spjd facs |= DEF_POINTS; 80185029Spjd break; 81185029Spjd default: 82185029Spjd return (-1); 83185029Spjd } 84185029Spjd s++; 85185029Spjd } 86185029Spjd return (facs); 87185029Spjd} 88185029Spjd 89185029Spjdtimevaladd(t1, t2) 90185029Spjd struct timeval *t1, *t2; 91185029Spjd{ 92185029Spjd t1->tv_sec += t2->tv_sec; 93185029Spjd t1->tv_usec += t2->tv_usec; 94185029Spjd timevalfix(t1); 95185029Spjd} 96185029Spjd 97185029Spjdtimevalsub(t1, t2) 98185029Spjd struct timeval *t1, *t2; 99185029Spjd{ 100185029Spjd t1->tv_sec -= t2->tv_sec; 101185029Spjd t1->tv_usec -= t2->tv_usec; 102209962Smm timevalfix(t1); 103209962Smm} 104209962Smm 105209962Smmtimevalfix(t1) 106209962Smm struct timeval *t1; 107209962Smm{ 108209962Smm if (t1->tv_usec < 0) { 109209962Smm t1->tv_sec--; 110209962Smm t1->tv_usec += 1000000; 111185029Spjd } 112185029Spjd if (t1->tv_usec >= 1000000) { 113185029Spjd t1->tv_sec++; 114185029Spjd t1->tv_usec -= 1000000; 115185029Spjd } 116185029Spjd} 117185029Spjd