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).