diff options
| author | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-03-27 17:38:26 +0000 | 
|---|---|---|
| committer | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2010-03-27 17:38:26 +0000 | 
| commit | c460c800baa1f5fd402249448728ea459dc9b3e3 (patch) | |
| tree | 990a69360371a55def1773b24df779616f1414c2 | |
| parent | 1ac5ad687b35793ca0563d7cb9a4ce59e314a483 (diff) | |
firmware-utils/trx: add relative offset parameter
 * will be used for the WRT160NL board
 * patch by Bernhard Loos
 * note: rejected parts has been fixed
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@20522 3c298f89-4303-0410-b956-a3cf2f4a3e73
| -rw-r--r-- | tools/firmware-utils/src/trx.c | 24 | 
1 files changed, 22 insertions, 2 deletions
diff --git a/tools/firmware-utils/src/trx.c b/tools/firmware-utils/src/trx.c index 728deac37..44bd06a06 100644 --- a/tools/firmware-utils/src/trx.c +++ b/tools/firmware-utils/src/trx.c @@ -83,7 +83,7 @@ void usage(void) __attribute__ (( __noreturn__ ));  void usage(void)  {  	fprintf(stderr, "Usage:\n"); -	fprintf(stderr, " trx [-2] [-o outfile] [-m maxlen] [-a align] [-b offset] \\\n"); +	fprintf(stderr, " trx [-2] [-o outfile] [-m maxlen] [-a align] [-b absolute offset] [-x relative offset]\n");  	fprintf(stderr, "     [-f file] [-f file [-f file [-f file (v2 only)]]]\n");  	exit(EXIT_FAILURE);  } @@ -97,6 +97,7 @@ int main(int argc, char **argv)  	char *e;  	int c, i, append = 0;  	size_t n; +	ssize_t n2;  	uint32_t cur_len;  	unsigned long maxlen = TRX_MAX_LEN;  	struct trx_header *p; @@ -118,7 +119,7 @@ int main(int argc, char **argv)  	in = NULL;  	i = 0; -	while ((c = getopt(argc, argv, "-:2o:m:a:b:f:A:")) != -1) { +	while ((c = getopt(argc, argv, "-:2o:m:a:x:b:f:A:")) != -1) {  		switch (c) {  			case '2':  				/* take care that nothing was written to buf so far */ @@ -219,6 +220,25 @@ int main(int argc, char **argv)  					cur_len = n;  				}  				break; +			case 'x': +				errno = 0; +				n2 = strtol(optarg, &e, 0); +				if (errno || (e == optarg) || *e) { +					fprintf(stderr, "illegal numeric string\n"); +					usage(); +				} +				if (n2 < 0) { +					if (-n2 > cur_len) { +						fprintf(stderr, "WARNING: current length smaller then -x %d offset\n",n2); +						cur_len = 0; +					} else +						cur_len += n2; +				} else { +					memset(buf + cur_len, 0, n2); +					cur_len += n2; +				} + +				break;  			default:  				usage();  		}  | 
