亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? library.c

?? 早期freebsd實現(xiàn)
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*- * Copyright (c) 1992, 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. */#ifndef lintstatic char sccsid[] = "@(#)library.c	8.1 (Berkeley) 6/4/93";#endif /* not lint */#include <sys/param.h>#include <sys/time.h>#include <sys/stat.h>#include <sys/mount.h>#include <sys/types.h>#include <sys/mman.h>#include <ufs/ufs/dinode.h>#include <ufs/lfs/lfs.h>#include <fcntl.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include "clean.h"void	 add_blocks __P((FS_INFO *, BLOCK_INFO *, int *, SEGSUM *, caddr_t,	     daddr_t, daddr_t));void	 add_inodes __P((FS_INFO *, BLOCK_INFO *, int *, SEGSUM *, caddr_t,	     daddr_t));int	 bi_compare __P((const void *, const void *));int	 bi_toss __P((const void *, const void *, const void *));void	 get_ifile __P((FS_INFO *, int));int	 get_superblock __P((FS_INFO *, struct lfs *));int	 pseg_valid __P((FS_INFO *, SEGSUM *));/* * This function will get information on a a filesystem which matches * the name and type given.  If a "name" is in a filesystem of the given * type, then buf is filled with that filesystem's info, and the * a non-zero value is returned. */intfs_getmntinfo(buf, name, type)	struct	statfs	**buf;	char	*name;	int	type;{	/* allocate space for the filesystem info */	*buf = (struct statfs *)malloc(sizeof(struct statfs));	if (*buf == NULL)		return 0;	/* grab the filesystem info */	if (statfs(name, *buf) < 0) {		free(*buf);		return 0;	}	/* check to see if it's the one we want */	if (((*buf)->f_type != type) ||	    strncmp(name, (*buf)->f_mntonname, MNAMELEN)) {		/* "this is not the filesystem you're looking for */		free(*buf);		return 0;	}	return 1;}/* * Get all the information available on an LFS file system. * Returns an pointer to an FS_INFO structure, NULL on error. */FS_INFO *get_fs_info (lstatfsp, use_mmap)	struct statfs *lstatfsp;	/* IN: pointer to statfs struct */	int use_mmap;			/* IN: mmap or read */{	FS_INFO	*fsp;	int	i;		fsp = (FS_INFO *)malloc(sizeof(FS_INFO));	if (fsp == NULL)		return NULL;	bzero(fsp, sizeof(FS_INFO));	fsp->fi_statfsp = lstatfsp;	if (get_superblock (fsp, &fsp->fi_lfs))		err(1, "get_fs_info: get_superblock failed");	fsp->fi_daddr_shift =	     fsp->fi_lfs.lfs_bshift - fsp->fi_lfs.lfs_fsbtodb;	get_ifile (fsp, use_mmap);	return (fsp);}/* * If we are reading the ifile then we need to refresh it.  Even if * we are mmapping it, it might have grown.  Finally, we need to  * refresh the file system information (statfs) info. */voidreread_fs_info(fsp, use_mmap)	FS_INFO *fsp;	/* IN: prointer fs_infos to reread */	int use_mmap;{	int i;		if (statfs(fsp->fi_statfsp->f_mntonname, fsp->fi_statfsp))		err(1, "reread_fs_info: statfs failed");	get_ifile (fsp, use_mmap);}/*  * Gets the superblock from disk (possibly in face of errors)  */intget_superblock (fsp, sbp)	FS_INFO *fsp;		/* local file system info structure */	struct lfs *sbp;{	char mntfromname[MNAMELEN+1];        int fid;	strcpy(mntfromname, "/dev/r");	strcat(mntfromname, fsp->fi_statfsp->f_mntfromname+5);	if ((fid = open(mntfromname, O_RDONLY, (mode_t)0)) < 0) {		err(0, "get_superblock: bad open");		return (-1);	}	get(fid, LFS_LABELPAD, sbp, sizeof(struct lfs));	close (fid);		return (0);}/*  * This function will map the ifile into memory.  It causes a * fatal error on failure. */voidget_ifile (fsp, use_mmap)	FS_INFO	*fsp;	int use_mmap;{	struct stat file_stat;	caddr_t ifp;	char *ifile_name;	int count, fid;	ifp = NULL;	ifile_name = malloc(strlen(fsp->fi_statfsp->f_mntonname) +	    strlen(IFILE_NAME)+2);	strcat(strcat(strcpy(ifile_name, fsp->fi_statfsp->f_mntonname), "/"),	    IFILE_NAME);	if ((fid = open(ifile_name, O_RDWR, (mode_t)0)) < 0)		err(1, "get_ifile: bad open");	if (fstat (fid, &file_stat))		err(1, "get_ifile: fstat failed");	if (use_mmap && file_stat.st_size == fsp->fi_ifile_length) {		(void) close(fid);		return;	}	/* get the ifile */	if (use_mmap) {		if (fsp->fi_cip)			munmap((caddr_t)fsp->fi_cip, fsp->fi_ifile_length);		ifp = mmap ((caddr_t)0, file_stat.st_size,		    PROT_READ|PROT_WRITE, 0, fid, (off_t)0);		if (ifp ==  (caddr_t)(-1))			err(1, "get_ifile: mmap failed");	} else {		if (fsp->fi_cip)			free(fsp->fi_cip);		if (!(ifp = malloc (file_stat.st_size)))			err (1, "get_ifile: malloc failed"); redo_read:		count = read (fid, ifp, (size_t) file_stat.st_size);		if (count < 0)			err(1, "get_ifile: bad ifile read"); 		else if (count < file_stat.st_size) {			err(0, "get_ifile");			if (lseek(fid, 0, SEEK_SET) < 0)				err(1, "get_ifile: bad ifile lseek"); 			goto redo_read;		}	}	fsp->fi_ifile_length = file_stat.st_size;	close (fid);	fsp->fi_cip = (CLEANERINFO *)ifp;	fsp->fi_segusep = (SEGUSE *)(ifp + CLEANSIZE(fsp));	fsp->fi_ifilep  = (IFILE *)((caddr_t)fsp->fi_segusep + SEGTABSIZE(fsp));	/*	 * The number of ifile entries is equal to the number of blocks	 * blocks in the ifile minus the ones allocated to cleaner info	 * and segment usage table multiplied by the number of ifile	 * entries per page.	 */	fsp->fi_ifile_count = (fsp->fi_ifile_length >> fsp->fi_lfs.lfs_bshift -	    fsp->fi_lfs.lfs_cleansz - fsp->fi_lfs.lfs_segtabsz) *	    fsp->fi_lfs.lfs_ifpb;	free (ifile_name);}/* * This function will scan a segment and return a list of * <inode, blocknum> pairs which indicate which blocks were * contained as live data within the segment when the segment * summary was read (it may have "died" since then).  Any given * pair will be listed at most once. */int lfs_segmapv(fsp, seg, seg_buf, blocks, bcount)	FS_INFO *fsp;		/* pointer to local file system information */	int seg;		/* the segment number */	caddr_t seg_buf;	/* the buffer containing the segment's data */	BLOCK_INFO **blocks;	/* OUT: array of block_info for live blocks */	int *bcount;		/* OUT: number of active blocks in segment */{	BLOCK_INFO *bip;	SEGSUM *sp;	SEGUSE *sup;	FINFO *fip;	struct lfs *lfsp;	caddr_t s, segend;	daddr_t pseg_addr, seg_addr;	int i, nelem, nblocks, sumsize;	time_t timestamp;	lfsp = &fsp->fi_lfs;	nelem = 2 * lfsp->lfs_ssize;	if (!(bip = malloc(nelem * sizeof(BLOCK_INFO))))		goto err0;	sup = SEGUSE_ENTRY(lfsp, fsp->fi_segusep, seg);	s = seg_buf + (sup->su_flags & SEGUSE_SUPERBLOCK ? LFS_SBPAD : 0);	seg_addr = sntoda(lfsp, seg);	pseg_addr = seg_addr + (sup->su_flags & SEGUSE_SUPERBLOCK ? btodb(LFS_SBPAD) : 0);#ifdef VERBOSE		printf("\tsegment buffer at: 0x%x\tseg_addr 0x%x\n", s, seg_addr);#endif /* VERBOSE */	*bcount = 0;	for (segend = seg_buf + seg_size(lfsp), timestamp = 0; s < segend; ) {		sp = (SEGSUM *)s;#ifdef VERBOSE		printf("\tpartial at: 0x%x\n", pseg_addr);		print_SEGSUM(lfsp, sp);		fflush(stdout);#endif /* VERBOSE */		nblocks = pseg_valid(fsp, sp);		if (nblocks <= 0)			break;		/* Check if we have hit old data */		if (timestamp > ((SEGSUM*)s)->ss_create)			break;		timestamp = ((SEGSUM*)s)->ss_create;#ifdef DIAGNOSTIC		/* Verfiy size of summary block */		sumsize = sizeof(SEGSUM) +		    (sp->ss_ninos + INOPB(lfsp) - 1) / INOPB(lfsp);		for (fip = (FINFO *)(sp + 1); i < sp->ss_nfinfo; ++i) {			sumsize += sizeof(FINFO) +			    (fip->fi_nblocks - 1) * sizeof(daddr_t);			fip = (FINFO *)(&fip->fi_blocks[fip->fi_nblocks]);		}		if (sumsize > LFS_SUMMARY_SIZE) {			fprintf(stderr,			    "Segment %d summary block too big: %d\n",			    seg, sumsize);			exit(1);		}#endif		if (*bcount + nblocks + sp->ss_ninos > nelem) {			nelem = *bcount + nblocks + sp->ss_ninos;			bip = realloc (bip, nelem * sizeof(BLOCK_INFO));			if (!bip)				goto err0;		}		add_blocks(fsp, bip, bcount, sp, seg_buf, seg_addr, pseg_addr);		add_inodes(fsp, bip, bcount, sp, seg_buf, seg_addr);		pseg_addr += fsbtodb(lfsp, nblocks) +		    bytetoda(fsp, LFS_SUMMARY_SIZE);		s += (nblocks << lfsp->lfs_bshift) + LFS_SUMMARY_SIZE;	}	qsort(bip, *bcount, sizeof(BLOCK_INFO), bi_compare);	toss(bip, bcount, sizeof(BLOCK_INFO), bi_toss, NULL);#ifdef VERBOSE	{		BLOCK_INFO *_bip;		int i;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
香蕉成人啪国产精品视频综合网 | 国产高清在线精品| 欧美电影一区二区三区| 日韩成人dvd| 26uuu成人网一区二区三区| 国产在线不卡一卡二卡三卡四卡| 精品久久人人做人人爰| 国产一区二区精品久久99| 久久婷婷国产综合精品青草 | 国产三级三级三级精品8ⅰ区| 国产成人自拍在线| 日韩理论片一区二区| 欧美日韩高清不卡| 奇米色一区二区三区四区| 精品国产乱码久久久久久老虎| 国产成人精品一区二区三区网站观看 | 久久一留热品黄| 97久久超碰国产精品| 亚洲午夜精品在线| 精品少妇一区二区三区| av在线不卡免费看| 五月天精品一区二区三区| 欧美哺乳videos| 99久久综合国产精品| 天堂在线一区二区| 国产精品美日韩| 欧美疯狂做受xxxx富婆| 成人精品视频一区二区三区| 亚洲成人第一页| 中文一区二区在线观看| 欧美精品日日鲁夜夜添| 国产91丝袜在线播放| 亚洲成人精品在线观看| 欧美激情资源网| 91超碰这里只有精品国产| 成人理论电影网| 麻豆成人久久精品二区三区红| 国产精品卡一卡二卡三| www久久精品| 欧美色图12p| 成人在线综合网| 日本网站在线观看一区二区三区| 国产精品短视频| www激情久久| 欧美日韩国产三级| a4yy欧美一区二区三区| 极品少妇一区二区| 亚洲在线视频一区| 国产精品传媒入口麻豆| 欧美精品一区二区三区四区| 欧美日韩一区三区| 91丨porny丨国产入口| 国产精品一二三区在线| 日本成人在线一区| 日本欧美一区二区在线观看| 亚洲国产精品成人综合色在线婷婷| 欧洲国内综合视频| 成人免费视频视频在线观看免费| 男人的天堂亚洲一区| 一区二区三区免费看视频| 亚洲国产精华液网站w | 久久精品国产网站| 亚洲一卡二卡三卡四卡五卡| 亚洲欧美日韩一区二区| 国产午夜三级一区二区三| 日韩精品一区二区三区在线观看 | av电影在线观看完整版一区二区| 久久精品国产精品亚洲红杏 | 91精品麻豆日日躁夜夜躁| 91浏览器打开| 国模娜娜一区二区三区| 亚洲精品成人天堂一二三| 久久久久久久久蜜桃| 欧美xxxx在线观看| 精品久久久久久久久久久久包黑料 | 亚洲一区免费在线观看| 亚洲欧美日韩电影| 综合欧美一区二区三区| 最新国产成人在线观看| 国产精品大尺度| 中文字幕欧美一| 亚洲日本成人在线观看| 亚洲精品日韩一| 亚洲一区二区3| 亚洲123区在线观看| 日日夜夜免费精品| 日本在线不卡视频| 韩国精品主播一区二区在线观看 | 亚洲成av人在线观看| 亚洲午夜精品久久久久久久久| 亚洲国产aⅴ天堂久久| 午夜精品福利在线| 免费在线看一区| 欧美日韩在线综合| 欧美性大战xxxxx久久久| 欧美日本国产视频| 欧美精品一区二区久久久| 国产午夜一区二区三区| 中文字幕永久在线不卡| 亚洲综合成人在线| 免费在线看一区| 国产成人精品亚洲午夜麻豆| 色偷偷一区二区三区| 7777精品伊人久久久大香线蕉 | 久久疯狂做爰流白浆xx| 国产一区二区精品久久| www.66久久| 欧美精品日韩综合在线| 久久99热这里只有精品| 国产欧美1区2区3区| 国产精品大尺度| 亚洲午夜国产一区99re久久| 免费人成网站在线观看欧美高清| 韩国一区二区三区| 99久久99久久精品免费观看| 欧美日韩国产123区| ww久久中文字幕| 亚洲专区一二三| 狠狠v欧美v日韩v亚洲ⅴ| 色拍拍在线精品视频8848| 欧美一区二区三区人| 中文字幕av在线一区二区三区| 午夜精品福利一区二区蜜股av| 国产一区二区在线观看视频| 欧美在线观看禁18| 久久嫩草精品久久久精品一| 亚洲一线二线三线久久久| 国产一区在线看| 国产婷婷一区二区| 三级欧美在线一区| 99免费精品视频| 精品国产123| 亚州成人在线电影| 99热这里都是精品| 久久午夜免费电影| 视频一区二区三区中文字幕| 成人激情电影免费在线观看| 欧美一区欧美二区| 亚洲综合区在线| 成人免费av网站| 久久综合久久综合久久| 午夜精品国产更新| 在线观看亚洲成人| 国产精品久久久久精k8| 久久99精品久久只有精品| 欧美无砖砖区免费| 日韩毛片一二三区| 国产98色在线|日韩| 精品国产乱码久久久久久夜甘婷婷 | 国产一区二区三区免费观看| 欧美日韩精品一区视频| 亚洲少妇中出一区| 国产激情一区二区三区桃花岛亚洲| 欧美精品tushy高清| 亚洲综合小说图片| 91色.com| 亚洲人成电影网站色mp4| 福利一区福利二区| 国产日产亚洲精品系列| 久久99精品国产麻豆婷婷| 制服视频三区第一页精品| 亚洲午夜三级在线| 91久久一区二区| 亚洲欧美日韩中文字幕一区二区三区 | 欧美一区二区私人影院日本| 亚洲一区成人在线| 欧日韩精品视频| 亚洲老司机在线| 91国内精品野花午夜精品| 亚洲摸摸操操av| 色噜噜偷拍精品综合在线| 一区二区三区在线免费观看| 91久久国产综合久久| 一区二区高清在线| 欧美性极品少妇| 日韩和欧美一区二区三区| 欧美一区二区精品久久911| 丝袜诱惑制服诱惑色一区在线观看 | 精品视频全国免费看| 亚洲va在线va天堂| 欧美日本国产视频| 蜜臀va亚洲va欧美va天堂| 欧美电影免费观看高清完整版在| 国产一区二区精品久久91| 国产精品欧美一区喷水| 色先锋aa成人| 日韩国产欧美三级| 久久午夜羞羞影院免费观看| 高清免费成人av| 亚洲激情在线激情| 91精品婷婷国产综合久久| 久久国产精品99久久久久久老狼| 精品欧美一区二区三区精品久久| 国产成人一区在线| ...xxx性欧美| 亚洲午夜一区二区| 欧美一级二级三级乱码| 国产在线麻豆精品观看| 国产精品久久毛片av大全日韩| 色诱视频网站一区|