Lazy mode possibility to add additional, fs dependent commands to the shell;
removed BFS specific command(s). Cleaned up the file a bit. Removed Debug.h - it was a leftover from the BFS shell. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@2962 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
9767c7befd
commit
138a8c079e
@ -1,100 +0,0 @@
|
||||
#ifndef DEBUG_H
|
||||
#define DEBUG_H
|
||||
/* Debug - debug stuff
|
||||
**
|
||||
** Initial version by Axel Dörfler, axeld@pinc-software.de
|
||||
** This file may be used under the terms of the OpenBeOS License.
|
||||
*/
|
||||
|
||||
#ifdef DEBUG
|
||||
# include <string.h>
|
||||
#endif
|
||||
|
||||
#ifdef USER
|
||||
# include <stdio.h>
|
||||
# define __out printf
|
||||
#else
|
||||
# define __out dprintf
|
||||
#endif
|
||||
|
||||
// Which debugger should be used when?
|
||||
// The DEBUGGER() macro actually has no effect if DEBUG is not defined,
|
||||
// use the DIE() macro if you really want to die.
|
||||
#ifdef DEBUG
|
||||
# ifdef USER
|
||||
# define DEBUGGER(x) debugger x
|
||||
# else
|
||||
# define DEBUGGER(x) kernel_debugger x
|
||||
# endif
|
||||
#else
|
||||
# define DEBUGGER(x) ;
|
||||
#endif
|
||||
|
||||
#ifdef USER
|
||||
# define DIE(x) debugger x
|
||||
#else
|
||||
# define DIE(x) kernel_debugger x
|
||||
#endif
|
||||
|
||||
// Short overview over the debug output macros:
|
||||
// PRINT()
|
||||
// is for general messages that very unlikely should appear in a release build
|
||||
// FATAL()
|
||||
// this is for fatal messages, when something has really gone wrong
|
||||
// INFORM()
|
||||
// general information, as disk size, etc.
|
||||
// REPORT_ERROR(status_t)
|
||||
// prints out error information
|
||||
// RETURN_ERROR(status_t)
|
||||
// calls REPORT_ERROR() and return the value
|
||||
// D()
|
||||
// the statements in D() are only included if DEBUG is defined
|
||||
|
||||
#include <KernelExport.h>
|
||||
#define kprintf printf
|
||||
#define dprintf printf
|
||||
|
||||
#ifdef DEBUG
|
||||
#define PRINT(x) { __out("bfs: "); __out x; }
|
||||
#define REPORT_ERROR(status) __out("bfs: %s:%s:%ld: %s\n", __FILE__, __FUNCTION__, __LINE__, strerror(status));
|
||||
#define RETURN_ERROR(err) { status_t _status = err; if (_status < B_OK) REPORT_ERROR(_status); return _status;}
|
||||
#define FATAL(x) { __out("bfs: "); __out x; }
|
||||
#define INFORM(x) { __out("bfs: "); __out x; }
|
||||
#define FUNCTION() __out("bfs: %s()\n",__FUNCTION__);
|
||||
#define FUNCTION_START(x) { __out("bfs: %s() ",__FUNCTION__); __out x; }
|
||||
// #define FUNCTION() ;
|
||||
// #define FUNCTION_START(x) ;
|
||||
#define D(x) {x;};
|
||||
#define ASSERT(x) { if (!(x)) DEBUGGER(("bfs: assert failed: " #x "\n")); }
|
||||
#else
|
||||
#define PRINT(x) ;
|
||||
#define REPORT_ERROR(status) ;
|
||||
#define RETURN_ERROR(status) return status;
|
||||
#define FATAL(x) { __out("bfs: "); __out x; }
|
||||
#define INFORM(x) { __out("bfs: "); __out x; }
|
||||
#define FUNCTION() ;
|
||||
#define FUNCTION_START(x) ;
|
||||
#define D(x) ;
|
||||
#define ASSERT(x) ;
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
struct block_run;
|
||||
struct bplustree_header;
|
||||
struct bplustree_node;
|
||||
struct data_stream;
|
||||
struct bfs_inode;
|
||||
struct disk_super_block;
|
||||
class Volume;
|
||||
|
||||
// some structure dump functions
|
||||
extern void dump_block_run(const char *prefix, block_run &run);
|
||||
extern void dump_super_block(disk_super_block *superBlock);
|
||||
extern void dump_data_stream(data_stream *stream);
|
||||
extern void dump_inode(bfs_inode *inode);
|
||||
extern void dump_bplustree_header(bplustree_header *header);
|
||||
extern void dump_bplustree_node(bplustree_node *node,bplustree_header *header = NULL,Volume *volume = NULL);
|
||||
extern void dump_block(const char *buffer, int size);
|
||||
#endif
|
||||
|
||||
#endif /* DEBUG_H */
|
@ -468,83 +468,6 @@ do_dir(int argc, char **argv)
|
||||
}
|
||||
|
||||
|
||||
#include "bfs_control.h"
|
||||
|
||||
static void
|
||||
do_chkbfs(int argc, char **argv)
|
||||
{
|
||||
struct check_control result;
|
||||
off_t files = 0, directories = 0, indices = 0, attributeDirectories = 0, attributes = 0;
|
||||
int counter = 0;
|
||||
|
||||
int fd = sys_open(1, -1, "/myfs/.", O_RDONLY, S_IFREG, 0);
|
||||
if (fd < 0) {
|
||||
printf("chkbfs: error opening '.'\n");
|
||||
return;
|
||||
}
|
||||
|
||||
memset(&result, 0, sizeof(result));
|
||||
result.flags = argc > 1 ? BFS_FIX_BITMAP_ERRORS : 0;
|
||||
if (argc > 2) {
|
||||
printf("will fix any severe errors!\n");
|
||||
result.flags |= BFS_REMOVE_WRONG_TYPES | BFS_REMOVE_INVALID;
|
||||
}
|
||||
|
||||
// start checking
|
||||
if ((sys_ioctl(1, fd, BFS_IOCTL_START_CHECKING, &result, sizeof(result))) < 0) {
|
||||
printf("chkbfs: error starting!\n");
|
||||
}
|
||||
|
||||
// check all files and report errors
|
||||
while (sys_ioctl(1, fd, BFS_IOCTL_CHECK_NEXT_NODE, &result, sizeof(result)) == B_OK) {
|
||||
if (++counter % 50 == 0)
|
||||
printf(" %7ld nodes processed\x1b[1A\n", counter);
|
||||
|
||||
if (result.errors) {
|
||||
printf("%s (inode = %Ld)", result.name, result.inode);
|
||||
if (result.errors & BFS_MISSING_BLOCKS)
|
||||
printf(", some blocks weren't allocated");
|
||||
if (result.errors & BFS_BLOCKS_ALREADY_SET)
|
||||
printf(", has blocks already set");
|
||||
if (result.errors & BFS_INVALID_BLOCK_RUN)
|
||||
printf(", has invalid block run(s)");
|
||||
if (result.errors & BFS_COULD_NOT_OPEN)
|
||||
printf(", could not be opened");
|
||||
if (result.errors & BFS_WRONG_TYPE)
|
||||
printf(", has wrong type");
|
||||
if (result.errors & BFS_NAMES_DONT_MATCH)
|
||||
printf(", names don't match");
|
||||
putchar('\n');
|
||||
}
|
||||
if ((result.mode & (S_INDEX_DIR | 0777)) == S_INDEX_DIR)
|
||||
indices++;
|
||||
else if (result.mode & S_ATTR_DIR)
|
||||
attributeDirectories++;
|
||||
else if (result.mode & S_ATTR)
|
||||
attributes++;
|
||||
else if (result.mode & S_IFDIR)
|
||||
directories++;
|
||||
else
|
||||
files++;
|
||||
}
|
||||
if (result.status != B_ENTRY_NOT_FOUND)
|
||||
printf("chkbfs: error occured during scan: %s\n", strerror(result.status));
|
||||
|
||||
// stop checking
|
||||
if ((sys_ioctl(1, fd, BFS_IOCTL_STOP_CHECKING, &result, sizeof(result))) < 0) {
|
||||
printf("chkbfs: error stopping!\n");
|
||||
}
|
||||
|
||||
printf("checked %ld nodes, %Ld blocks not allocated, %Ld blocks already set, %Ld blocks could be freed\n",
|
||||
counter, result.stats.missing, result.stats.already_set, result.stats.freed);
|
||||
printf("\tfiles\t\t%Ld\n\tdirectories\t%Ld\n\tattributes\t%Ld\n\tattr. dirs\t%Ld\n\tindices\t\t%Ld\n",
|
||||
files, directories, attributes, attributeDirectories, indices);
|
||||
if (result.flags & BFS_FIX_BITMAP_ERRORS)
|
||||
printf("errors have been fixed\n");
|
||||
|
||||
sys_close(1, fd);
|
||||
}
|
||||
|
||||
static void
|
||||
do_ioctl(int argc, char **argv)
|
||||
{
|
||||
@ -642,7 +565,6 @@ do_rmall(int argc, char **argv)
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
do_trunc(int argc, char **argv)
|
||||
{
|
||||
@ -666,8 +588,6 @@ do_trunc(int argc, char **argv)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static void
|
||||
do_seek(int argc, char **argv)
|
||||
{
|
||||
@ -986,19 +906,18 @@ do_copytest(int argc, char **argv)
|
||||
} else if (argc == 2)
|
||||
fromPath = argv[1];
|
||||
else
|
||||
printf("copying from: %s\n",fromPath);
|
||||
printf("copying from: %s\n", fromPath);
|
||||
|
||||
copydir(fromPath,"/myfs");
|
||||
copydir(fromPath, "/myfs");
|
||||
}
|
||||
|
||||
|
||||
static int32
|
||||
copydirthread(void *data)
|
||||
{
|
||||
char *args[] = {"cptest",(char *)data,NULL};
|
||||
char stack_filler[256*1024 - 0 * 1024];
|
||||
char *args[] = {"cptest", (char *)data, NULL};
|
||||
|
||||
do_copytest(2,args);
|
||||
do_copytest(2, args);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1006,11 +925,11 @@ copydirthread(void *data)
|
||||
static void
|
||||
do_threadtest(int argc, char **argv)
|
||||
{
|
||||
char *paths[] = {"/boot/home/mail/pinc - axeld/in","/boot/home/mail/pinc - axeld/out",NULL};
|
||||
char *paths[] = {"/boot/home/mail/pinc - axeld/in", "/boot/home/mail/pinc - axeld/out", NULL};
|
||||
int32 i;
|
||||
|
||||
for (i = 0;paths[i] != NULL;i++) {
|
||||
thread_id thread = spawn_thread(copydirthread,"copythread",B_NORMAL_PRIORITY,paths[i]);
|
||||
for (i = 0; paths[i] != NULL; i++) {
|
||||
thread_id thread = spawn_thread(copydirthread, "copythread", B_NORMAL_PRIORITY, paths[i]);
|
||||
resume_thread(thread);
|
||||
}
|
||||
|
||||
@ -1024,13 +943,13 @@ int32 gCopyNum;
|
||||
static int32
|
||||
copyfilethread(void *data)
|
||||
{
|
||||
char *args[] = {"cp",(char *)data,NULL,NULL};
|
||||
char *args[] = {"cp", (char *)data, NULL, NULL};
|
||||
|
||||
char name[32];
|
||||
sprintf(name,"target%ld",gCopyNum++);
|
||||
sprintf(name, "target%ld", gCopyNum++);
|
||||
args[2] = name;
|
||||
|
||||
do_copy(3,args);
|
||||
do_copy(3, args);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1235,7 +1154,6 @@ do_cio(int argc, char **argv)
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
mkfile(char *s, int sz)
|
||||
{
|
||||
@ -1296,8 +1214,6 @@ do_lat_fs(int argc, char **argv)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static void
|
||||
do_create(int argc, char **argv)
|
||||
{
|
||||
@ -1324,6 +1240,7 @@ do_create(int argc, char **argv)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
do_delete(int argc, char **argv)
|
||||
{
|
||||
@ -1331,7 +1248,7 @@ do_delete(int argc, char **argv)
|
||||
char name[64];
|
||||
|
||||
if (argc > 1)
|
||||
iter =strtoul(&argv[1][0], NULL, 0);
|
||||
iter = strtoul(&argv[1][0], NULL, 0);
|
||||
|
||||
for (j = 0; j < iter; ++j) {
|
||||
sprintf(name, "/myfs/test/%.5d", j);
|
||||
@ -1342,6 +1259,8 @@ do_delete(int argc, char **argv)
|
||||
}
|
||||
|
||||
|
||||
#include "additional_commands.c"
|
||||
|
||||
|
||||
static void do_help(int argc, char **argv);
|
||||
|
||||
@ -1385,8 +1304,11 @@ cmd_entry fsh_cmds[] =
|
||||
{ "cptest", do_copytest, "copies all files from the given path" },
|
||||
{ "threads", do_threadtest, "copies several files, and does a lat_fs simulaneously" },
|
||||
{ "mfile", do_threadfiletest, "copies several big files simulaneously" },
|
||||
{ "chkbfs", do_chkbfs, "does a chkbfs on the volume" },
|
||||
{ "cio", do_cio, "does a I/O speed test" },
|
||||
|
||||
// additional commands from the file system will be included here
|
||||
# include "additional_commands.h"
|
||||
|
||||
{ "help", do_help, "print this help message" },
|
||||
{ "?", do_help, "print this help message" },
|
||||
{ NULL, NULL }
|
||||
@ -1399,7 +1321,7 @@ do_help(int argc, char **argv)
|
||||
cmd_entry *cmd;
|
||||
|
||||
printf("commands fsh understands:\n");
|
||||
for(cmd=fsh_cmds; cmd->name != NULL; cmd++) {
|
||||
for (cmd = fsh_cmds; cmd->name != NULL; cmd++) {
|
||||
printf("%8s - %s\n", cmd->name, cmd->help);
|
||||
}
|
||||
}
|
||||
@ -1416,8 +1338,10 @@ getline(char *prompt, char *input, int len)
|
||||
static void
|
||||
do_fsh(void)
|
||||
{
|
||||
#if 0
|
||||
char stack_filler[1024 * 1024 * 16 - 32 * 1024];
|
||||
// actually emulating 12kB stack size (BeOS has 16 MB - ~20kB for the main thread)
|
||||
#endif
|
||||
int argc, len;
|
||||
char *prompt = "fsh>> ";
|
||||
char input[512], **argv;
|
||||
|
Loading…
Reference in New Issue
Block a user