On Thu, 16 Oct 2003, Subhobroto Sinha wrote:

> Sorry, but it's the WHOLE file.
> I have changed the original file so much that to
> submit a proper patch I need an unmodified
> "shelllink.c" (I do have a backup, but where was that
> ?)

OK, here is the corresponding patch:


Index: dlls/shell32/shelllink.c
===================================================================
RCS file: /var/cvs/wine/dlls/shell32/shelllink.c,v
retrieving revision 1.58
diff -u -r1.58 shelllink.c
--- dlls/shell32/shelllink.c    9 Oct 2003 19:47:09 -0000       1.58
+++ dlls/shell32/shelllink.c    17 Oct 2003 03:53:26 -0000
@@ -16,11 +16,6 @@
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * NOTES
- *   Nearly complete informations about the binary formats 
- *   of .lnk files avaiable at http://www.wotsit.org
- *
  */
 
 #include "config.h"
@@ -409,7 +404,13 @@
     LPVOID temp;
     LPWSTR str;
     HRESULT r;
-
+    /*
+    From Win98 upwards unicode==TRUE.(Atleast for shortcuts..)
+    However, the value of SCF_UNICODE does NOT seem to be 0x1000.
+    Until then, we assume it true.
+    Anybody differing mail to <subhobrotosinha at yahoo.com>.
+    */
+    unicode=TRUE;
     TRACE("%p\n", stm);
 
     count = 0;
@@ -437,7 +438,8 @@
     /* convert to unicode if necessary */
     if( !unicode )
     {
-        count = MultiByteToWideChar( CP_ACP, 0, (LPSTR) temp, len, NULL, 0 );
+        TRACE("String not in Unicode..\n");
+       count = MultiByteToWideChar( CP_ACP, 0, (LPSTR) temp, len, NULL, 0 );
         str = HeapAlloc( GetProcessHeap(), 0, (count+1)*sizeof (WCHAR) );
         if( str )
             MultiByteToWideChar( CP_ACP, 0, (LPSTR) temp, len, str, count );
@@ -445,7 +447,8 @@
     }
     else
     {
-        count /= 2;
+        TRACE("String in Unicode..\n");
+       count /= 2;
         str = (LPWSTR) temp;
     }
     str[count] = 0;
@@ -505,7 +508,7 @@
     LINK_HEADER hdr;
     ULONG    dwBytesRead;
     BOOL     unicode;
-    WCHAR    sTemp[MAX_PATH];
+    //WCHAR    sTemp[MAX_PATH];
     HRESULT  r;
 
     _ICOM_THIS_From_IPersistStream(IShellLinkImpl, iface);
@@ -533,6 +536,27 @@
         if( FAILED( r ) )
             return r;
     }
+    //////////////////////////////////////////////////////////////////////////////////
+    LPITEMIDLIST pidltemp=_dbg_ILGetNext(This->pPidl);
+    char szPasha[128][MAX_PATH]={0},szTemp[MAX_PATH]={0};
+    int i=0,j=1;
+        do
+        {
+               _dbg_ILSimpleGetText(pidltemp,szPasha[i++],MAX_PATH);
+               pidltemp = _dbg_ILGetNext(pidltemp);
+       }while(pidltemp->mkid.cb);
+       strcpy(szTemp,szPasha[0]);
+       for(;j<i;j++)
+       {
+               strcat(szTemp,szPasha[j]);
+               if(j!=(i-1))strcat(szTemp,"\\");
+       }
+       strcat(szTemp,szPasha[j]);
+       This->sPath=HeapAlloc( GetProcessHeap(), 0,(strlen(szTemp)+1)*sizeof(WCHAR));
+       ULONG cCharacters=(strlen(szTemp)+1);
+       MultiByteToWideChar(CP_ACP,0,szTemp,cCharacters,This->sPath,cCharacters);
+       TRACE("%s\n",szTemp);
+    //////////////////////////////////////////////////////////////////////////////////
     This->wHotKey = hdr.wHotKey;
     This->iIcoNdx = hdr.nIcon;
     FileTimeToSystemTime (&hdr.Time1, &This->time1);
@@ -569,7 +593,7 @@
         goto end;
 
     if( hdr.dwFlags & SCF_WORKDIR )
-          {
+    {
         r = Stream_LoadString( stm, unicode, &This->sWorkDir );
         TRACE("Working Dir  -> %s\n",debugstr_w(This->sWorkDir));
     }

-- 
Dimi.


Reply via email to