dir_fat_aux
2017-03-22 10:39:01 0 举报
dir_fat_aux是一个用于文件系统的辅助目录,它通常位于根目录下的”/etc/fstab”文件中。该目录包含了与文件系统相关的一些额外信息和配置参数,主要用于存储文件系统的挂载选项、备份标志、卷标等元数据。通过读取dir_fat_aux中的这些信息,操作系统能够更好地管理和维护文件系统的稳定性和安全性。在Linux系统中,dir_fat_aux是专门用于支持FAT文件系统的一个特殊目录,它提供了对FAT文件系统的一些扩展功能的支持,例如文件名长度限制、长文件名支持等。通过使用dir_fat_aux,用户可以更好地利用FAT文件系统的特性和功能,提高文件系统的性能和兼容性。
作者其他创作
大纲/内容
没有相关属性
保存长文件名的第一个目录项de_initial=de;
readdirsize+=direntrysize;
否
不是0F属性s-attr != ATTR_EXT
是
offset = slot * 13;
end
是卷标(de-attr & ATTR_VOLUME)!=0
保存当前文件new_file-prev=current_file;
strlen(new_file-name) != 0 && localtime((time_t *)&new_file-stat.st_mtime)!=NULL
slots 20 || slots==0
slot == 0
current_file!=NULL
dir_list=new_file;
短文件目录名de=(const struct msdos_dir_entry*)buffer;
长文件名的目录项数long_slots++;
超出范围de=(const void*)(buffer+size)
slot = slots;
slot--;
ds = (const struct msdos_dir_slot *) de;
下一个目录项ds++;
记录读取字节readdirsize+=direntrysize;
start
设置状态status = FLAG_PARENT_LIST_DELETED;
FLAG_PARENT_LIST_DELETED¶m
检查是否有非法字符
初始化工作dir_list=NULL;current_file=NULL;curDirInodeHighPart = 0;prevInodeLowPart = 0;\tunsigned int prevInodeNum=0int utf8=1;\tfile_data_t * recyclebin_file = NULL;
status=0;
alias_checksum = ds-alias_checksum;
不是0F属性ds-attr != ATTR_EXT
unicode[0]='_';
是0F属性de-attr == ATTR_EXT
具有删除标志de-name[0] != (int8_t) DELETED_FLAG
超出范围de=(const void*)(buffer+size)
recyclebin_file
修复被删除文件的文件名
new_file-prev=NULL;
没被删除的长文件名目录项de-attr == ATTR_EXT
long_slots=0;
最多64个(id & 0x40)==0)
unicode[0]='.';
获取目录项
(ds-id & 0x40)!=0
校验和不一致ds-alias_checksum != alias_checksum
校验和alias_checksum = ds-alias_checksum;
(de-attr&ATTR_DIR)==ATTR_DIR &&\t\t\t\t((dir_list==NULL && unicode[1]=='\\0') ||(dir_list!=NULL && dir_list-next==NULL && unicode[1]=='.' && unicode[2]=='\\0'))
校验和不一致
((de-attr != ATTR_EXT)||(long_slots!=0)) &&(!de-attr & ATTR_VOLUME)
unicode[offset + 13] = 0;
没有相关属性且目录项第一字节为0
inode&=0xfff;status &= 0xfff;
文件大小new_file-stat.st_size=le32(de-size);
recyclebin_file = new_file;
设置状态status|=FILE_STATUS_DELETED;
FAT16(param&FLAG_LIST_MASK16)!=0
long_slots = 0;
短文件名目录项入口
被删除文件,且存在节点,各文件名存在((int8_t) unicode[0] == (int8_t) DELETED_FLAG) &&\t\t\t((param & FLAG_LIST_DELETED)==FLAG_LIST_DELETED) &&\t\t\tinode!=0 && de-name[1]!='\\0' &&\t\t\tde-name[2]!='\\0' && de-name[3]!='\\0' &&\t\t\tde-name[4]!='\\0' && de-name[5]!='\\0' &&\t\t\tde-name[6]!='\\0' && de-name[7]!='\\0'
从第一个长文件名开始往下遍历ds = (const struct msdos_dir_slot *) de_initial;
长文件名的序列号,第一个为1,递增id = ds-id;
inode&=0xfffffff; status &= 0xfffffff;
dir_list = recyclebin_file;
long_slots = 0;unicode[0]=0;
current_file-next = recyclebin_file;
取下一文件current_file-next=new_file;
FAT12(param&FLAG_LIST_MASK12)!=0
没有文件名unicode[0]==0
属性为0F表示长文件名目录项且有删除标志de-attr == ATTR_EXT &&de-name[0] == (int8_t) DELETED_FLAG &&((param & FLAG_LIST_DELETED)==FLAG_LIST_DELETED
unicode[j]=0;
不是被删除的unicode[0] != (wchar_t) DELETED_FLAG
unicode[j++]='.';for(i=0;(iext[i]!=' ');i++)unicode[j++]=de-ext[i];
保存文件名for(i=0;(iname[i]!=' ');i++)unicode[j++]=de-name[i];
释放的目录项且属性不为卷标IS_FREE(de-name) || ((de-attr & ATTR_VOLUME)!=0)
id & ~0x40;
状态new_file-status = status;
节点new_file-st_inode = inode;
设置删除状态status|=FILE_STATUS_DELETED;
存在扩展名
短文件的文件名目录项long_slots==0 && de-attr != ATTR_EXT)
具有相关属性且文件名第一字节不为0
current_file == NULL
取下一目录项de++;
long_slots = slots;
取下一个目录项de++;
倒序恢复
slot=long_slots;
inode&=0xffff;status &= 0xffff;
计算文件内容起始簇号inode=(le16(de-starthi)start);
将文件转换为utf8并且存储起来
de-ext[0]!=' '
current_file=new_file;
下一目录项de++;
(ds-id & ~0x40) != slot
获取目录项ds = (const struct msdos_dir_slot *) de;
slot!=0;
de-attr & (~ATTR_EXT_MASK)
unicode[long_slots * 13] = 0;
收藏
收藏
0 条评论
下一页