Support for close and readdir.
This commit is contained in:
parent
a7b687818f
commit
5bf798d550
@ -394,8 +394,28 @@ int ifs_open(IsoFileSource *src)
|
|||||||
static
|
static
|
||||||
int ifs_close(IsoFileSource *src)
|
int ifs_close(IsoFileSource *src)
|
||||||
{
|
{
|
||||||
//TODO implement
|
ImageFileSourceData *data;
|
||||||
return -1;
|
|
||||||
|
if (src == NULL || src->data == NULL) {
|
||||||
|
return ISO_NULL_POINTER;
|
||||||
|
}
|
||||||
|
data = (ImageFileSourceData*)src->data;
|
||||||
|
|
||||||
|
if (!data->opened) {
|
||||||
|
return ISO_FILE_NOT_OPENNED;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (data->opened == 2) {
|
||||||
|
/* close a dir, free all pending pre-allocated children */
|
||||||
|
child_list_free((struct child_list*) data->data.content);
|
||||||
|
data->data.content = NULL;
|
||||||
|
data->opened = 0;
|
||||||
|
} else {
|
||||||
|
// TODO handle files
|
||||||
|
return ISO_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ISO_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
@ -408,8 +428,38 @@ int ifs_read(IsoFileSource *src, void *buf, size_t count)
|
|||||||
static
|
static
|
||||||
int ifs_readdir(IsoFileSource *src, IsoFileSource **child)
|
int ifs_readdir(IsoFileSource *src, IsoFileSource **child)
|
||||||
{
|
{
|
||||||
//TODO implement
|
ImageFileSourceData *data, *cdata;
|
||||||
return -1;
|
struct child_list *children;
|
||||||
|
|
||||||
|
if (src == NULL || src->data == NULL || child == NULL) {
|
||||||
|
return ISO_NULL_POINTER;
|
||||||
|
}
|
||||||
|
data = (ImageFileSourceData*)src->data;
|
||||||
|
|
||||||
|
if (!data->opened) {
|
||||||
|
return ISO_FILE_NOT_OPENNED;
|
||||||
|
} else if (data->opened != 2) {
|
||||||
|
return ISO_FILE_IS_NOT_DIR;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* return the first child and free it */
|
||||||
|
if (data->data.content == NULL) {
|
||||||
|
return 0; /* EOF */
|
||||||
|
}
|
||||||
|
|
||||||
|
children = (struct child_list*)data->data.content;
|
||||||
|
*child = children->file;
|
||||||
|
cdata = (ImageFileSourceData*)(*child)->data;
|
||||||
|
|
||||||
|
/* set the ref to the parent */
|
||||||
|
cdata->parent = src;
|
||||||
|
iso_file_source_ref(src);
|
||||||
|
|
||||||
|
/* free the first element of the list */
|
||||||
|
data->data.content = children->next;
|
||||||
|
free(children);
|
||||||
|
|
||||||
|
return ISO_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
|
Loading…
Reference in New Issue
Block a user