summaryrefslogtreecommitdiffhomepage
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:39 +0000
commitcaeffbe9e30652f13156c181550ee69140d7906b (patch)
tree13d657ef4ba523d3f1f2c291b0ec072e40b1e933
parente1a2b14c1354a74d498349fb2afc3fcaa4d7259c (diff)
downloadmdso-caeffbe9e30652f13156c181550ee69140d7906b.tar.bz2
mdso-caeffbe9e30652f13156c181550ee69140d7906b.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 2b53179..407c640 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;