* Hack * for Wine-20030115 DOSFS_Hash on Solaris 8 x86

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



wine photoed reports it can't find GIFIMP32.FLT (and friends)
which prevents images from being imported.  The trace is:

trace:dosfs:DOSFS_GetFullName L"C:\\PROGRA~1\\COMMON~1\\MICROS~1\\GRPHFLT\\GIFIM
P32.FLT" (last=0)
trace:dosfs:DOSFS_FindUnixName /dos,L"PROGRA~1\\COMMON~1\\MICROS~1\\GRPHFLT\\GIF
IMP32.FLT"
trace:dosfs:DOSFS_ToDosFCBFormat (L"PROGRA~1\\COMMON~1\\MICROS~1\\GRPHFLT\\GIFIM
P32.FLT", df621770)
trace:dosfs:DOSFS_OpenDir "/dos"
...
trace:dosfs:DOSFS_ReadDir Read: long_name: L"Program Files", short_name: (null)
trace:dosfs:DOSFS_FindUnixName   checking L"PROGRA~1   " L"PROG~FBU   "

What happens is DOSFS_Hash hashes "Program Files" in an unexpected fashion
which prevents DOSFS_FindUnixName from realizing it matches ""PROGRA~1   ".

The enclosed * hack * allows wine photoed to load images.  It is * not *
the correct answer.  One possible approach is to modify DOSFS_OpenDir_Normal
to generate "proper" short names after it has read all the directory entries.

ChangeLog:

Fri Jan 17 20:31:21 EST 2003  John Wehle  (john@feith.com)

	* files/dos_fs.c (DOSFS_Hash): Use a constant in place
	of the hash.

Enjoy!

-- John Wehle
------------------8<------------------------8<------------------------
*** files/dos_fs.c.ORIGINAL	Fri Dec 13 15:30:06 2002
--- files/dos_fs.c	Fri Jan 17 19:53:51 2003
*************** static void DOSFS_Hash( LPCWSTR name, LP
*** 690,708 ****
      if (ext && IS_END_OF_NAME(ext[1]))
          ext = NULL;  /* Empty extension ignored */
  
!     /* Copy first 4 chars, replacing invalid chars with '_' */
!     for (i = 4, p = name, dst = buffer; i > 0; i--, p++)
      {
          if (IS_END_OF_NAME(*p) || (p == ext)) break;
          *dst++ = (*p < 256 && strchr( invalid_chars, (char)*p )) ? '_' : toupperW(*p);
      }
!     /* Pad to 5 chars with '~' */
      while (i-- >= 0) *dst++ = '~';
  
      /* Insert hash code converted to 3 ASCII chars */
      *dst++ = hash_chars[(hash >> 10) & 0x1f];
      *dst++ = hash_chars[(hash >> 5) & 0x1f];
      *dst++ = hash_chars[hash & 0x1f];
  
      /* Copy the first 3 chars of the extension (if any) */
      if (ext)
--- 690,711 ----
      if (ext && IS_END_OF_NAME(ext[1]))
          ext = NULL;  /* Empty extension ignored */
  
!     /* Copy first 6 chars, replacing invalid chars with '_' */
!     for (i = 6, p = name, dst = buffer; i > 0; i--, p++)
      {
          if (IS_END_OF_NAME(*p) || (p == ext)) break;
          *dst++ = (*p < 256 && strchr( invalid_chars, (char)*p )) ? '_' : toupperW(*p);
      }
!     /* Pad to 7 chars with '~' */
      while (i-- >= 0) *dst++ = '~';
  
      /* Insert hash code converted to 3 ASCII chars */
+ /*
      *dst++ = hash_chars[(hash >> 10) & 0x1f];
      *dst++ = hash_chars[(hash >> 5) & 0x1f];
      *dst++ = hash_chars[hash & 0x1f];
+ */
+ *dst++ = '1';
  
      /* Copy the first 3 chars of the extension (if any) */
      if (ext)
-------------------------------------------------------------------------
|   Feith Systems  |   Voice: 1-215-646-8000  |  Email: john@feith.com  |
|    John Wehle    |     Fax: 1-215-540-5495  |                         |
-------------------------------------------------------------------------



[Index of Archives]     [Gimp for Windows]     [Red Hat]     [Samba]     [Yosemite Camping]     [Graphics Cards]     [Wine Home]

  Powered by Linux