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) == '/')