⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msdos_sys_delete.c

📁 阿基米德操作系统的源代码
💻 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(&current_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 + -