Subject: pkg/36667: wine fails to read directory entries correctly
To: None <pkg-manager@netbsd.org, gnats-admin@netbsd.org,>
From: None <o.vd.linden@quicknet.nl>
List: pkgsrc-bugs
Date: 07/19/2007 15:40:00
>Number: 36667
>Category: pkg
>Synopsis: wine fails to read directory entries correctly
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: pkg-manager
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Thu Jul 19 15:40:00 +0000 2007
>Originator: Onno van der Linden
>Release: 4.99.23
>Organization:
>Environment:
NetBSD sheep 4.99.23 NetBSD 4.99.23 (SHEEP.acpi) #0: Sat Jul 14 09:33:57 MEST 2007 onno@sheep:/usr/src/sys/arch/i386/compile/SHEEP.acpi i386
>Description:
When wine tries to show a directory listing it fails miserably
>How-To-Repeat:
wine notepad.exe
open existing file
>Fix:
*** wine-0.9.41/dlls/ntdll/directory.c.orig Tue Jul 17 22:26:42 2007
--- wine-0.9.41/dlls/ntdll/directory.c Tue Jul 17 22:31:32 2007
***************
*** 127,132 ****
--- 127,145 ----
#endif /* linux */
+ #if defined(__NetBSD_Version) && __NetBSD_Version >= 399000800
+ /*
+ * workaround for obsolete getdirentries() which returns
+ * the old 32-bit inode struct dirent, while dirent.h has the
+ * new 64-bit inode struct dirent inode since 3.99.8
+ */
+ int getdirentries(int fd, char *buf, int nbytes, long *basep)
+ {
+ *basep = (long)lseek(fd, 0, SEEK_CUR);
+ return getdents(fd, buf, (size_t)nbytes);
+ }
+ #endif
+
#define IS_OPTION_TRUE(ch) ((ch) == 'y' || (ch) == 'Y' || (ch) == 't' || (ch) == 'T' || (ch) == '1')
#define IS_SEPARATOR(ch) ((ch) == '\\' || (ch) == '/')