FreeCalypso > hg > freecalypso-sw
diff rvinterf/etmsync/fdcmd.c @ 286:146e7bf3fa4e
fc-fsio: fd debug commands implemented
author | Michael Spacefalcon <msokolov@ivan.Harhan.ORG> |
---|---|
date | Fri, 28 Feb 2014 06:45:10 +0000 |
parents | |
children | 69e8ae2b5ba2 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rvinterf/etmsync/fdcmd.c Fri Feb 28 06:45:10 2014 +0000 @@ -0,0 +1,87 @@ +/* + * File descriptor debug commands + */ + +#include <sys/types.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <strings.h> +#include "etm.h" +#include "ffs.h" +#include "tmffs2.h" +#include "limits.h" +#include "localtypes.h" +#include "localstruct.h" +#include "cmdtab.h" +#include "exitcodes.h" + +cmd_fd_open(argc, argv) + char **argv; +{ + int rc, fd; + + rc = fd_open(argv[1], strtoul(argv[2], 0, 0), &fd); + if (rc) + return(rc); + printf("%d\n", fd); + return(0); +} + +cmd_fd_read(argc, argv) + char **argv; +{ + u_char databuf[MAX_READ_DATA]; + int rc, sz, off, l; + + rc = fd_read(strtoul(argv[1], 0, 0), databuf, strtoul(argv[2], 0, 0), + &sz); + if (rc) + return(rc); + printf("%d bytes read\n", sz); + for (off = 0; off < sz; off += 16) { + l = sz - off; + if (l > 16) + l = 16; + hexdump_line(off, databuf + off, l); + } + return(0); +} + +cmd_fd_close(argc, argv) + char **argv; +{ + return fd_close(strtoul(argv[1], 0, 0)); +} + +struct cmdtab fd_cmds[] = { + {"close", 1, 1, cmd_fd_close}, + {"open", 2, 2, cmd_fd_open}, + {"read", 2, 2, cmd_fd_read}, + {0, 0, 0, 0} +}; + +cmd_fd(argc, argv) + char **argv; +{ + struct cmdtab *tp; + int extargs; + + for (tp = fd_cmds; tp->cmd; tp++) + if (!strcmp(tp->cmd, argv[1])) + break; + if (!tp->func) { + fprintf(stderr, "error: no such fd command\n"); + return(ERROR_USAGE); + } + extargs = argc - 2; + if (extargs > tp->maxargs) { + fprintf(stderr, "error: too many arguments\n"); + return(ERROR_USAGE); + } + if (extargs < tp->minargs) { + fprintf(stderr, "error: too few arguments\n"); + return(ERROR_USAGE); + } + return tp->func(argc - 1, argv + 1); +}