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.