diff --git a/tools/winegcc/utils.c b/tools/winegcc/utils.c index 3197e46e47d..52f46c491b3 100644 --- a/tools/winegcc/utils.c +++ b/tools/winegcc/utils.c @@ -212,6 +212,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"; char buf[sizeof(res_sig)]; int fd, cnt; @@ -230,6 +231,11 @@ file_type get_file_type(const char* filename) if (strendswith(filename, ".def")) return file_def; 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(unsigned int) && + (*(unsigned int *)buf == 0xfeedface || *(unsigned int *)buf == 0xcefaedfe || + *(unsigned int *)buf == 0xfeedfacf || *(unsigned int *)buf == 0xcffaedfe)) + return file_so; /* Mach-O lib */ return file_other; }