/*Delete a inode in the memory*/ int delete_inode(unsigned int inumber) { /*Free the direct blocs*/ int i; struct inode_s inode; read_inode(inumber,&inode); free_blocs(inode.direct,NDIRECT); /*Free the indirect blocs if needed*/ if(inode.indirect) { unsigned bloc[NBBLOCPARBLOC]; read_nbloc(CURRENT_VOLUME,inode.indirect, (unsigned char *) &bloc, NBBLOCPARBLOC*sizeof(unsigned)); free_blocs(bloc,NBBLOCPARBLOC); free_bloc(inode.indirect); } /*Free the double indirect blocs if needed*/ if(inode.two_indirect) { unsigned bbloc[NBBLOCPARBLOC]; read_nbloc(CURRENT_VOLUME,inode.two_indirect,(unsigned char *) &bbloc,NBBLOCPARBLOC*sizeof(unsigned)); for(i=0; i<NBBLOCPARBLOC; i++) { if(bbloc[i]) { unsigned bbbloc[NBBLOCPARBLOC]; read_nbloc(CURRENT_VOLUME,inode.indirect,(unsigned char *) &bbbloc, NBBLOCPARBLOC*sizeof(unsigned)); free_blocs(bbbloc,NBBLOCPARBLOC); free_bloc(bbloc[i]); } } free_bloc(inode.two_indirect); } /*Free the bloc with the inode */ free_bloc(inumber); return 1; }
int delete_inode(unsigned int inumber) { struct inode_s inode; read_inode(inumber, &inode); free_blocs(inode.blocs_directs, NB_DIRECTS); unsigned int bloc[NB_BLOCS_BY_BLOC]; /* A voir si utile */ int i; if(inode.blocs_indirect) { read_bloc(current_volume, inumber, (unsigned char *)inode.blocs_indirect); free_blocs(inode.blocs_directs, NB_BLOCS_BY_BLOC); free_bloc(inode.blocs_indirect); } if(inode.blocs_double_indirect) { read_bloc(current_volume, inumber, (unsigned char *)inode.blocs_double_indirect); for(i = 0; i < NB_BLOCS_BY_BLOC; i++) { unsigned int tmp[NB_BLOCS_BY_BLOC]; read_bloc(current_volume, inode.blocs_double_indirect, (unsigned char *)tmp); free_blocs(tmp, NB_BLOCS_BY_BLOC); free_bloc(inode.blocs_double_indirect); } free_blocs(bloc, NB_BLOCS_BY_BLOC); } free_bloc(inode.blocs_double_indirect); free_bloc(inumber); return inumber; }
int delete_inode(unsigned int inumber) { struct inode_s inode; int i; read_inode(inumber,&inode); /* ici on libère les directs de l'inode */ free_blocs(inode.direct,NDIRECT); if(inode.indirect) { /* si c'est différent de zéro = il existe */ unsigned int bloc[NBPB]; read_blocn(current_volume,inode.indirect,(unsigned char *)bloc,NBPB*sizeof(unsigned)); free_blocs(bloc,NBPB); free_bloc(inode.indirect); } if(inode.two_indirect) { read_blocn(current_volume, inumber, (unsigned char *)inode.two_indirect,NBPB*sizeof(unsigned)); for(i = 0; i < NBPB; i++) { unsigned int tmp[NBPB]; read_blocn(current_volume, inode.two_indirect, (unsigned char *)tmp,NBPB*sizeof(unsigned)); free_blocs(tmp, NBPB); } free_bloc(inode.two_indirect); //free_blocs(inode,NBPB); } free_bloc(inode.two_indirect); free_bloc(inumber); return inumber; }
int delete_inode(unsigned int inumber) { free_blocs(unsigned int bloc[],unsigned int n); // free_blocs(ine.indirect_direct,indirect); whaaat ? if(inode.inode_indirect) { unsigned bloc[NBPB]; read_blocn(inode.indirect,bloc,NBPB*sizeof(unsigned)); free_blocs(bloc,&NBPB); free_bloc(inode.indirect); } if(inode.two_indirect) { read_blocn(current_vol, inumber, (unsigned char *)inode.two_indirect); for(i = 0; i < NBPB; i++) { unsigned int tmp[NBPB]; read_blocn(current_vol, inode.two_indirect, (unsigned char *)tmp); free_blocs(tmp, NBPB); free_bloc(inode.two_indirect); } free_blocs(bloc, NB_BLOCS_BY_BLOC); } free_bloc(inode.two_indirect); free_bloc(inumber); return inumber; }