diff options
author | midipix <writeonce@midipix.org> | 2024-03-06 23:32:32 +0000 |
---|---|---|
committer | midipix <writeonce@midipix.org> | 2024-03-06 23:32:32 +0000 |
commit | c5c351d30d66c9076c11fa0166a23b9b2ec7baea (patch) | |
tree | 5f9f6972dc75aafd9d609cae69717a58d8a9212f /src/logic/linkcmd | |
parent | 43ee040279e659d6f2f109427fe21432e09cf671 (diff) | |
download | slibtool-c5c351d30d66c9076c11fa0166a23b9b2ec7baea.tar.bz2 slibtool-c5c351d30d66c9076c11fa0166a23b9b2ec7baea.tar.xz |
link mode: argument vector: remove no-op (past all -l args) linker path args.
Diffstat (limited to 'src/logic/linkcmd')
-rw-r--r-- | src/logic/linkcmd/slbt_linkcmd_argv.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/logic/linkcmd/slbt_linkcmd_argv.c b/src/logic/linkcmd/slbt_linkcmd_argv.c index 71cf2a1..e4f0d12 100644 --- a/src/logic/linkcmd/slbt_linkcmd_argv.c +++ b/src/logic/linkcmd/slbt_linkcmd_argv.c @@ -999,12 +999,25 @@ slbt_hidden int slbt_exec_link_finalize_argument_vector( for (; src<cap; ) *dst++ = *src++; - /* join all other args */ + /* join all other args, eliminate no-op linker path args */ src = aargv; cap = aarg; - for (; src<cap; ) - *dst++ = *src++; + for (; src<cap; ) { + if ((src[0][0] == '-') && (src[0][1] == 'L')) { + for (larg=0,rarg=src; *rarg && !larg; rarg++) + if ((rarg[0][0] == '-') && (rarg[0][1] == 'l')) + larg = rarg; + + if (larg) { + *dst++ = *src++; + } else { + src++; + } + } else { + *dst++ = *src++; + } + } /* properly null-terminate argv, accounting for redundant -l arguments */ *dst = 0; |