From 576f234a2791966630a94b45e1d993330c4072cc Mon Sep 17 00:00:00 2001 From: Laurent Vivier Date: Sun, 22 Nov 2009 09:58:01 +0000 Subject: [PATCH] Implement command "dir ". This is the generic command, it needs support from the filesystem packages. Signed-off-by: Laurent Vivier git-svn-id: svn://coreboot.org/openbios/trunk/openbios-devel@630 f158a5a8-5612-0410-a976-696ce0be7e32 --- forth/debugging/client.fs | 17 +++++++++++++++++ include/openbios/fs.h | 1 + modules/filesystems.c | 16 ++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/forth/debugging/client.fs b/forth/debugging/client.fs index 3f0d5e5..ef94639 100644 --- a/forth/debugging/client.fs +++ b/forth/debugging/client.fs @@ -307,6 +307,23 @@ variable bootinfo-size init-program ; +: dir ( "{paths}" -- ) + linefeed parse 2dup + open-dev dup 0= if + 3drop + exit + then + dup >r + dup ihandle>phandle " dir" rot find-method ( xt 0|1 ) + if + swap call-package + else + 3drop + cr ." Cannot find dir for this package" + then + r> close-dev +; + : go ( -- ) state-valid @ not if exit then elf file-type @ = if diff --git a/include/openbios/fs.h b/include/openbios/fs.h index ffdc720..a1ce273 100644 --- a/include/openbios/fs.h +++ b/include/openbios/fs.h @@ -42,6 +42,7 @@ struct fs_ops { int (*read)( file_desc_t *file, void *buf, size_t count ); int (*lseek)( file_desc_t *file, off_t offset, int whence ); char *(*get_path)( file_desc_t *file, char *buf, int len ); + void (*dir)( file_desc_t *file ); const char *(*get_fstype)( fs_ops_t *fs ); }; diff --git a/modules/filesystems.c b/modules/filesystems.c index 320a9db..5f575cb 100644 --- a/modules/filesystems.c +++ b/modules/filesystems.c @@ -294,6 +294,21 @@ files_block_size( files_info_t *dummy ) PUSH(512); } +static void +files_dir( files_info_t *mi ) +{ + fs_ops_t *fs = do_open( my_parent() ); + char *path = pop_fstr_copy(); + + if (!path) + return; + + if (fs->dir) + fs->dir(mi->file); + + free(path); +} + static void files_initializer( files_info_t *dummy ) { @@ -309,6 +324,7 @@ NODE_METHODS( files ) = { { "seek", files_seek }, { "tell", files_tell }, { "load", files_load }, + { "dir", files_dir }, { "block-size", files_block_size }, /* special */