亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1002 | 回復(fù): 0
打印 上一主題 下一主題

linux 1.0 內(nèi)核注解 linux/fs/ext2/symlink.c [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2009-05-29 18:25 |只看該作者 |倒序瀏覽
/********************************************
*Created By: Prometheus
*Date        : 2009-5-29   
********************************************/
/*
*  linux/fs/ext2/symlink.c
*
*  Copyright (C) 1992, 1993, 1994  Remy Card (
card@masi.ibp.fr
)
*                                  Laboratoire MASI - Institut Blaise Pascal
*                                  Universite Pierre et Marie Curie (Paris VI)
*
*  from
*
*  linux/fs/minix/symlink.c
*
*  Copyright (C) 1991, 1992  Linus Torvalds
*
*  ext2 symlink handling code
*/
#include
#include
#include
#include
#include
#include
static int ext2_readlink (struct inode *, char *, int);
static int ext2_follow_link (struct inode *, struct inode *, int, int,
          struct inode **);
/*
* symlinks can't do much...
*/
struct inode_operations ext2_symlink_inode_operations = {
NULL,   /* no file-operations */
NULL,   /* create */
NULL,   /* lookup */
NULL,   /* link */
NULL,   /* unlink */
NULL,   /* symlink */
NULL,   /* mkdir */
NULL,   /* rmdir */
NULL,   /* mknod */
NULL,   /* rename */
ext2_readlink,  /* readlink */
ext2_follow_link, /* follow_link */
NULL,   /* bmap */
NULL,   /* truncate */
NULL   /* permission */
};
static int ext2_follow_link(struct inode * dir, struct inode * inode,
       int flag, int mode, struct inode ** res_inode)
{
int error;
struct buffer_head * bh = NULL;
char * link;
*res_inode = NULL;
if (!dir) {
  dir = current->root;
  dir->i_count++;
}
if (!inode) {
  iput (dir);
  return -ENOENT;
}
if (!S_ISLNK(inode->i_mode)) {
  iput (dir);
  *res_inode = inode;
  return 0;
}
//To prevent symbolic links linking back to themselves and causing an infinite loop
//in the kernel, the kernel stops after a certain number of symbolic links have been
//followed with ELOOP. This doesn't necessarily mean that there is a loop, but that
//there are too many symbolic links encountered.
if (current->link_count > 5) {
  iput (dir);
  iput (inode);
  return -ELOOP;
}
if (inode->i_blocks) { //文件塊數(shù),可能說明文件可以被塊表式,可塊讀
    //關(guān)于這里的b_data和i_data有什么關(guān)系,現(xiàn)在不曉得··
  if (!(bh = ext2_bread (inode, 0, 0, &error))) {
   iput (dir);
   iput (inode);
   return -EIO;
  }
  link = bh->b_data;
} else
  link = (char *) inode->u.ext2_i.i_data;
  
//link中的數(shù)據(jù)保存了目錄名,這里用來
current->link_count++;
error = open_namei (link, flag, mode, res_inode, dir);
current->link_count--;

iput (inode);
if (bh)
  brelse (bh);
return error;
}
static int ext2_readlink (struct inode * inode, char * buffer, int buflen)
{
struct buffer_head * bh = NULL;
char * link;
int i, err;
char c;
if (!S_ISLNK(inode->i_mode)) {
  iput (inode);
  return -EINVAL;
}
if (buflen > inode->i_sb->s_blocksize - 1) //最多處理一塊
  buflen = inode->i_sb->s_blocksize - 1;
if (inode->i_blocks) {
  bh = ext2_bread (inode, 0, 0, &err);
  if (!bh) {
   iput (inode);
   return 0;
  }
  link = bh->b_data;
}
else
  link = (char *) inode->u.ext2_i.i_data;
i = 0;
while (i

文檔地址:http://blogimg.chinaunix.net/blog/upfile2/090529182341.pdf

本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u3/90306/showart_1947663.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP