summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2024-01-26 14:46:15 +0000
committermidipix <writeonce@midipix.org>2024-01-26 14:47:33 +0000
commita343b4892918df9cf0097120be6df47afe037938 (patch)
tree182ff3a341e61dcc6166a566be6d119b252deafe
parent2c3a8e44c6a8d8fa4a5f0de87240510a1cc3751b (diff)
downloadapimagic-a343b4892918df9cf0097120be6df47afe037938.tar.bz2
apimagic-a343b4892918df9cf0097120be6df47afe037938.tar.xz
argv.h: argv_show_error: refactor handling of vendor-specific option string.
-rw-r--r--src/internal/argv/argv.h29
1 files changed, 19 insertions, 10 deletions
diff --git a/src/internal/argv/argv.h b/src/internal/argv/argv.h
index c671e47..2dbd142 100644
--- a/src/internal/argv/argv.h
+++ b/src/internal/argv/argv.h
@@ -536,10 +536,11 @@ static const char * argv_program_name(const char * program_path)
static void argv_show_error(int fd, struct argv_ctx * ctx)
{
- char * ch;
- char * cap;
- char opt_vendor_buf[256];
- char opt_short_name[2] = {0,0};
+ const char * src;
+ char * dst;
+ char * cap;
+ char opt_vendor_buf[256];
+ char opt_short_name[2] = {0,0};
if (ctx->erropt && ctx->erropt->short_name)
opt_short_name[0] = ctx->erropt->short_name;
@@ -556,14 +557,22 @@ static void argv_show_error(int fd, struct argv_ctx * ctx)
break;
case ARGV_ERROR_VENDOR_OPTION:
- memset(opt_vendor_buf,0,sizeof(opt_vendor_buf));
- strncpy(opt_vendor_buf,ctx->errch,sizeof(opt_vendor_buf) - 1);
-
+ src = ctx->errch;
+ dst = opt_vendor_buf;
cap = &opt_vendor_buf[sizeof(opt_vendor_buf)];
- for (ch=opt_vendor_buf; ch && *ch && ch<cap; ch++)
- if ((*ch == '=') || (*ch == ',') || (*ch == ':'))
- *ch = '\0';
+ for (; src && *src && dst<cap; ) {
+ if ((*src == '=') || (*src == ',') || (*src == ':')) {
+ src = 0;
+ } else {
+ *dst++ = *src++;
+ }
+ }
+
+ if (dst == cap)
+ dst--;
+
+ *dst = '\0';
argv_dprintf(fd,"'-%s' is not a valid vendor option\n",opt_vendor_buf);
break;