Function to get root FileSource on a IsoImageFilesystem.
This commit is contained in:
parent
be37936534
commit
2a0f762213
@ -20,6 +20,10 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
static int ifs_fs_open(IsoImageFilesystem *fs);
|
||||||
|
static int ifs_fs_close(IsoImageFilesystem *fs);
|
||||||
|
|
||||||
#define ISO_IMAGE_FS_ID 2
|
#define ISO_IMAGE_FS_ID 2
|
||||||
|
|
||||||
/** unique identifier for each image */
|
/** unique identifier for each image */
|
||||||
@ -263,7 +267,10 @@ void ifs_free(IsoFileSource *src)
|
|||||||
src->class->close(src);
|
src->class->close(src);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO free destination on symlinks
|
/* free destination if it is a link */
|
||||||
|
if (S_ISLNK(data->info.st_mode)) {
|
||||||
|
free(data->data.content);
|
||||||
|
}
|
||||||
iso_filesystem_unref((IsoFilesystem*)data->fs);
|
iso_filesystem_unref((IsoFilesystem*)data->fs);
|
||||||
iso_file_source_unref(data->parent);
|
iso_file_source_unref(data->parent);
|
||||||
free(data->name);
|
free(data->name);
|
||||||
@ -614,10 +621,35 @@ ifs_cleanup: ;
|
|||||||
static
|
static
|
||||||
int ifs_get_root(IsoFilesystem *fs, IsoFileSource **root)
|
int ifs_get_root(IsoFilesystem *fs, IsoFileSource **root)
|
||||||
{
|
{
|
||||||
//TODO ensure data source is opened
|
int ret;
|
||||||
|
_ImageFsData *data;
|
||||||
//TODO not implemented
|
uint8_t buffer[BLOCK_SIZE];
|
||||||
return -1;
|
|
||||||
|
if (fs == NULL || fs->data == NULL || root == NULL) {
|
||||||
|
return ISO_NULL_POINTER;
|
||||||
|
}
|
||||||
|
|
||||||
|
data = (_ImageFsData*)fs->data;
|
||||||
|
|
||||||
|
/* open the filesystem */
|
||||||
|
ret = ifs_fs_open((IsoImageFilesystem*)fs);
|
||||||
|
if (ret < 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* read extend for root record */
|
||||||
|
ret = data->src->read_block(data->src, data->iso_root_block, buffer);
|
||||||
|
if (ret < 0) {
|
||||||
|
ifs_fs_close((IsoImageFilesystem*)fs);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* get root attributes from "." entry */
|
||||||
|
ret = iso_file_source_new_ifs((IsoImageFilesystem*)fs, NULL,
|
||||||
|
(struct ecma119_dir_record*) buffer, root);
|
||||||
|
|
||||||
|
ifs_fs_close((IsoImageFilesystem*)fs);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
|
Loading…
Reference in New Issue
Block a user