xref: /original-bsd/lib/libcompat/4.1/vtimes.c (revision c3e32dec)
1 /*-
2  * Copyright (c) 1980, 1993
3  *	The Regents of the University of California.  All rights reserved.
4  *
5  * %sccs.include.proprietary.c%
6  */
7 
8 #if defined(LIBC_SCCS) && !defined(lint)
9 static char sccsid[] = "@(#)vtimes.c	8.1 (Berkeley) 06/04/93";
10 #endif /* LIBC_SCCS and not lint */
11 
12 #include <sys/types.h>
13 #include <sys/time.h>
14 #include <sys/resource.h>
15 
16 /*
17  * Backwards compatible vtimes.
18  */
19 struct vtimes {
20 	int	vm_utime;		/* user time (60'ths) */
21 	int	vm_stime;		/* system time (60'ths) */
22 	/* divide next two by utime+stime to get averages */
23 	unsigned vm_idsrss;		/* integral of d+s rss */
24 	unsigned vm_ixrss;		/* integral of text rss */
25 	int	vm_maxrss;		/* maximum rss */
26 	int	vm_majflt;		/* major page faults */
27 	int	vm_minflt;		/* minor page faults */
28 	int	vm_nswap;		/* number of swaps */
29 	int	vm_inblk;		/* block reads */
30 	int	vm_oublk;		/* block writes */
31 };
32 
33 vtimes(par, chi)
34 	register struct vtimes *par, *chi;
35 {
36 	struct rusage ru;
37 	static int getvtimes();
38 
39 	if (par) {
40 		if (getrusage(RUSAGE_SELF, &ru) < 0)
41 			return (-1);
42 		getvtimes(&ru, par);
43 	}
44 	if (chi) {
45 		if (getrusage(RUSAGE_CHILDREN, &ru) < 0)
46 			return (-1);
47 		getvtimes(&ru, chi);
48 	}
49 	return (0);
50 }
51 
52 static
53 getvtimes(aru, avt)
54 	register struct rusage *aru;
55 	register struct vtimes *avt;
56 {
57 	static int scale60();
58 
59 	avt->vm_utime = scale60(&aru->ru_utime);
60 	avt->vm_stime = scale60(&aru->ru_stime);
61 	avt->vm_idsrss = ((aru->ru_idrss+aru->ru_isrss) / 100) * 60;
62 	avt->vm_ixrss = aru->ru_ixrss / 100 * 60;
63 	avt->vm_maxrss = aru->ru_maxrss;
64 	avt->vm_majflt = aru->ru_majflt;
65 	avt->vm_minflt = aru->ru_minflt;
66 	avt->vm_nswap = aru->ru_nswap;
67 	avt->vm_inblk = aru->ru_inblock;
68 	avt->vm_oublk = aru->ru_oublock;
69 }
70 
71 static
72 scale60(tvp)
73 	register struct timeval *tvp;
74 {
75 	return (tvp->tv_sec * 60 + tvp->tv_usec / 16667);
76 }
77