📄 msdos_sys_delete.c
字号:
///////////////////////////////////////////////////////////////////////////////////////////////
#include "general.h"
#include "s_isdirreg.h"
#include "hd_info_struct.h"
#include "dir_entry.h"
#include "msdos_dir_entry.h"
#include "d_inode.h"
#include "m_inode.h"
#include "buffer_head.h"
#include "fat_cache.h"
#include "file.h"
#include "hd_request_struct.h"
#include "super_block.h"
#include "common_head.h"
///////////////////////////////////////////////////////////////////////////////////////////////
int msdos_sys_delete(const char * name){ struct m_inode * temp_dir, * temp_inode; struct buffer_head * temp_bh; struct msdos_dir_entry * temp_de;
const char * basename;
unsigned long temp_namelen, temp_idev, temp_inr;
if (!(temp_dir = msdos_dir_namei(name,&temp_namelen,&basename)))
return -1;
if (!change_current_name() || !(temp_bh = msdos_find_entry(temp_dir,&temp_de)))
{
msdos_iput(temp_dir);
return -1;
}
current_dir_entry = *temp_de;
temp_idev = 0;
temp_inr = temp_bh->b_blocknr * BLOCK_SIZE + ((unsigned long)temp_de) - ((unsigned long)(temp_bh->b_data));
if (!S_MSDOS_ISREG(current_dir_entry.dir_mode) || !(temp_inode = msdos_iget(¤t_dir_entry,temp_inr,0)))
{
srelse(temp_bh);
msdos_iput(temp_dir);
return -1;
}
if (temp_inode->i_count > 1)
{
msdos_iput(temp_inode);
srelse(temp_bh);
msdos_iput(temp_dir);
return -1;
}
fat_free(temp_inode,0);
temp_inode->i_nlinks = 0;
temp_inode->i_dirt = 1;
msdos_iput(temp_inode);
srelse(temp_bh);
msdos_iput(temp_dir);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -