widl: Try to find imported typelib using .tlb extension if it wasn't specified.

Signed-off-by: Jacek Caban <jacek@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
oldstable
Jacek Caban 2017-06-16 15:25:48 +02:00 committed by Alexandre Julliard
parent cb563dbac6
commit fbdf119e2c
1 changed files with 28 additions and 8 deletions

View File

@ -326,22 +326,42 @@ static void read_msft_importlib(importlib_t *importlib, int fd)
free(typeinfo_offs);
}
static int open_typelib(const char *name)
{
char *file_name;
int fd;
file_name = wpp_find_include(name, NULL);
if(!file_name)
return open(name, O_RDONLY | O_BINARY );
fd = open(file_name, O_RDONLY | O_BINARY );
free(file_name);
return fd;
}
static void read_importlib(importlib_t *importlib)
{
int fd;
INT magic;
char *file_name;
file_name = wpp_find_include(importlib->name, NULL);
if(file_name) {
fd = open(file_name, O_RDONLY | O_BINARY );
free(file_name);
}else {
fd = open(importlib->name, O_RDONLY | O_BINARY );
fd = open_typelib(importlib->name);
/* widl extension: if importlib name has no .tlb extension, try using .tlb */
if(fd < 0) {
const char *p = strrchr(importlib->name, '.');
size_t len = p ? p - importlib->name : strlen(importlib->name);
if(strcmp(importlib->name + len, ".tlb")) {
char *tlb_name = xmalloc(len + 5);
memcpy(tlb_name, importlib->name, len);
strcpy(tlb_name + len, ".tlb");
fd = open_typelib(tlb_name);
free(tlb_name);
}
}
if(fd < 0)
error("Could not open importlib %s.\n", importlib->name);
error("Could not find importlib %s.\n", importlib->name);
tlb_read(fd, &magic, sizeof(magic));