mirror of
https://gitlab.com/qemu-project/openbios.git
synced 2024-02-13 08:34:06 +08:00
Currently the dir word works by using /packages/misc-files to open a directory in a similar way to a file and then
special-casing directory actions. This is wrong in that in order to list the contents of a directory, open-dev must return true for any device which contains a valid filesystem, regardless of whether or not the supplied arguments reference a valid path. This causes us a problem because in order to implement multiple references in boot-device correctly, we have to fail if we open a specific device with invalid arguments (such as a non-existent file reference). This patch therefore makes the following changes: 1) Create a static method in each of the filesystem packages to implement dir 2) Enhance the partition/disk handlers to record the phandle of any detected filesystem during open 3) Create a new dir method in the partition/disk handlers which invokes the static dir method for the currently detected filesystem Hence we can now open a raw device/partition and invoke dir on its filesystem without having to open a specific file-reference first. Following shortly is a patch to switch the main dir word over to use this new system. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@siriusit.co.uk> git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@816 f158a5a8-5612-0410-a976-696ce0be7e32
This commit is contained in:
committed by
Mark Cave-Ayland
parent
930ce00f5f
commit
a5511ad95c
@@ -365,6 +365,23 @@ pcparts_load( __attribute__((unused))pcparts_info_t *di )
|
||||
load(my_self());
|
||||
}
|
||||
|
||||
/* ( pathstr len -- ) */
|
||||
static void
|
||||
pcparts_dir( pcparts_info_t *di )
|
||||
{
|
||||
if ( di->filesystem_ph ) {
|
||||
PUSH( my_self() );
|
||||
push_str("dir");
|
||||
PUSH( di->filesystem_ph );
|
||||
fword("find-method");
|
||||
POP();
|
||||
fword("execute");
|
||||
} else {
|
||||
forth_printf("pc-parts: Unable to determine filesystem\n");
|
||||
POP();
|
||||
POP();
|
||||
}
|
||||
}
|
||||
|
||||
NODE_METHODS( pcparts ) = {
|
||||
{ "probe", pcparts_probe },
|
||||
@@ -372,6 +389,7 @@ NODE_METHODS( pcparts ) = {
|
||||
{ "seek", pcparts_seek },
|
||||
{ "read", pcparts_read },
|
||||
{ "load", pcparts_load },
|
||||
{ "dir", pcparts_dir },
|
||||
{ "get-info", pcparts_get_info },
|
||||
{ "block-size", pcparts_block_size },
|
||||
{ NULL, pcparts_initialize },
|
||||
|
||||
Reference in New Issue
Block a user