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

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

?? file.c

?? 這是一個SIGMA方案的PMP播放器的UCLINUX程序,可播放DVD,VCD,CD MP3...有很好的參考價值.
?? C
字號:
/* *  file.c * *  Copyright (C) 1995, 1996, 1997 by Paal-Kr. Engstad and Volker Lendecke *  Copyright (C) 1997 by Volker Lendecke * *  Please add a note about your changes to smbfs in the ChangeLog file. */#include <linux/sched.h>#include <linux/kernel.h>#include <linux/errno.h>#include <linux/fcntl.h>#include <linux/stat.h>#include <linux/mm.h>#include <linux/slab.h>#include <linux/pagemap.h>#include <linux/smp_lock.h>#include <asm/uaccess.h>#include <asm/system.h>#include <linux/smbno.h>#include <linux/smb_fs.h>#include "smb_debug.h"#include "proto.h"static intsmb_fsync(struct file *file, struct dentry * dentry, int datasync){	struct smb_sb_info *server = server_from_dentry(dentry);	int result;	VERBOSE("sync file %s/%s\n", DENTRY_PATH(dentry));	/*	 * The VFS will writepage() all dirty pages for us, but we	 * should send a SMBflush to the server, letting it know that	 * we want things synchronized with actual storage.	 *	 * Note: this function requires all pages to have been written already	 *       (should be ok with writepage_sync)	 */	smb_lock_server(server);	result = smb_proc_flush(server, dentry->d_inode->u.smbfs_i.fileid);	smb_unlock_server(server);	return result;}/* * Read a page synchronously. */static intsmb_readpage_sync(struct dentry *dentry, struct page *page){	char *buffer = kmap(page);	unsigned long offset = page->index << PAGE_CACHE_SHIFT;	int rsize = smb_get_rsize(server_from_dentry(dentry));	int count = PAGE_SIZE;	int result;	VERBOSE("file %s/%s, count=%d@%ld, rsize=%d\n",		DENTRY_PATH(dentry), count, offset, rsize);	result = smb_open(dentry, SMB_O_RDONLY);	if (result < 0) {		PARANOIA("%s/%s open failed, error=%d\n",			 DENTRY_PATH(dentry), result);		goto io_error;	}	do {		if (count < rsize)			rsize = count;		result = smb_proc_read(dentry->d_inode, offset, rsize, buffer);		if (result < 0)			goto io_error;		count -= result;		offset += result;		buffer += result;		dentry->d_inode->i_atime = CURRENT_TIME;		if (result < rsize)			break;	} while (count);	memset(buffer, 0, count);	flush_dcache_page(page);	SetPageUptodate(page);	result = 0;io_error:	kunmap(page);	UnlockPage(page);	return result;}/* * We are called with the page locked and we unlock it when done. */static intsmb_readpage(struct file *file, struct page *page){	int		error;	struct dentry  *dentry = file->f_dentry;	get_page(page);	error = smb_readpage_sync(dentry, page);	put_page(page);	return error;}/* * Write a page synchronously. * Offset is the data offset within the page. */static intsmb_writepage_sync(struct inode *inode, struct page *page,		   unsigned long offset, unsigned int count){	char *buffer = kmap(page) + offset;	int wsize = smb_get_wsize(server_from_inode(inode));	int result, written = 0;	offset += page->index << PAGE_CACHE_SHIFT;	VERBOSE("file ino=%ld, fileid=%d, count=%d@%ld, wsize=%d\n",		inode->i_ino, inode->u.smbfs_i.fileid, count, offset, wsize);	do {		if (count < wsize)			wsize = count;		result = smb_proc_write(inode, offset, wsize, buffer);		if (result < 0) {			PARANOIA("failed write, wsize=%d, result=%d\n",				 wsize, result);			break;		}		/* N.B. what if result < wsize?? */#ifdef SMBFS_PARANOIA		if (result < wsize)			PARANOIA("short write, wsize=%d, result=%d\n",				 wsize, result);#endif		buffer += wsize;		offset += wsize;		written += wsize;		count -= wsize;		/*		 * Update the inode now rather than waiting for a refresh.		 */		inode->i_mtime = inode->i_atime = CURRENT_TIME;		inode->u.smbfs_i.flags |= SMB_F_LOCALWRITE;		if (offset > inode->i_size)			inode->i_size = offset;	} while (count);	kunmap(page);	return written ? written : result;}/* * Write a page to the server. This will be used for NFS swapping only * (for now), and we currently do this synchronously only. * * We are called with the page locked and we unlock it when done. */static intsmb_writepage(struct page *page){	struct address_space *mapping = page->mapping;	struct inode *inode;	unsigned long end_index;	unsigned offset = PAGE_CACHE_SIZE;	int err;	if (!mapping)		BUG();	inode = mapping->host;	if (!inode)		BUG();	end_index = inode->i_size >> PAGE_CACHE_SHIFT;	/* easy case */	if (page->index < end_index)		goto do_it;	/* things got complicated... */	offset = inode->i_size & (PAGE_CACHE_SIZE-1);	/* OK, are we completely out? */	if (page->index >= end_index+1 || !offset)		return -EIO;do_it:	get_page(page);	err = smb_writepage_sync(inode, page, 0, offset);	SetPageUptodate(page);	UnlockPage(page);	put_page(page);	return err;}static intsmb_updatepage(struct file *file, struct page *page, unsigned long offset,	       unsigned int count){	struct dentry *dentry = file->f_dentry;	DEBUG1("(%s/%s %d@%ld)\n", DENTRY_PATH(dentry), 	       count, (page->index << PAGE_CACHE_SHIFT)+offset);	return smb_writepage_sync(dentry->d_inode, page, offset, count);}static ssize_tsmb_file_read(struct file * file, char * buf, size_t count, loff_t *ppos){	struct dentry * dentry = file->f_dentry;	ssize_t	status;	VERBOSE("file %s/%s, count=%lu@%lu\n", DENTRY_PATH(dentry),		(unsigned long) count, (unsigned long) *ppos);	status = smb_revalidate_inode(dentry);	if (status) {		PARANOIA("%s/%s validation failed, error=%Zd\n",			 DENTRY_PATH(dentry), status);		goto out;	}	VERBOSE("before read, size=%ld, flags=%x, atime=%ld\n",		(long)dentry->d_inode->i_size,		dentry->d_inode->i_flags, dentry->d_inode->i_atime);	status = generic_file_read(file, buf, count, ppos);out:	return status;}static intsmb_file_mmap(struct file * file, struct vm_area_struct * vma){	struct dentry * dentry = file->f_dentry;	int	status;	VERBOSE("file %s/%s, address %lu - %lu\n",		DENTRY_PATH(dentry), vma->vm_start, vma->vm_end);	status = smb_revalidate_inode(dentry);	if (status) {		PARANOIA("%s/%s validation failed, error=%d\n",			 DENTRY_PATH(dentry), status);		goto out;	}	status = generic_file_mmap(file, vma);out:	return status;}/* * This does the "real" work of the write. The generic routine has * allocated the page, locked it, done all the page alignment stuff * calculations etc. Now we should just copy the data from user * space and write it back to the real medium.. * * If the writer ends up delaying the write, the writer needs to * increment the page use counts until he is done with the page. */static int smb_prepare_write(struct file *file, struct page *page, 			     unsigned offset, unsigned to){	kmap(page);	return 0;}static int smb_commit_write(struct file *file, struct page *page,			    unsigned offset, unsigned to){	int status;	status = -EFAULT;	lock_kernel();	status = smb_updatepage(file, page, offset, to-offset);	unlock_kernel();	kunmap(page);	return status;}struct address_space_operations smb_file_aops = {	readpage: smb_readpage,	writepage: smb_writepage,	prepare_write: smb_prepare_write,	commit_write: smb_commit_write};/*  * Write to a file (through the page cache). */static ssize_tsmb_file_write(struct file *file, const char *buf, size_t count, loff_t *ppos){	struct dentry * dentry = file->f_dentry;	ssize_t	result;	VERBOSE("file %s/%s, count=%lu@%lu\n",		DENTRY_PATH(dentry),		(unsigned long) count, (unsigned long) *ppos);	result = smb_revalidate_inode(dentry);	if (result) {		PARANOIA("%s/%s validation failed, error=%Zd\n",			 DENTRY_PATH(dentry), result);		goto out;	}	result = smb_open(dentry, SMB_O_WRONLY);	if (result)		goto out;	if (count > 0) {		result = generic_file_write(file, buf, count, ppos);		VERBOSE("pos=%ld, size=%ld, mtime=%ld, atime=%ld\n",			(long) file->f_pos, (long) dentry->d_inode->i_size,			dentry->d_inode->i_mtime, dentry->d_inode->i_atime);	}out:	return result;}static intsmb_file_open(struct inode *inode, struct file * file){	int result;	struct dentry *dentry = file->f_dentry;	int smb_mode = (file->f_mode & O_ACCMODE) - 1;	lock_kernel();	result = smb_open(dentry, smb_mode);	if (result)		goto out;	inode->u.smbfs_i.openers++;out:	unlock_kernel();	return 0;}static intsmb_file_release(struct inode *inode, struct file * file){	lock_kernel();	if (!--inode->u.smbfs_i.openers)		smb_close(inode);	unlock_kernel();	return 0;}/* * Check whether the required access is compatible with * an inode's permission. SMB doesn't recognize superuser * privileges, so we need our own check for this. */static intsmb_file_permission(struct inode *inode, int mask){	int mode = inode->i_mode;	int error = 0;	VERBOSE("mode=%x, mask=%x\n", mode, mask);	/* Look at user permissions */	mode >>= 6;	if ((mode & 7 & mask) != mask)		error = -EACCES;	return error;}struct file_operations smb_file_operations ={	llseek:		generic_file_llseek,	read:		smb_file_read,	write:		smb_file_write,	ioctl:		smb_ioctl,	mmap:		smb_file_mmap,	open:		smb_file_open,	release:	smb_file_release,	fsync:		smb_fsync,};struct inode_operations smb_file_inode_operations ={	permission:	smb_file_permission,	revalidate:	smb_revalidate_inode,	setattr:	smb_notify_change,};

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩国产高清一区二区| 制服丝袜av成人在线看| 亚洲一二三四久久| 久久免费美女视频| 欧美妇女性影城| 成人激情电影免费在线观看| 丝袜a∨在线一区二区三区不卡| 久久男人中文字幕资源站| 欧美日韩第一区日日骚| 91在线观看视频| 国产一区二区三区四| 亚洲一区影音先锋| 中文字幕五月欧美| 久久久精品天堂| 日韩午夜在线观看视频| 欧美手机在线视频| 91啪在线观看| 日韩精品一区二区三区视频播放 | 日本道免费精品一区二区三区| 精品一区二区三区不卡| 天天色 色综合| 一区二区三区精品视频在线| 中文字幕在线观看一区二区| 久久综合九色综合欧美98| 制服丝袜成人动漫| 欧美日本国产一区| 欧美天天综合网| 色网站国产精品| av电影一区二区| 国产成人免费高清| 国产精品夜夜爽| 国内精品在线播放| 九九九久久久精品| 久久国产尿小便嘘嘘尿| 美女视频免费一区| 美女精品自拍一二三四| 欧美aaaaa成人免费观看视频| 亚洲成人精品在线观看| 亚洲国产视频a| 午夜婷婷国产麻豆精品| 五月天精品一区二区三区| 亚洲一二三专区| 午夜精品123| 蜜桃av一区二区在线观看| 五月天欧美精品| 美女尤物国产一区| 国产自产2019最新不卡| 国产91对白在线观看九色| 成人av资源站| 在线一区二区观看| 欧美福利视频一区| 欧美成人艳星乳罩| 久久久久成人黄色影片| 中文字幕在线观看不卡视频| 亚洲精品国产视频| 亚洲成人av一区二区三区| 亚洲bt欧美bt精品777| 日韩精品91亚洲二区在线观看| 日韩成人一区二区三区在线观看| 日本美女一区二区| 国产一区二区成人久久免费影院 | xfplay精品久久| 中文字幕二三区不卡| 樱桃视频在线观看一区| 免费观看成人av| 懂色av中文字幕一区二区三区| 99久久精品一区| 欧美日韩精品欧美日韩精品| 日韩一级在线观看| 国产精品三级在线观看| 亚洲不卡在线观看| 国产精品一二三四区| 色哟哟一区二区在线观看| 欧美日韩小视频| 久久久久久久久伊人| 亚洲精品高清视频在线观看| 日本色综合中文字幕| 粉嫩av一区二区三区| 欧美色精品在线视频| wwww国产精品欧美| 亚洲一级二级在线| 国产福利一区在线观看| 欧美日韩中文一区| 国产亚洲婷婷免费| 亚洲五月六月丁香激情| 国产精品亚洲一区二区三区在线 | 26uuu亚洲婷婷狠狠天堂| 亚洲你懂的在线视频| 精品一区二区三区欧美| 色婷婷久久久综合中文字幕| 精品日本一线二线三线不卡| 亚洲免费电影在线| 国产精品1024久久| 欧美巨大另类极品videosbest | 欧美丰满少妇xxxxx高潮对白| 国产亚洲婷婷免费| 日本最新不卡在线| 91在线小视频| 国产亚洲精品aa| 日韩精品电影一区亚洲| 91福利视频网站| 国产精品无码永久免费888| 日韩成人午夜电影| 色综合中文字幕国产 | 这里只有精品电影| 亚洲另类色综合网站| 国产精品一卡二卡| 欧美一级免费大片| 亚洲午夜视频在线| 99精品视频一区二区三区| 久久久一区二区三区| 日韩国产欧美在线视频| 欧美在线一区二区三区| 国产精品久久久久9999吃药| 久久福利视频一区二区| 在线播放91灌醉迷j高跟美女| 亚洲精品国产成人久久av盗摄| 国产99久久久精品| 久久女同精品一区二区| 精品一区二区成人精品| 欧美一三区三区四区免费在线看| 亚洲一本大道在线| 在线观看三级视频欧美| 国产精品剧情在线亚洲| 成人午夜电影小说| 欧美韩国日本不卡| 国产精品18久久久久久久久| 日韩欧美中文字幕公布| 麻豆一区二区三| 日韩写真欧美这视频| 麻豆视频观看网址久久| 日韩精品一区国产麻豆| 美女尤物国产一区| 26uuu久久综合| 国产一区二区美女| 久久亚洲二区三区| 国产成a人亚洲精品| 国产精品视频看| 99国产精品久久久| 伊人婷婷欧美激情| 欧美探花视频资源| 人人狠狠综合久久亚洲| 日韩情涩欧美日韩视频| 韩国理伦片一区二区三区在线播放 | 成人免费观看av| 亚洲三级理论片| 91久久免费观看| 午夜在线电影亚洲一区| 欧美精品久久久久久久多人混战| 日韩精品久久理论片| 精品美女在线观看| 国产成人精品三级麻豆| 国产精品乱码妇女bbbb| 色吧成人激情小说| 偷拍亚洲欧洲综合| 久久综合九色综合97婷婷| 国产成人精品亚洲777人妖| 亚洲天堂av老司机| 欧美日韩精品一区二区| 精品伊人久久久久7777人| 国产女主播在线一区二区| 色综合天天综合网天天狠天天| 一区二区三区欧美| 欧美成人a∨高清免费观看| 成人三级伦理片| av中文字幕亚洲| 午夜精品久久久久久不卡8050| 欧美电影免费观看高清完整版| 国产suv一区二区三区88区| 亚洲欧美日韩在线不卡| 欧美精品第1页| 国产传媒久久文化传媒| 伊人性伊人情综合网| 精品欧美一区二区久久| 色综合天天在线| 美女性感视频久久| 日韩理论片在线| 日韩精品一区二区三区swag| 成人app在线观看| 免费精品视频在线| 亚洲欧洲国产专区| 日韩色视频在线观看| 99精品视频在线观看| 久久精品72免费观看| 亚洲色图另类专区| 欧美v日韩v国产v| 在线观看日韩国产| 国产99精品国产| 日韩电影一区二区三区| 亚洲天堂av一区| 国产日韩精品一区二区浪潮av | 久久99精品久久久久| 一区二区三区高清不卡| 久久午夜电影网| 91精品国产免费| 色综合亚洲欧洲| 国产成人鲁色资源国产91色综| 亚洲va中文字幕| 亚洲人成网站影音先锋播放| 久久日韩精品一区二区五区|