Module: wine Branch: master Commit: 7776faf3a7f17b4328d6d9511a00d729b704e605 URL: http://source.winehq.org/git/wine.git/?a=commit;h=7776faf3a7f17b4328d6d9511a...
Author: Alexandre Julliard julliard@winehq.org Date: Fri Feb 27 16:05:30 2009 +0100
winecfg: Offer a few more dlls in the load order drop-down list.
---
programs/winecfg/libraries.c | 73 ++++++++++++++++++++++++----------------- 1 files changed, 43 insertions(+), 30 deletions(-)
diff --git a/programs/winecfg/libraries.c b/programs/winecfg/libraries.c index 6abe04d..37cc12b 100644 --- a/programs/winecfg/libraries.c +++ b/programs/winecfg/libraries.c @@ -55,13 +55,15 @@ static const char * const builtin_only[] = "gdi32", "glu32", "icmp", + "gphoto2.ds", "iphlpapi", "kernel32", + "mountmgr.sys", "mswsock", "ntdll", + "ntoskrnl.exe", "opengl32", - "stdole2.tlb", - "stdole32.tlb", + "sane.ds", "twain_32", "unicows", "user32", @@ -205,10 +207,35 @@ static int compare_dll( const void *ptr1, const void *ptr2 ) /* check if dll is recommended as builtin only */ static inline int is_builtin_only( const char *name ) { + const char *ext = strrchr( name, '.' ); + + if (ext) + { + if (!strcmp( ext, ".vxd" ) || + !strcmp( ext, ".drv" ) || + !strcmp( ext, ".tlb" )) + return TRUE; + } return bsearch( &name, builtin_only, sizeof(builtin_only)/sizeof(builtin_only[0]), sizeof(builtin_only[0]), compare_dll ) != NULL; }
+/* check if dll should be offered in the drop-down list */ +static int show_dll_in_list( const char *name ) +{ + const char *ext = strrchr( name, '.' ); + + if (ext) + { + /* skip 16-bit dlls */ + if (strlen(ext) > 2 && !strcmp( ext + strlen(ext) - 2, "16" )) return FALSE; + /* skip exes */ + if (!strcmp( ext, ".exe" )) return FALSE; + } + /* skip dlls that should always be builtin */ + return !is_builtin_only( name ); +} + static void set_controls_from_selection(HWND dialog) { /* FIXME: display/update some information about the selected dll (purpose, recommended loadorder) maybe? */ @@ -232,28 +259,6 @@ static void clear_settings(HWND dialog) } }
-/* check if a given dll is 16-bit */ -static int is_16bit_dll( const char *dir, const char *name ) -{ - char buffer[64]; - int res; - size_t len = strlen(dir) + strlen(name) + 2; - char *path = HeapAlloc( GetProcessHeap(), 0, len ); - - strcpy( path, dir ); - strcat( path, "/" ); - strcat( path, name ); - res = readlink( path, buffer, sizeof(buffer) ); - HeapFree( GetProcessHeap(), 0, path ); - - if (res == -1) return 0; /* not a symlink */ - if (res < 4 || res >= sizeof(buffer)) return 0; - buffer[res] = 0; - if (strchr( buffer, '/' )) return 0; /* contains a path, not valid */ - if (strcmp( buffer + res - 3, ".so" )) return 0; /* does not end in .so, not valid */ - return 1; -} - /* load the list of available libraries from a given dir */ static void load_library_list_from_dir( HWND dialog, const char *dir_path, int check_subdirs ) { @@ -270,23 +275,31 @@ static void load_library_list_from_dir( HWND dialog, const char *dir_path, int c { size_t len = strlen(de->d_name); if (len > sizeof(name)) continue; - if (len > 7 && !strcmp( de->d_name + len - 7, ".dll.so")) + if (len > 3 && !strcmp( de->d_name + len - 3, ".so")) { - if (is_16bit_dll( dir_path, de->d_name )) continue; /* 16-bit dlls can't be configured */ - len -= 7; + len -= 3; + if (len > 4 && !strcmp( de->d_name + len - 4, ".dll.so")) len -= 4; memcpy( name, de->d_name, len ); name[len] = 0; - /* skip dlls that should always be builtin */ - if (is_builtin_only( name )) continue; + if (!show_dll_in_list( name )) continue; SendDlgItemMessageA( dialog, IDC_DLLCOMBO, CB_ADDSTRING, 0, (LPARAM)name ); } else if (check_subdirs) { struct stat st; - if (is_builtin_only( de->d_name )) continue; + if (!show_dll_in_list( de->d_name )) continue; sprintf( buffer, "%s/%s/%s.dll.so", dir_path, de->d_name, de->d_name ); if (!stat( buffer, &st )) + { + SendDlgItemMessageA( dialog, IDC_DLLCOMBO, CB_ADDSTRING, 0, (LPARAM)de->d_name ); + continue; + } + sprintf( buffer, "%s/%s/%s.so", dir_path, de->d_name, de->d_name ); + if (!stat( buffer, &st )) + { SendDlgItemMessageA( dialog, IDC_DLLCOMBO, CB_ADDSTRING, 0, (LPARAM)de->d_name ); + continue; + } } } closedir( dir );