char *num_to_s(int num) //prend un nombre et le transforme en string { int original_num=num; char *s; int i; int count; int sign=0; for(count=0;num!=0;count++) { num=num/10; } num=original_num; if (num<0) { sign=1; count++; num=num*-1; } //la count = le nombre de "caractère" dans notre nombre s=prep_str(count); for(i=0;i<count;i++) { s[count-i-1]=num%10+'0'; num=num/10; } if (sign) { s[0]='-'; } return s; }
fs_node_t* parse_dir(char* dir){ fs_node_t* node = mk_empty_dnode(); fs_node_t* parent = node; char* fat_buff = (char*) fat_load_full(dir); char* str = prep_str(fat_buff); ASSERT(strcmp(str, "DEEPFAT") == 0); str = next_str(str); ASSERT(strcmp(str, "DEEPDIR") == 0); str = next_str(str); while(strcmp(str, "ENDDIR") != 0){ char* ent = str; str = next_str(ent); fs_node_t* sub; /* vga_puts("\t* creating '"); vga_puts(str); vga_puts("'\n"); */ if(strcmp(ent, "DIR") == 0){ char* name = str; str = next_str(str); sub = parse_dir(fat_name_conv(str)); strmov(sub->name, name); strmov(sub->dos_name, str); fat_dir_t* file = fat_dir_search(fat_name_conv(str)); sub->inode = file->cluster_low; sub->length = file->bytes; sub->flags = FS_DIRECTORY; //Callbacks for basic VFS manipulation sub->open = df_open; sub->close = df_close; sub->readdir = readdir_generic; sub->finddir = df_finddir; } else if(strcmp(ent, "FIL") == 0){ char* name = str; str = next_str(str); sub = mk_empty_fnode(); strmov(sub->dos_name, str); fat_dir_t* file = fat_dir_search(fat_name_conv(str)); strmov(sub->name, name); sub->inode = file->cluster_low; sub->length = file->bytes; } else{ PANIC("bad deepFAT directory entry"); } str = ent; str = next_str(str); str = next_str(str); str = next_str(str); if(parent->holds == NULL){ parent->holds = sub; node = sub; } else{ node->link = sub; node = sub; } } kfree(fat_buff); return parent; }