From 6291b99dded425c7d67a2bed90fff8638673431a Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Thu, 8 Jan 2009 00:33:27 +0000 Subject: some cleanup (better handling if error on hex string option i.e. key) --- src/options.c | 40 ++++++++++++++++++++++------------------ src/options.h | 2 +- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/options.c b/src/options.c index c751b36..9bfb030 100644 --- a/src/options.c +++ b/src/options.c @@ -113,9 +113,12 @@ if(argc < 1 || argv[i+1][0] == '-') \ return i; \ if(VALUE.buf_) free(VALUE.buf_); \ - VALUE = options_parse_hex_string(argv[i+1]); \ - if(!VALUE.buf_) \ - return -2; \ + int ret; \ + ret = options_parse_hex_string(argv[i+1], &VALUE); \ + if(ret > 0) \ + return i+1; \ + else if(ret < 0) \ + return ret; \ size_t j; \ for(j=0; j < strlen(argv[i+1]); ++j) \ argv[i+1][j] = '#'; \ @@ -123,34 +126,35 @@ i++; \ } -buffer_t options_parse_hex_string(const char* hex) +int options_parse_hex_string(const char* hex, buffer_t* buffer) { - u_int32_t hex_len = strlen(hex); - buffer_t buffer; + if(!hex || !buffer) + return -1; - buffer.length_ = 0; - buffer.buf_ = NULL; + u_int32_t hex_len = strlen(hex); + if(hex_len%2) + return 1; - if(hex_len%2) - return buffer; + if(buffer->buf_) + free(buffer->buf_); - buffer.length_ = hex_len/2; - buffer.buf_ = malloc(buffer.length_); - if(!buffer.buf_) { - buffer.length_ = 0; - return buffer; + buffer->length_ = hex_len/2; + buffer->buf_ = malloc(buffer->length_); + if(!buffer->buf_) { + buffer->length_ = 0; + return -2; } const char* ptr = hex; int i; - for(i=0;ilength_;++i) { u_int32_t tmp; sscanf(ptr, "%2X", &tmp); - buffer.buf_[i] = (u_int8_t)tmp; + buffer->buf_[i] = (u_int8_t)tmp; ptr += 2; } - return buffer; + return 0; } int options_parse(options_t* opt, int argc, char* argv[]) diff --git a/src/options.h b/src/options.h index ce8f3fc..ecaf3a3 100644 --- a/src/options.h +++ b/src/options.h @@ -66,7 +66,7 @@ struct options_struct { }; typedef struct options_struct options_t; -buffer_t options_parse_hex_string(const char* hex); +int options_parse_hex_string(const char* hex, buffer_t* buffer); int options_parse(options_t* opt, int argc, char* argv[]); void options_default(options_t* opt); -- cgit v1.2.3