diff options
Diffstat (limited to 'cmd/cmd_seek.c')
-rw-r--r-- | cmd/cmd_seek.c | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/cmd/cmd_seek.c b/cmd/cmd_seek.c new file mode 100644 index 0000000..b563231 --- /dev/null +++ b/cmd/cmd_seek.c @@ -0,0 +1,61 @@ +#include "buf.h" +#include "core.h" + +#include "libcmd/cmd.h" +#include "libcmd/cmd_parse.h" + +extern file_t *g_file; +extern buf_t *g_buf; +extern int g_flags; + +int c_seek( cmd_arg_t *arg ) +{ + int fret; + int argc = arg->argc; + char **argv = arg->argv; + off_t offset; + int off_type = 0; //-1 seek down, 0 set pos, +1 seek up + + if (argc != 1) + { + printf("One argument needed\n"); + return -1; + } + + if (g_file->fd == 0) + { + printf("File descriptor not set\n"); + return -1; + } + + //set seek type + switch( argv[0][0] ) + { + case '+': + off_type = 1; + break; + case '-': + off_type = -1; + break; + default: + off_type = 0; + } + + offset = atoi( argv[0] ); //!fix that to strtol at least + + if (off_type == 0) + { + //g_file offset maybe wrong + fret = file_seekp( g_file, offset ); + } else + { + fret = file_seek( g_file, offset ); + } + if ( fret != 0 ) + { + printf("Cannot seek postion to %zd\n", offset); + return -1; + } + + return 0; +}
\ No newline at end of file |