From 1ebed354a9dd1f390483abc21c69bbe2fc698fc8 Mon Sep 17 00:00:00 2001 From: midipix Date: Wed, 18 Jun 2025 06:08:22 +0000 Subject: driver: slbt_split_argv(): special-case argv[0], properly handle --mode=execute. --- src/driver/slbt_split_argv.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/driver/slbt_split_argv.c') diff --git a/src/driver/slbt_split_argv.c b/src/driver/slbt_split_argv.c index acf8da9..3e18bdf 100644 --- a/src/driver/slbt_split_argv.c +++ b/src/driver/slbt_split_argv.c @@ -46,6 +46,7 @@ slbt_hidden int slbt_split_argv( bool flast; bool fcopy; bool altmode; + bool execmode; size_t size; const char * base; struct argv_meta * meta; @@ -129,6 +130,9 @@ slbt_hidden int slbt_split_argv( /* as well as -print-aux-dir and -print-m4-dir? */ mode = help = version = info = config = finish = features = ccwrap = dumpmachine = printdir = printext = aropt = stoolieopt = 0; + /* --mode=execute implies -- right after the executable path argument */ + execmode = false; + for (entry=meta->entries; entry->fopt; entry++) if (entry->tag == TAG_MODE) mode = entry; @@ -167,6 +171,9 @@ slbt_hidden int slbt_split_argv( if (!altmode && mode && !strcmp(mode->arg,"slibtoolize")) stoolieopt = mode; + if (mode && !strcmp(mode->arg,"execute")) + execmode = true; + /* release temporary argv meta context */ slbt_argv_free(meta); @@ -222,6 +229,9 @@ slbt_hidden int slbt_split_argv( if ((fcopy = (flast || altmode || aropt || stoolieopt))) { (void)0; + } else if (i == 0) { + fcopy = true; + } else if (!strcmp(argv[i],"--")) { flast = true; fcopy = true; @@ -319,6 +329,9 @@ slbt_hidden int slbt_split_argv( } else { fcopy = true; + + if (execmode) + flast = true; } if (fcopy) { -- cgit v1.2.3