1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
/* $Id: vmset.c,v 1.3 2009/06/03 01:10:56 ellson Exp $ $Revision: 1.3 $ */
/* vim:set shiftwidth=4 ts=8: */
/**********************************************************
* This software is part of the graphviz package *
* http://www.graphviz.org/ *
* *
* Copyright (c) 1994-2004 AT&T Corp. *
* and is licensed under the *
* Common Public License, Version 1.0 *
* by AT&T Corp. *
* *
* Information and Software Systems Research *
* AT&T Research, Florham Park NJ *
**********************************************************/
#include "vmhdr.h"
/* Set the control flags for a region.
**
** Written by Kiem-Phong Vo, kpv@research.att.com, 01/16/94.
*/
#if __STD_C
int vmset(reg Vmalloc_t * vm, int flags, int on)
#else
int vmset(vm, flags, on)
reg Vmalloc_t *vm; /* region being worked on */
int flags; /* flags must be in VM_FLAGS */
int on; /* !=0 if turning on, else turning off */
#endif
{
reg int mode;
reg Vmdata_t *vd = vm->data;
if (flags == 0 && on == 0)
return vd->mode;
if (!(vd->mode & VM_TRUST)) {
if (ISLOCK(vd, 0))
return 0;
SETLOCK(vd, 0);
}
mode = vd->mode;
if (on)
vd->mode |= (flags & VM_FLAGS);
else
vd->mode &= ~(flags & VM_FLAGS);
if (vd->mode & (VM_TRACE | VM_MTDEBUG))
vd->mode &= ~VM_TRUST;
CLRLOCK(vd, 0);
return mode;
}
|