]> git.saurik.com Git - apple/xnu.git/blobdiff - bsd/ufs/ffs/ffs_subr.c
xnu-1456.1.26.tar.gz
[apple/xnu.git] / bsd / ufs / ffs / ffs_subr.c
diff --git a/bsd/ufs/ffs/ffs_subr.c b/bsd/ufs/ffs/ffs_subr.c
deleted file mode 100644 (file)
index d226a56..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
- *
- * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
- * 
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. The rights granted to you under the License
- * may not be used to create, or enable the creation or redistribution of,
- * unlawful or unlicensed copies of an Apple operating system, or to
- * circumvent, violate, or enable the circumvention or violation of, any
- * terms of an Apple operating system software license agreement.
- * 
- * Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
- * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
- * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
- * 
- * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
- */
-/* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */
-/*
- * Copyright (c) 1982, 1986, 1989, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 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
- * SUCH DAMAGE.
- *
- *     @(#)ffs_subr.c  8.5 (Berkeley) 3/21/95
- */
-
-#include <rev_endian_fs.h>
-#include <sys/param.h>
-#if REV_ENDIAN_FS
-#include <sys/mount_internal.h>
-#endif /* REV_ENDIAN_FS */
-
-#ifndef KERNEL
-#include <ufs/ufs/dinode.h>
-#include <ufs/ffs/fs.h>
-#else
-
-#include <sys/systm.h>
-#include <sys/vnode_internal.h>
-#include <sys/buf.h>
-#include <sys/quota.h>
-#include <ufs/ufs/quota.h>
-#include <ufs/ufs/inode.h>
-#include <ufs/ffs/fs.h>
-#include <ufs/ffs/ffs_extern.h>
-#if REV_ENDIAN_FS
-#include <ufs/ufs/ufs_byte_order.h>
-#endif /* REV_ENDIAN_FS */
-
-/*
- * Return buffer with the contents of block "offset" from the beginning of
- * directory "ip".  If "res" is non-zero, fill it in with a pointer to the
- * remaining space in the directory.
- */
-__private_extern__
-int
-ffs_blkatoff(vnode_t vp, off_t offset, char **res, buf_t *bpp)
-{
-       struct inode *ip;
-       register struct fs *fs;
-       struct buf *bp;
-       ufs_daddr_t lbn;
-       int bsize, error;
-#if REV_ENDIAN_FS
-       struct mount *mp = vnode_mount(vp);
-       int rev_endian=(mp->mnt_flag & MNT_REVEND);
-#endif /* REV_ENDIAN_FS */
-
-       ip = VTOI(vp);
-       fs = ip->i_fs;
-       lbn = lblkno(fs, offset);
-       bsize = blksize(fs, ip, lbn);
-
-       *bpp = NULL;
-       if (error = (int)buf_bread(vp, (daddr64_t)((unsigned)lbn), bsize, NOCRED, &bp)) {
-               buf_brelse(bp);
-               return (error);
-       }
-#if    REV_ENDIAN_FS
-       if (rev_endian)
-               byte_swap_dir_block_in((char *)buf_dataptr(bp), buf_count(bp));
-#endif /* REV_ENDIAN_FS */
-
-       if (res)
-               *res = (char *)buf_dataptr(bp) + blkoff(fs, offset);
-       *bpp = bp;
-       return (0);
-}
-#endif
-
-/*
- * Update the frsum fields to reflect addition or deletion 
- * of some frags.
- */
-void
-ffs_fragacct(fs, fragmap, fraglist, cnt)
-       struct fs *fs;
-       int fragmap;
-       int32_t fraglist[];
-       int cnt;
-{
-       int inblk;
-       register int field, subfield;
-       register int siz, pos;
-
-       inblk = (int)(fragtbl[fs->fs_frag][fragmap]) << 1;
-       fragmap <<= 1;
-       for (siz = 1; siz < fs->fs_frag; siz++) {
-               if ((inblk & (1 << (siz + (fs->fs_frag % NBBY)))) == 0)
-                       continue;
-               field = around[siz];
-               subfield = inside[siz];
-               for (pos = siz; pos <= fs->fs_frag; pos++) {
-                       if ((fragmap & field) == subfield) {
-                               fraglist[siz] += cnt;
-                               pos += siz;
-                               field <<= siz;
-                               subfield <<= siz;
-                       }
-                       field <<= 1;
-                       subfield <<= 1;
-               }
-       }
-}
-
-/*
- * block operations
- *
- * check if a block is available
- */
-int
-ffs_isblock(fs, cp, h)
-       struct fs *fs;
-       unsigned char *cp;
-       ufs_daddr_t h;
-{
-       unsigned char mask;
-
-       switch ((int)fs->fs_frag) {
-       case 8:
-               return (cp[h] == 0xff);
-       case 4:
-               mask = 0x0f << ((h & 0x1) << 2);
-               return ((cp[h >> 1] & mask) == mask);
-       case 2:
-               mask = 0x03 << ((h & 0x3) << 1);
-               return ((cp[h >> 2] & mask) == mask);
-       case 1:
-               mask = 0x01 << (h & 0x7);
-               return ((cp[h >> 3] & mask) == mask);
-       default:
-               panic("ffs_isblock");
-       }
-       /* NOTREACHED */
-       return 0;
-}
-
-/*
- * take a block out of the map
- */
-void
-ffs_clrblock(fs, cp, h)
-       struct fs *fs;
-       u_char *cp;
-       ufs_daddr_t h;
-{
-
-       switch ((int)fs->fs_frag) {
-       case 8:
-               cp[h] = 0;
-               return;
-       case 4:
-               cp[h >> 1] &= ~(0x0f << ((h & 0x1) << 2));
-               return;
-       case 2:
-               cp[h >> 2] &= ~(0x03 << ((h & 0x3) << 1));
-               return;
-       case 1:
-               cp[h >> 3] &= ~(0x01 << (h & 0x7));
-               return;
-       default:
-               panic("ffs_clrblock");
-       }
-}
-
-/*
- * put a block into the map
- */
-void
-ffs_setblock(fs, cp, h)
-       struct fs *fs;
-       unsigned char *cp;
-       ufs_daddr_t h;
-{
-
-       switch ((int)fs->fs_frag) {
-
-       case 8:
-               cp[h] = 0xff;
-               return;
-       case 4:
-               cp[h >> 1] |= (0x0f << ((h & 0x1) << 2));
-               return;
-       case 2:
-               cp[h >> 2] |= (0x03 << ((h & 0x3) << 1));
-               return;
-       case 1:
-               cp[h >> 3] |= (0x01 << (h & 0x7));
-               return;
-       default:
-               panic("ffs_setblock");
-       }
-}