the Salvage API


Typical usage

#include"adflib.h"


int main()
{
    struct List *list, *cell;

    /* initialization */    
    /* the device and volume are mounted */

    cell = list = adfGetDelEnt(vol);
    while(cell) {
        block =(struct Block*) cell->content;
        printf("%s %d %d %ld\n",block->name,block->type,block->secType,
            block->sect);
        cell = cell->next;
    }
    /* we noted the entry 883 and 885 */
    adfFreeDelList(list);

    /* 883 is a file */
    if (adfCheckEntry(vol,883,0)==RC_OK)
        adfUndelEntry(vol,vol->curDirPtr,883); 

    /* 885 is a directory */
    if (adfCheckEntry(vol,885,0)==RC_OK)
        adfUndelEntry(vol,vol->curDirPtr,885);
 
    /* unmounts done */
    /* cleanup */
}

adfGetDelEnt()

Syntax

struct List* adfGetDelEnt(struct Volume *vol)

Description

Returns the list of the files/directories that MIGHT be undeleted. The entries must be checked before !

See adfFreeDelList() to free this list.
See adfCheckEntry() to check if the entry could be undeleted.

Internals

Scans all the blocks of the volume to find directory blocks and file header blocks that are not allocated in the bitmap.


adfCheckEntry()

Syntax

RETCODE adfCheckEntry(struct Volume* vol, SECTNUM nSect, int level)

Description

Checks if an entry (directory or file) could be undeleted.

The 'level' argument is not used yet. Could be set to 0.


adfUndelEntry()

Syntax

RETCODE adfUndelEntry(struct Volume* vol, SECTNUM parent, SECTNUM nSect)

Description

Undelete a directory or a file. The parent directory of an entry must exist.

Internals

Add the entry first block pointer in the parent directory list and allocated the related blocks in the bitmap.

void adfFreeDelList(struct List* list)

Syntax

void adfFreeDelList(struct List* list)

Description

Free the list of deleted entries.