* Copyright (c) 1982, 1986, 1989 Regents of the University of California.
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
* @(#)ffs_subr.c 7.11 (Berkeley) %G%
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(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)
register u_char
*end
= &cp
[size
];
while (cp
< end
&& *cp
== mask
)
register u_char
*end
= &cp
[size
];
while (cp
< end
&& *cp
!= mask
)