the Directory API


Data structures


/* entry types */

#define ST_DIR     2
#define ST_FILE   -3


struct Entry{
    int type;              /* type of the entry */
    char *name;            /* name */
    SECTNUM sector;        /* sector pointer */
    char *comment;         /* optional comment */
    unsigned long size;    /* file size, 0 for a directory */
    long access;           /* RWEDAPSH access rights */

    int year, month, day;  /* date */
    int hour, min, sec;    /* hour */
}


/* general purpose list used to stored directory entries */
struct List{
    void *content;         /* Filled with struct Entry* type */
    struct List *subdir;   /* If the cell content is a dir, its entries list */
                           /*  is stored here, else filled with NULL   */
    struct List *next;     /* Next cell */
}

adfGetDirEnt()

Syntax

struct List* adfGetDirEnt(struct Volume* vol, SECTNUM dir )
equivalent to
struct List* adfGetRDirEnt(struct Volume* vol, SECTNUM dir, FALSE )

Description

Returns a linked list which contains the entries of one directory.

Return values

The list, NULL in case of error.

Examples

struct List *list, *cell;
struct Entry *entry;

/* saves the head of the list */
cell = list = adfGetDirEnt(vol,vol->curDirPtr);

/* while cell->next is NULL, the last cell */
while(cell) {
    entry = (struct Entry*)cell->content;
    printf("%s %ld\n", entry->name, entry->sector);
    cell = cell->next;
}

/* frees the list and the content */
adfFreeDirList(list);




adfGetRDirEnt()

Syntax

struct List* adfGetRDirEnt(struct Volume* vol, SECTNUM dir, BOOL recursive )

Description

Returns a linked list which contains the entries of one directory.

Return values

The list, NULL in case of error.

Examples


#define TRUE 1

int main()
{

struct List *list, *cell;
struct Entry *entry;

...

/* saves the head of the list */
cell = list = adfGetRDirEnt(vol,vol->curDirPtr,TRUE);

/* prints the tree */
printTree(cell);

/* frees the list and the content */
adfFreeDirList(list);

...

}

/* print the directories tree. recursive */
printTree(struct List* tree)
{
    while(tree) {
        entry = (struct Entry*)cell->content;
        printf("%s %ld\n", entry->name, entry->sector);
        if (tree->subdir!=NULL)
            printTree(tree->subdir)
        tree = tree->next;
    }
}



adfChangeDir()

Syntax

RETCODE adfChangeDir(struct Volume* vol, char *dirName)

Description

Change the current working directory to the new one (dirName).

Return values

RC_OK, something different in case of error.


adfParentDir()

Syntax

RETCODE adfParentDir(struct Volume* vol)

Description

Change the current working directory to its parent directory. If the current directory is the root of the filesystem ('/'), nothing happens.

Return values

RC_OK, something different in case of error.


adfCreateDir()

Syntax

RETCODE adfCreateDir(struct Volume* vol, SECTNUM parent, char* dirName)

Description

Creates a new directory (dirName) into the specified directory (parent).

Return values

RC_OK, something different in case of error.


adfRemoveEntry()

Syntax

RETCODE adfRemoveEntry(struct Volume *vol, SECTNUM parent, char *name)

Description

Removes a entry (a file or an empty directory) from one directory (parent).

Return values

RC_OK, something different in case of error.


adfFreeDirList()

Syntax

void adfFreeDirList(struct List* list)

Description

Frees a linked list or a tree of directory entries.


adfAccess2String()

Syntax

char* adfAccess2String(long access)

Description

Converts the access rights from long to char*.

Return values

A C string which represents the access rights.


adfRenameEntry()

Syntax

RETCODE adfRenameEntry(struct Volume* vol, SECTNUM oldDir, char* old, SECTNUM newDir, char* new)

Description

Changes the name of the entry old located in the oldDir into the name new, located into the newDir directory.


printEntry()

Syntax

void printEntry(struct Entry* entry)

Description

Do no use this function (not an adf one), but you can use its code to learn how to display a directory entry (in adf_dir.c).