📄 truncate.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 + -