Tatsuyuki Ishi : winegcc: Identify ar files through signature.

Alexandre Julliard julliard at winehq.org
Thu Mar 24 17:46:42 CDT 2022


Module: wine
Branch: master
Commit: 510cfd2762238e50e7524bb309905d2da9416890
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=510cfd2762238e50e7524bb309905d2da9416890

Author: Tatsuyuki Ishi <ishitatsuyuki at gmail.com>
Date:   Thu Mar 24 11:54:36 2022 +0900

winegcc: Identify ar files through signature.

Rust uses the ".rlib" extension for intermediate libraries which it
passes to the linker. Detect them through signature so that winegcc will
not try to compile it.

Signed-off-by: Tatsuyuki Ishi <ishitatsuyuki at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 tools/winegcc/utils.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/winegcc/utils.c b/tools/winegcc/utils.c
index 409ae26cd82..4b4498a59fa 100644
--- a/tools/winegcc/utils.c
+++ b/tools/winegcc/utils.c
@@ -63,6 +63,7 @@ file_type get_file_type(const char* filename)
     /* see tools/winebuild/res32.c: check_header for details */
     static const char res_sig[] = { 0,0,0,0, 32,0,0,0, 0xff,0xff, 0,0, 0xff,0xff, 0,0, 0,0,0,0, 0,0, 0,0, 0,0,0,0, 0,0,0,0 };
     static const char elf_sig[4] = "\177ELF";
+    static const char ar_sig[8] = "!<arch>\n";
     char buf[sizeof(res_sig)];
     int fd, cnt;
 
@@ -83,6 +84,7 @@ file_type get_file_type(const char* filename)
     if (strendswith(filename, ".spec")) return file_spec;
     if (strendswith(filename, ".rc")) return file_rc;
     if (cnt >= sizeof(elf_sig) && !memcmp(buf, elf_sig, sizeof(elf_sig))) return file_so;  /* ELF lib */
+    if (cnt >= sizeof(ar_sig) && !memcmp(buf, ar_sig, sizeof(ar_sig))) return file_arh;
     if (cnt >= sizeof(unsigned int) &&
         (*(unsigned int *)buf == 0xfeedface || *(unsigned int *)buf == 0xcefaedfe ||
          *(unsigned int *)buf == 0xfeedfacf || *(unsigned int *)buf == 0xcffaedfe))




More information about the wine-cvs mailing list