aboutsummaryrefslogtreecommitdiffstats
path: root/cmd/cmd_seek.c
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/cmd_seek.c')
-rw-r--r--cmd/cmd_seek.c61
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