get_dir_listing now returs array of dir_entries
This commit is contained in:
parent
f612cea891
commit
056f13c675
42
fs/ext2.c
42
fs/ext2.c
@ -225,8 +225,8 @@ void* read_inode_contents(inode* node,FILE* f,int num) {
|
|||||||
return (void*)data;
|
return (void*)data;
|
||||||
}
|
}
|
||||||
|
|
||||||
char** get_dir_listing(uint32_t inode_num,FILE* f,int num) {
|
dir_entry* get_dir_listing(uint32_t inode_num,FILE* f,int num) {
|
||||||
char** names=malloc(sizeof(char*)*100);
|
dir_entry* entries=malloc(sizeof(dir_entry)*100);
|
||||||
int num_entries_used=0;
|
int num_entries_used=0;
|
||||||
int max_len=100;
|
int max_len=100;
|
||||||
inode* dir_inode=read_inode(inode_num,f,num);
|
inode* dir_inode=read_inode(inode_num,f,num);
|
||||||
@ -240,28 +240,30 @@ char** get_dir_listing(uint32_t inode_num,FILE* f,int num) {
|
|||||||
}
|
}
|
||||||
if(num_entries_used==max_len) {
|
if(num_entries_used==max_len) {
|
||||||
max_len+=100;
|
max_len+=100;
|
||||||
names=realloc(names,sizeof(char*)*max_len);
|
entries=realloc(entries,sizeof(dir_entry)*max_len);
|
||||||
}
|
}
|
||||||
names[num_entries_used]=malloc(current_entry->name_len+1);
|
entries[num_entries_used].inode=current_entry->inode;
|
||||||
names[num_entries_used]=current_entry->file_name;
|
entries[num_entries_used].type=current_entry->file_type;
|
||||||
names[num_entries_used][(int)current_entry->name_len]='\0';
|
entries[num_entries_used].name=malloc(current_entry->name_len+1);
|
||||||
|
strcpy(entries[num_entries_used].name,current_entry->file_name);
|
||||||
|
entries[num_entries_used].name[(int)current_entry->name_len]='\0';
|
||||||
num_entries_used++;
|
num_entries_used++;
|
||||||
tot_size+=current_entry->rec_len;
|
tot_size+=current_entry->rec_len;
|
||||||
current_entry=(ext2_dir_entry*)(((uint32_t)current_entry)+current_entry->rec_len);
|
current_entry=(ext2_dir_entry*)(((uint32_t)current_entry)+current_entry->rec_len);
|
||||||
}
|
}
|
||||||
if(num_entries_used==max_len) {
|
if(num_entries_used==max_len) {
|
||||||
max_len+=1;
|
max_len+=1;
|
||||||
names=realloc(names,sizeof(char*)*max_len);
|
entries=realloc(entries,sizeof(dir_entry)*max_len);
|
||||||
}
|
}
|
||||||
names[num_entries_used]=NULL;
|
entries[num_entries_used].inode=0;
|
||||||
return names;
|
return entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
void free_dir_listing(char** names) {
|
void free_dir_listing(char** names) {
|
||||||
for(int i=0;names[i]!=NULL;i++) {
|
// for(int i=0;names[i]!=NULL;i++) {
|
||||||
free(names[i]);
|
// free(names[i]);
|
||||||
}
|
// }
|
||||||
free(names);
|
// free(names);
|
||||||
}
|
}
|
||||||
|
|
||||||
ext2_dir_entry* read_dir_entry(uint32_t inode_num,uint32_t dir_entry_num,FILE* f,int num) {
|
ext2_dir_entry* read_dir_entry(uint32_t inode_num,uint32_t dir_entry_num,FILE* f,int num) {
|
||||||
@ -286,19 +288,15 @@ ext2_dir_entry* read_dir_entry(uint32_t inode_num,uint32_t dir_entry_num,FILE* f
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint32_t inode_for_fname(uint32_t dir_inode_num, char* name, char* got_inode,FILE* f,int num) {
|
uint32_t inode_for_fname(uint32_t dir_inode_num, char* name, char* got_inode,FILE* f,int num) {
|
||||||
uint32_t node=0;
|
|
||||||
*got_inode=0;
|
*got_inode=0;
|
||||||
char** names=get_dir_listing(dir_inode_num,f,num);
|
dir_entry* entries=get_dir_listing(dir_inode_num,f,num);
|
||||||
for(int i=0;names[i]!=NULL;i++) {
|
for(int i=0;entries[i].inode!=0;i++) {
|
||||||
if (strcmp(names[i],name)==0) {
|
if (strcmp(entries[i].name,name)==0) {
|
||||||
dir_entry* entry=read_dir_entry(dir_inode_num,i,f,num);
|
|
||||||
node=entry->inode;
|
|
||||||
*got_inode=1;
|
*got_inode=1;
|
||||||
break;
|
return entries[i].inode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//free_dir_listing(names);
|
return 0;
|
||||||
return node;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char* fname_for_inode(uint32_t dir_inode_num, uint32_t inode_num,FILE* f,int num) {
|
char* fname_for_inode(uint32_t dir_inode_num, uint32_t inode_num,FILE* f,int num) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user