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

📄 truncate.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"
/////////////////////////////////////////////////

void free_ind(int dev,int block){	struct buffer_head * bh;	unsigned long      * p;	int i;	if (!block)		return;	if ((bh = bread(dev,block,0)) != NULL){		p = (unsigned long *) bh->b_data;		for (i = 0 ; i < 256 ; i++ , p++)			if (*p){				free_block(dev , *p);
				(*p) = 0;
			}
		bh->b_dirt = 1;		brelse(bh);	}	free_block(dev,block);
	return;}void free_dind(int dev,int block){	struct buffer_head * bh;	unsigned long      * p;	int i;	if (!block)		return;	if ((bh = bread(dev , block, 0)) != NULL){		p = (unsigned long *) bh->b_data;		for (i = 0 ; i < 256 ; i++ , p++)			if (*p){				free_ind(dev , *p);
				(*p) = 0;
			}
		bh->b_dirt = 1;		brelse(bh);	}	free_block(dev , block);
	return;}void truncate(struct m_inode * inode){	int i;	if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode)))		return;	for (i = 0 ; i < 8 ; i++)		if (inode->i_zone[i]) {			free_block(inode->i_dev,inode->i_zone[i]);			inode->i_zone[i]=0;		}	free_ind(inode->i_dev,inode->i_zone[8]);	free_dind(inode->i_dev,inode->i_zone[9]);	inode->i_zone[8] = 0;
	inode->i_zone[9] = 0;	inode->i_size    = 0;	inode->i_mtime   = file_datetime;
	inode->i_dirt    = 1;
	return;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -