Пример #1
0
/*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;
}
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
0
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;
}