From bdd0daaf6f48cec9f36eaac4c9ae06940934b986 Mon Sep 17 00:00:00 2001 From: "Markus F.X.J. Oberhumer" Date: Tue, 20 Feb 2007 07:36:34 +0100 Subject: [PATCH] Added ElfLinker::addLoaderVA(). --- src/linker.cpp | 17 +++++++++++++++++ src/linker.h | 6 ++++++ src/packer.cpp | 8 +------- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/linker.cpp b/src/linker.cpp index dcc523c7..435b4a31 100644 --- a/src/linker.cpp +++ b/src/linker.cpp @@ -439,6 +439,23 @@ int ElfLinker::addLoader(const char *sname) return outputlen; } +void ElfLinker::addLoader(const char *s, va_list ap) +{ + while (s != NULL) + { + addLoader(s); + s = va_arg(ap, const char *); + } +} + +void __acc_cdecl_va ElfLinker::addLoaderVA(const char *s, ...) +{ + va_list ap; + va_start(ap, s); + addLoader(s, ap); + va_end(ap); +} + int ElfLinker::getSection(const char *sname, int *slen) const { const Section *section = findSection(sname); diff --git a/src/linker.h b/src/linker.h index be53dd15..22dca7e4 100644 --- a/src/linker.h +++ b/src/linker.h @@ -83,6 +83,12 @@ public: virtual void init(const void *pdata, int plen); //virtual void setLoaderAlignOffset(int phase); virtual int addLoader(const char *sname); + void addLoader(const char *s, va_list ap); +#if 1 && (ACC_CC_GNUC >= 0x040100) + void __acc_cdecl_va addLoaderVA(const char *s, ...) __attribute__((__sentinel__)); +#else + void __acc_cdecl_va addLoaderVA(const char *s, ...); +#endif virtual Section *addSection(const char *sname, const void *sdata, int slen, unsigned p2align); virtual int getSection(const char *sname, int *slen=NULL) const; virtual int getSectionSize(const char *sname) const; diff --git a/src/packer.cpp b/src/packer.cpp index 7ca8b1e8..2b92f4a1 100644 --- a/src/packer.cpp +++ b/src/packer.cpp @@ -1082,14 +1082,8 @@ void Packer::addLoader(C a, C b, C c, C d, C e, C f, C g, C h, C i, C j) void __acc_cdecl_va Packer::addLoaderVA(const char *s, ...) { va_list ap; - const char *t = s; - va_start(ap, s); - while (t != NULL) - { - linker->addLoader(t); - t = va_arg(ap, const char *); - } + linker->addLoader(s, ap); va_end(ap); }