49 lines
1.1 KiB
C
49 lines
1.1 KiB
C
/* Copyright (c) 1990, 1991 UNIX System Laboratories, Inc. */
|
|
/* Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T */
|
|
/* All Rights Reserved */
|
|
|
|
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF */
|
|
/* UNIX System Laboratories, Inc. */
|
|
/* The copyright notice above does not evidence any */
|
|
/* actual or intended publication of such source code. */
|
|
|
|
#ident "@(#)sh:profile.c 1.6.5.1"
|
|
char *mktemp();
|
|
|
|
extern void profil();
|
|
extern int creat();
|
|
extern int write();
|
|
extern int close();
|
|
|
|
void
|
|
monitor(lowpc, highpc, buf, bufsiz, cntsiz)
|
|
char *lowpc, *highpc;
|
|
int *buf, bufsiz;
|
|
{
|
|
register o;
|
|
static *sbuf, ssiz;
|
|
|
|
if (lowpc == 0) {
|
|
profil(0, 0, 0, 0);
|
|
o = creat(mktemp("profXXXXXX"), 0666);
|
|
(void)write(o, sbuf, ssiz<<1);
|
|
(void)close(o);
|
|
return;
|
|
}
|
|
ssiz = bufsiz;
|
|
buf[0] = (int)lowpc;
|
|
buf[1] = (int)highpc;
|
|
buf[2] = cntsiz;
|
|
sbuf = buf;
|
|
buf += 3*(cntsiz+1);
|
|
bufsiz -= 3*(cntsiz+1);
|
|
if (bufsiz<=0)
|
|
return;
|
|
o = ((highpc - lowpc)>>1) & 077777;
|
|
if(bufsiz < o)
|
|
o = ((long)bufsiz<<15) / o;
|
|
else
|
|
o = 077777;
|
|
profil(buf, bufsiz<<1, lowpc, o<<1);
|
|
}
|