* Properly fix all those signed/unsigned issues default tip
authorpancake<nopcode.org>
Thu Jul 28 18:04:01 2011 +0200 (9 months ago)
changeset 63ebd1bb073270
parent 62 123a2b83417d
* Properly fix all those signed/unsigned issues
Makefile
cmd.c
ired.c
ired.h
util.c
     1.1 --- a/Makefile	Tue Jul 26 11:06:41 2011 +0200
     1.2 +++ b/Makefile	Thu Jul 28 18:04:01 2011 +0200
     1.3 @@ -37,7 +37,7 @@
     1.4  	cp ired.1 ${DESTDIR}${PREFIX}/share/man/man1
     1.5  	cp vired.1 ${DESTDIR}${PREFIX}/share/man/man1
     1.6  
     1.7 -uninstall:
     1.8 +deinstall uninstall:
     1.9  	rm -f ${DESTDIR}${PREFIX}/bin/ired
    1.10  	rm -f ${DESTDIR}${PREFIX}/bin/vired
    1.11  	rm -f ${DESTDIR}${PREFIX}/share/man/man1/ired.1
     2.1 --- a/cmd.c	Tue Jul 26 11:06:41 2011 +0200
     2.2 +++ b/cmd.c	Thu Jul 28 18:04:01 2011 +0200
     2.3 @@ -25,7 +25,7 @@
     2.4  		"./:/*        skip 1 or 4 chars, repeat last format instead of cycle\n");
     2.5  }
     2.6  
     2.7 -static void cmd_bytedump(char *arg) {
     2.8 +static void cmd_bytedump(const char *arg) {
     2.9  	int i, len = bsize;
    2.10  	ut8 *buf = getcurblk(arg, &len);
    2.11  	if(buf) {
    2.12 @@ -36,25 +36,32 @@
    2.13  	}
    2.14  }
    2.15  
    2.16 -static void cmd_search(unsigned char *arg) {
    2.17 -	ut8 *buf;
    2.18 -	int i, len, hit = 0;
    2.19 -	arg = skipspaces(arg);
    2.20 +static void cmd_search(const char *arg) {
    2.21 +	ut8 *buf, *barg;
    2.22 +	size_t len;
    2.23 +	int i, hit = 0;
    2.24 +	SKIPSPACES(arg);
    2.25  	if(*arg=='"') {
    2.26  		arg++;
    2.27 -		len = strlen(arg)-1;
    2.28 -		arg[len]='\0';
    2.29 -	} else len = hexstr2raw(arg);
    2.30 +		barg = (ut8*)strdup(arg);
    2.31 +		len = strlen((const char *)barg)-1;
    2.32 +		// TODO: ensure last char is '"'
    2.33 +		barg[len]='\0';
    2.34 +	} else {
    2.35 +		barg = (ut8*)strdup(arg);
    2.36 +		len = hexstr2raw(barg);
    2.37 +	}
    2.38  	if((buf = getcurblk("", &bsize)))
    2.39  	do {
    2.40  		for(i=0;i<bsize;i++) {
    2.41 -			if(arg[hit++]!=buf[i]) hit = 0;
    2.42 +			if(barg[hit++]!=buf[i]) hit = 0;
    2.43  			else if(hit == len)
    2.44  				printf("0x%"LLF"x\n", curseek+i-len+1);
    2.45  		}
    2.46  		curseek += bsize;
    2.47  	} while(io_read(buf, bsize)>0);
    2.48  	free(buf);
    2.49 +	free(barg);
    2.50  }
    2.51  
    2.52  static void cmd_bsize(char *arg) {
    2.53 @@ -104,16 +111,23 @@
    2.54  	} else perror("fopen");
    2.55  }
    2.56  
    2.57 -static void cmd_write(char *arg) {
    2.58 +static void cmd_write(const char *arg) {
    2.59 +	ut8 *barg;
    2.60  	int len;
    2.61 -	arg = skipspaces(arg);
    2.62 +	SKIPSPACES(arg);
    2.63  	if(*arg=='"') {
    2.64 +		barg = (ut8*)strdup (arg+1);
    2.65  		len = strlen(++arg)-1;
    2.66 -		arg[len]='\0';
    2.67 -	} else len = hexstr2raw(arg);
    2.68 +		// TODO: ensure last char is "
    2.69 +		barg[len] = '\0';
    2.70 +	} else {
    2.71 +		barg = (ut8*)strdup (arg);
    2.72 +		len = hexstr2raw(barg);
    2.73 +	}
    2.74  	io_seek(curseek, SEEK_SET);
    2.75  	if(len<1 || io_write(arg, len)<len)
    2.76  		perror("io_write");
    2.77 +	free (arg);
    2.78  }
    2.79  
    2.80  static void cmd_help(char *arg) {
    2.81 @@ -183,7 +197,8 @@
    2.82  
    2.83  static void cmd_system(char *arg) {
    2.84  	int len = bsize;
    2.85 -	char *buf, str[1024];
    2.86 +	char str[1024];
    2.87 +	ut8 *buf;
    2.88  	if(strstr(arg, "BLOCK")) {
    2.89  		FILE *fd = fopen(".curblk", "wb");
    2.90  		if(fd) {
     3.1 --- a/ired.c	Tue Jul 26 11:06:41 2011 +0200
     3.2 +++ b/ired.c	Thu Jul 28 18:04:01 2011 +0200
     3.3 @@ -38,22 +38,24 @@
     3.4  }
     3.5  
     3.6  static int red_cmd(char *cmd) {
     3.7 +	char *arg = cmd+1;
     3.8 +	SKIPSPACES(arg);
     3.9  	switch(*cmd) {
    3.10  	case 'q': return 0;
    3.11  	case ';': case '#': break; // comment
    3.12 -	case '>': cmd_dump(cmd+1); break;
    3.13 -	case '<': cmd_load(cmd+1); break;
    3.14 -	case '.': red_interpret(skipspaces(cmd+1)); break;
    3.15 -	case 's': cmd_seek(cmd+1); break;
    3.16 -	case 'b': cmd_bsize(cmd+1); break;
    3.17 -	case '/': cmd_search(cmd+1); break;
    3.18 -	case 'p': cmd_print(cmd+1); break;
    3.19 -	case 'r': cmd_resize(cmd+1); break;
    3.20 -	case 'x': cmd_hexdump(cmd+1); break;
    3.21 -	case 'X': cmd_bytedump(cmd+1); break;
    3.22 -	case 'w': cmd_write(cmd+1); break;
    3.23 -	case '!': cmd_system(cmd+1); break;
    3.24 -	case '?': cmd_help(cmd+1); break;
    3.25 +	case '>': cmd_dump(arg); break;
    3.26 +	case '<': cmd_load(arg); break;
    3.27 +	case '.': red_interpret(arg); break;
    3.28 +	case 's': cmd_seek(arg); break;
    3.29 +	case 'b': cmd_bsize(arg); break;
    3.30 +	case '/': cmd_search(arg); break;
    3.31 +	case 'p': cmd_print(arg); break;
    3.32 +	case 'r': cmd_resize(arg); break;
    3.33 +	case 'x': cmd_hexdump(arg); break;
    3.34 +	case 'X': cmd_bytedump(arg); break;
    3.35 +	case 'w': cmd_write(arg); break;
    3.36 +	case '!': cmd_system(arg); break;
    3.37 +	case '?': cmd_help(arg); break;
    3.38  	default: fprintf(stderr, "? %s\n", cmd);
    3.39  	}
    3.40  	return 1;
    3.41 @@ -82,7 +84,9 @@
    3.42  			if(*at) curseek = str2ut64(at);
    3.43  		}
    3.44  	}
    3.45 -	return red_cmd(skipspaces(line));
    3.46 +	at = line;
    3.47 +	SKIPSPACES(at);
    3.48 +	return red_cmd(at);
    3.49  }
    3.50  
    3.51  static int red_open(char *file) {
     4.1 --- a/ired.h	Tue Jul 26 11:06:41 2011 +0200
     4.2 +++ b/ired.h	Thu Jul 28 18:04:01 2011 +0200
     4.3 @@ -8,6 +8,8 @@
     4.4  #include <string.h>
     4.5  #include <stdlib.h>
     4.6  
     4.7 +#define SKIPSPACES(x) for(;*(x)==' '||*(x)=='\t';x++);
     4.8 +
     4.9  #if(plan9)
    4.10  static int setenv(char *var, char *val, int force) {
    4.11  	char str[256];
     5.1 --- a/util.c	Tue Jul 26 11:06:41 2011 +0200
     5.2 +++ b/util.c	Thu Jul 28 18:04:01 2011 +0200
     5.3 @@ -2,11 +2,6 @@
     5.4  
     5.5  #include <ctype.h>
     5.6  
     5.7 -static inline char *skipspaces(char *arg) {
     5.8 -	while(*arg==' '||*arg=='\t') arg++;
     5.9 -	return arg;
    5.10 -}
    5.11 -
    5.12  static inline void hexdump(const ut8 *buf, unsigned int len, int w) {
    5.13  	unsigned int i, j;
    5.14  	for(i=0;i<len;i+=w) {
    5.15 @@ -63,9 +58,9 @@
    5.16  	} while(!rep && inc && inc<len);
    5.17  }
    5.18  
    5.19 -static ut64 str2ut64(char *str) {
    5.20 +static ut64 str2ut64(const char *str) {
    5.21  	ut64 ret = 0LL;
    5.22 -	str = skipspaces(str);
    5.23 +	SKIPSPACES(str);
    5.24  	if(str[0]=='b'&&str[1]=='\0')
    5.25  		ret = bsize;
    5.26  	else if(str[0]=='0') {
    5.27 @@ -87,7 +82,7 @@
    5.28  	return 0;
    5.29  }
    5.30  
    5.31 -static unsigned int hexstr2raw(char *arg) {
    5.32 +static unsigned int hexstr2raw(ut8 *arg) {
    5.33  	ut8 *ptr, d, c = 0;
    5.34  	unsigned int j = 0, len = 0;
    5.35  	for(ptr=(ut8 *)arg; *ptr; ptr++) {
    5.36 @@ -105,10 +100,10 @@
    5.37  	return len;
    5.38  }
    5.39  
    5.40 -static void *getcurblk(char *arg, int *len) {
    5.41 -	void *buf = NULL;
    5.42 +static ut8 *getcurblk(const char *arg, int *len) {
    5.43 +	ut8 *buf = NULL;
    5.44  	if(*arg) {
    5.45 -		*len = (int)str2ut64(arg);
    5.46 +		*len = (int)str2ut64((const char *)arg);
    5.47  		if(*len<1) *len = bsize;
    5.48  	}
    5.49  	if(*len>0 && (buf = malloc(*len)) != NULL) {