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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? file.c

?? 內核是系統的心臟
?? C
字號:
/*
 *  linux/fs/msdos/file.c
 *
 *  Written 1992,1993 by Werner Almesberger
 *
 *  MS-DOS regular file handling primitives
 */

#include <asm/segment.h>
#include <asm/system.h>

#include <linux/sched.h>
#include <linux/fs.h>
#include <linux/msdos_fs.h>
#include <linux/errno.h>
#include <linux/fcntl.h>
#include <linux/stat.h>

#define MIN(a,b) (((a) < (b)) ? (a) : (b))
#define MAX(a,b) (((a) > (b)) ? (a) : (b))

static int msdos_file_read(struct inode *inode,struct file *filp,char *buf,
    int count);
static int msdos_file_write(struct inode *inode,struct file *filp,char *buf,
    int count);


static struct file_operations msdos_file_operations = {
	NULL,			/* lseek - default */
	msdos_file_read,	/* read */
	msdos_file_write,	/* write */
	NULL,			/* readdir - bad */
	NULL,			/* select - default */
	NULL,			/* ioctl - default */
	NULL,			/* mmap */
	NULL,			/* no special open is needed */
	NULL,			/* release */
	file_fsync		/* fsync */
};

struct inode_operations msdos_file_inode_operations = {
	&msdos_file_operations,	/* default file operations */
	NULL,			/* create */
	NULL,			/* lookup */
	NULL,			/* link */
	NULL,			/* unlink */
	NULL,			/* symlink */
	NULL,			/* mkdir */
	NULL,			/* rmdir */
	NULL,			/* mknod */
	NULL,			/* rename */
	NULL,			/* readlink */
	NULL,			/* follow_link */
	msdos_bmap,		/* bmap */
	msdos_truncate,		/* truncate */
	NULL			/* permission */
};

/* No bmap for MS-DOS FS' that don't align data at kByte boundaries. */

struct inode_operations msdos_file_inode_operations_no_bmap = {
	&msdos_file_operations,	/* default file operations */
	NULL,			/* create */
	NULL,			/* lookup */
	NULL,			/* link */
	NULL,			/* unlink */
	NULL,			/* symlink */
	NULL,			/* mkdir */
	NULL,			/* rmdir */
	NULL,			/* mknod */
	NULL,			/* rename */
	NULL,			/* readlink */
	NULL,			/* follow_link */
	NULL,			/* bmap */
	msdos_truncate,		/* truncate */
	NULL			/* permission */
};


static int msdos_file_read(struct inode *inode,struct file *filp,char *buf,
    int count)
{
	char *start;
	int left,offset,size,sector,cnt;
	char ch;
	struct buffer_head *bh;
	void *data;

/* printk("msdos_file_read\n"); */
	if (!inode) {
		printk("msdos_file_read: inode = NULL\n");
		return -EINVAL;
	}
	if (!S_ISREG(inode->i_mode)) {
		printk("msdos_file_read: mode = %07o\n",inode->i_mode);
		return -EINVAL;
	}
	if (filp->f_pos >= inode->i_size || count <= 0) return 0;
	start = buf;
	while ((left = MIN(inode->i_size-filp->f_pos,count-(buf-start))) > 0){
		if (!(sector = msdos_smap(inode,filp->f_pos >> SECTOR_BITS)))
			break;
		offset = filp->f_pos & (SECTOR_SIZE-1);
		if (!(bh = msdos_sread(inode->i_dev,sector,&data))) break;
		filp->f_pos += (size = MIN(SECTOR_SIZE-offset,left));
		if (MSDOS_I(inode)->i_binary) {
			memcpy_tofs(buf,data+offset,size);
			buf += size;
		}
		else for (cnt = size; cnt; cnt--) {
				if ((ch = *((char *) data+offset++)) == '\r')
					size--;
				else {
					if (ch != 26) put_fs_byte(ch,buf++);
					else {
						filp->f_pos = inode->i_size;
						brelse(bh);
						if (start != buf
						    && !IS_RDONLY(inode))
							inode->i_atime
							    = CURRENT_TIME;
						return buf-start;
					}
				}
			}
		brelse(bh);
	}
	if (start == buf) return -EIO;
	if (!IS_RDONLY(inode))
		inode->i_atime = CURRENT_TIME;
	return buf-start;
}


static int msdos_file_write(struct inode *inode,struct file *filp,char *buf,
    int count)
{
	int sector,offset,size,left,written;
	int error,carry;
	char *start,*to,ch;
	struct buffer_head *bh;
	void *data;

	if (!inode) {
		printk("msdos_file_write: inode = NULL\n");
		return -EINVAL;
	}
	if (!S_ISREG(inode->i_mode)) {
		printk("msdos_file_write: mode = %07o\n",inode->i_mode);
		return -EINVAL;
	}
/*
 * ok, append may not work when many processes are writing at the same time
 * but so what. That way leads to madness anyway.
 */
	if (filp->f_flags & O_APPEND) filp->f_pos = inode->i_size;
	if (count <= 0) return 0;
	error = carry = 0;
	for (start = buf; count || carry; count -= size) {
		while (!(sector = msdos_smap(inode,filp->f_pos >> SECTOR_BITS)))
			if ((error = msdos_add_cluster(inode)) < 0) break;
		if (error) {
			msdos_truncate(inode);
			break;
		}
		offset = filp->f_pos & (SECTOR_SIZE-1);
		size = MIN(SECTOR_SIZE-offset,MAX(carry,count));
		if (!(bh = msdos_sread(inode->i_dev,sector,&data))) {
			error = -EIO;
			break;
		}
		if (MSDOS_I(inode)->i_binary) {
			memcpy_fromfs(data+(filp->f_pos & (SECTOR_SIZE-1)),
			    buf,written = size);
			buf += size;
		}
		else {
			written = left = SECTOR_SIZE-offset;
			to = (char *) data+(filp->f_pos & (SECTOR_SIZE-1));
			if (carry) {
				*to++ = '\n';
				left--;
				carry = 0;
			}
			for (size = 0; size < count && left; size++) {
				if ((ch = get_fs_byte(buf++)) == '\n') {
					*to++ = '\r';
					left--;
				}
				if (!left) carry = 1;
				else {
					*to++ = ch;
					left--;
				}
			}
			written -= left;
		}
		filp->f_pos += written;
		if (filp->f_pos > inode->i_size) {
			inode->i_size = filp->f_pos;
			inode->i_dirt = 1;
		}
		bh->b_dirt = 1;
		brelse(bh);
	}
	if (start == buf)
		return error;
	inode->i_mtime = inode->i_ctime = CURRENT_TIME;
	MSDOS_I(inode)->i_attrs |= ATTR_ARCH;
	inode->i_dirt = 1;
	return buf-start;
}


void msdos_truncate(struct inode *inode)
{
	int cluster;

	cluster = SECTOR_SIZE*MSDOS_SB(inode->i_sb)->cluster_size;
	(void) fat_free(inode,(inode->i_size+(cluster-1))/cluster);
	MSDOS_I(inode)->i_attrs |= ATTR_ARCH;
	inode->i_dirt = 1;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美tickling网站挠脚心| 欧美sm美女调教| 捆绑调教美女网站视频一区| 国产精品视频观看| 5858s免费视频成人| aaa欧美色吧激情视频| 另类成人小视频在线| 亚洲国产精品久久久久婷婷884| 久久影音资源网| 欧美日韩激情一区| 91麻豆成人久久精品二区三区| 蜜臀精品久久久久久蜜臀| 亚洲男人的天堂网| 国产日韩欧美不卡在线| 日韩欧美一区二区免费| 欧美无砖专区一中文字| 99久久精品免费观看| 国产麻豆精品theporn| 奇米一区二区三区| 亚洲妇熟xx妇色黄| 亚洲色图制服诱惑| 国产精品三级av| 国产色产综合产在线视频| 欧美一区二区在线看| 日本道精品一区二区三区| 成人中文字幕电影| 国产福利一区二区| 久久成人18免费观看| 日韩av中文字幕一区二区三区| 亚洲图片自拍偷拍| 亚洲影院在线观看| 亚洲自拍偷拍av| 一区二区三区高清在线| 亚洲特黄一级片| 日韩一区欧美一区| 亚洲欧美综合色| 亚洲色图制服诱惑 | 国产三级精品视频| 日韩欧美电影一二三| 日韩欧美高清一区| 精品国产乱码久久久久久浪潮| 日韩美一区二区三区| 精品国产1区二区| 日韩欧美中文一区| 日韩免费观看高清完整版在线观看| 欧美影院一区二区| 欧美视频中文字幕| 亚洲天堂福利av| 欧美经典一区二区| 国产蜜臀97一区二区三区| 国产日韩欧美a| 国产精品久久久久影院老司| 亚洲欧美综合色| 亚洲最新视频在线观看| 樱桃国产成人精品视频| 亚洲一区二区三区中文字幕在线 | 日韩在线播放一区二区| 日产国产高清一区二区三区| 美腿丝袜亚洲色图| 精品无人码麻豆乱码1区2区| 国产高清一区日本| 91在线无精精品入口| 欧亚洲嫩模精品一区三区| 欧美日本在线一区| 日韩欧美电影在线| 国产欧美日韩激情| 一区二区三区不卡视频 | 国产精品国产精品国产专区不蜜 | 精品国产第一区二区三区观看体验| 精品少妇一区二区三区在线视频| 久久久久国色av免费看影院| 中文字幕亚洲在| 日韩高清在线电影| 国产成人综合亚洲网站| 91国偷自产一区二区开放时间| 欧美一区二区三区视频免费播放| 精品成a人在线观看| 中文字幕一区免费在线观看| 天堂在线亚洲视频| 国产麻豆精品一区二区| 欧洲亚洲精品在线| 精品卡一卡二卡三卡四在线| 亚洲人123区| 国产高清久久久久| 欧美日韩视频不卡| 中文字幕国产精品一区二区| 香蕉av福利精品导航| 国产成人自拍高清视频在线免费播放| 91丨九色丨蝌蚪富婆spa| 欧美成人国产一区二区| **欧美大码日韩| 极品瑜伽女神91| 欧美影院一区二区三区| 国产视频视频一区| 日精品一区二区三区| av网站一区二区三区| 日韩欧美一二三四区| 亚洲欧美日本在线| 国产麻豆视频一区| 欧美巨大另类极品videosbest| 国产精品素人一区二区| 蜜桃精品视频在线| 91国产丝袜在线播放| 国产嫩草影院久久久久| 欧美性生活一区| 中文字幕va一区二区三区| 懂色av中文字幕一区二区三区| 一本大道久久精品懂色aⅴ| 久久在线免费观看| 老司机精品视频线观看86| 色香色香欲天天天影视综合网| 久久免费国产精品| 日韩avvvv在线播放| 在线观看网站黄不卡| 国产精品美女久久久久高潮| 五月综合激情网| 欧美伊人久久久久久午夜久久久久| 欧美va在线播放| 亚洲高清免费一级二级三级| 99久久婷婷国产| 亚洲国产精品高清| 国产在线播放一区三区四| 91精选在线观看| 一区二区三区国产精华| 97精品久久久午夜一区二区三区| 国产婷婷一区二区| 成人性生交大片免费看中文 | 亚洲天堂成人在线观看| 国产成人精品综合在线观看| 亚洲精品一区二区三区在线观看| 日韩中文字幕1| 777xxx欧美| 日韩国产欧美一区二区三区| 欧美精品日韩精品| 亚洲电影在线播放| 精品视频一区三区九区| 午夜电影一区二区三区| 欧美日韩国产三级| 日韩av电影免费观看高清完整版 | 日韩成人伦理电影在线观看| 欧美剧在线免费观看网站| 亚洲地区一二三色| 欧美高清你懂得| 奇米色一区二区三区四区| 日韩欧美卡一卡二| 国内精品伊人久久久久av影院 | 精品久久国产97色综合| 免费成人在线网站| 精品成人在线观看| 国内成人免费视频| 欧美国产综合一区二区| 成人午夜精品在线| 国产精品丝袜一区| 91一区在线观看| 亚洲国产成人av| 3d成人h动漫网站入口| 精品一区二区在线免费观看| 国产三级一区二区| www.亚洲色图.com| 亚洲va欧美va人人爽| 欧美一级一级性生活免费录像| 青娱乐精品在线视频| 久久久久高清精品| av午夜一区麻豆| 亚洲国产精品影院| 日韩精品一区二区在线观看| 国产资源在线一区| 在线成人小视频| 免费在线观看不卡| 91精彩视频在线观看| 成人欧美一区二区三区在线播放| 色综合久久久久久久久久久| 国产精品白丝在线| 欧美最猛黑人xxxxx猛交| 丝袜美腿亚洲色图| 26uuu欧美| 91免费版在线| 日韩电影在线观看电影| 久久久久九九视频| 色婷婷精品大在线视频| 另类调教123区| 日韩理论片网站| 日韩欧美一二三区| 99久久777色| 蜜臀久久99精品久久久画质超高清| 国产日韩三级在线| 欧美另类高清zo欧美| 国产成人综合自拍| 午夜电影一区二区| 日本一区二区三区国色天香| 在线看国产一区二区| 国产精品1区2区3区在线观看| 伊人开心综合网| 国产亚洲美州欧州综合国| 欧美日韩一区不卡| 成人午夜av电影| 老司机精品视频在线| 一区二区在线电影| 欧美激情一区二区三区全黄| 欧美一区二区视频在线观看2020 |