#include "buf.h" #include "core.h" #include "libcmd/cmd.h" #include "libcmd/cmd_parse.h" extern file_t *g_file; extern Buf *g_buf; extern int g_flags; int if_decimal(char *s, int sz) { int i=0; while (iargc; char **argv = arg->argv; int *type = arg->type; int checktype; 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; } switch( argv[0][0] ) { case '+': off_type = 1; break; case '-': off_type = -1; break; default: off_type = 0; } //printf("Type %d\n",type[0]); checktype = type[0]; if (checktype == CMDT_WORD) { if (if_decimal(argv[0]+1,strlen(argv[0])-1)) { checktype = CMDT_INT; } else if (if_hex(argv[0]+3,strlen(argv[0])-3)) { checktype = CMDT_HEX; } } //check argument type and convert to offset if (checktype == CMDT_INT) { if (off_type != 0) { offset = atoi( argv[0] ); //!fix that to strtol at least } else { offset = atoi( argv[0] ); } } else if (checktype == CMDT_HEX) { if (off_type != 0) { offset = strtol( argv[0], NULL, 16); } else { offset = strtol( argv[0]+3, NULL, 16); } } else { //unsupported argument do nothing return 0; } if (off_type == 0) { //g_file offset maybe wrong //printf("seekp\n"); fret = file_seekp( g_file, offset ); } else { //printf("seek\n"); fret = file_seek( g_file, offset ); } if ( fret < 0 ) { printf("Cannot seek postion to %zd\n", offset); return -1; } return 0; } int h_seek( cmd_arg_t *arg ) { printf("[POS] - move to differnt file offset"); return 0; }