* Copyright (c) 1982, 1986, 1989 Regents of the University of California.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* @(#)ufs_subr.c 7.13 (Berkeley) 6/28/90
extern u_char
*fragtbl
[];
* Update the frsum fields to reflect addition or deletion
fragacct(fs
, fragmap
, fraglist
, cnt
)
register int field
, subfield
;
inblk
= (int)(fragtbl
[fs
->fs_frag
][fragmap
]) << 1;
for (siz
= 1; siz
< fs
->fs_frag
; siz
++) {
if ((inblk
& (1 << (siz
+ (fs
->fs_frag
% NBBY
)))) == 0)
for (pos
= siz
; pos
<= fs
->fs_frag
; pos
++) {
if ((fragmap
& field
) == subfield
) {
* check if a block is available
switch ((int)fs
->fs_frag
) {
mask
= 0x0f << ((h
& 0x1) << 2);
return ((cp
[h
>> 1] & mask
) == mask
);
mask
= 0x03 << ((h
& 0x3) << 1);
return ((cp
[h
>> 2] & mask
) == mask
);
mask
= 0x01 << (h
& 0x7);
return ((cp
[h
>> 3] & mask
) == mask
);
* take a block out of the map
switch ((int)fs
->fs_frag
) {
cp
[h
>> 1] &= ~(0x0f << ((h
& 0x1) << 2));
cp
[h
>> 2] &= ~(0x03 << ((h
& 0x3) << 1));
cp
[h
>> 3] &= ~(0x01 << (h
& 0x7));
* put a block into the map
switch ((int)fs
->fs_frag
) {
cp
[h
>> 1] |= (0x0f << ((h
& 0x1) << 2));
cp
[h
>> 2] |= (0x03 << ((h
& 0x3) << 1));
cp
[h
>> 3] |= (0x01 << (h
& 0x7));
#if (!defined(vax) && !defined(tahoe) && !defined(hp300)) \
|| defined(VAX630) || defined(VAX650)
* C definitions of special instructions.
* Normally expanded with inline.
scanc(size
, cp
, table
, mask
)
register u_char
*cp
, table
[];
register u_char
*end
= &cp
[size
];
while (cp
< end
&& (table
[*cp
] & mask
) == 0)
#if !defined(vax) && !defined(tahoe) && !defined(hp300)
register u_char
*end
= &cp
[size
];
while (cp
< end
&& *cp
== mask
)
register u_char
*end
= &cp
[size
];
while (cp
< end
&& *cp
!= mask
)