Changeset 5618 for trunk/src/shell32/pidl.c
- Timestamp:
- Apr 28, 2001, 3:33:49 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/shell32/pidl.c
r4125 r5618 1 /* $Id: pidl.c,v 1.2 2000-08-30 14:18:47 sandervl Exp $ */2 1 /* 3 2 * pidl Handling … … 9 8 * 10 9 */ 11 #ifdef __WIN32OS2__12 #define ICOM_CINTERFACE 113 #include <odin.h>14 #endif15 10 16 11 #include <ctype.h> … … 19 14 #include "winbase.h" 20 15 #include "debugtools.h" 21 #include "shell.h"22 16 #include "shlguid.h" 23 17 #include "winerror.h" 24 18 #include "winnls.h" 19 #include "wine/undocshell.h" 25 20 #include "shell32_main.h" 26 21 #include "shellapi.h" 22 #include "shlwapi.h" 27 23 28 24 #include "pidl.h" 29 #include "wine/undocshell.h"30 25 31 26 DEFAULT_DEBUG_CHANNEL(pidl); 32 27 DECLARE_DEBUG_CHANNEL(shell); 33 28 34 #ifdef __WIN32OS2__ 35 #ifdef DEBUG 29 #if defined( __WIN32OS2__) && defined(DEBUG) 36 30 void pdump (LPCITEMIDLIST pidl) 37 31 { … … 44 38 /* silence the sub-functions */ 45 39 bIsShellDebug = TRACE_ON(shell); 46 __SET_DEBUGGING(__DBCL_TRACE, dbch_shell, FALSE);47 __SET_DEBUGGING(__DBCL_TRACE, dbch_pidl, FALSE);40 __SET_DEBUGGING(__DBCL_TRACE, __wine_dbch_shell, FALSE); 41 __SET_DEBUGGING(__DBCL_TRACE, __wine_dbch_pidl, FALSE); 48 42 49 43 if (! pidltemp) … … 85 79 } 86 80 87 __SET_DEBUGGING(__DBCL_TRACE, dbch_shell, bIsShellDebug); 88 __SET_DEBUGGING(__DBCL_TRACE, dbch_pidl, TRUE); 89 90 } 91 #endif //DEBUG 92 #else 93 void pdump (LPCITEMIDLIST pidl) 94 { 95 BOOL bIsShellDebug; 96 97 LPITEMIDLIST pidltemp = pidl; 98 if (!TRACE_ON(pidl)) 99 return; 100 101 /* silence the sub-functions */ 102 bIsShellDebug = TRACE_ON(shell); 103 __SET_DEBUGGING(__DBCL_TRACE, dbch_shell, FALSE); 104 __SET_DEBUGGING(__DBCL_TRACE, dbch_pidl, FALSE); 105 106 if (! pidltemp) 107 { 108 MESSAGE ("-------- pidl=NULL (Desktop)\n"); 109 } 110 else 111 { 112 MESSAGE ("-------- pidl=%p\n", pidl); 113 if (pidltemp->mkid.cb) 114 { 115 do 116 { 117 DWORD dwAttrib = 0; 118 LPPIDLDATA pData = _ILGetDataPointer(pidltemp); 119 DWORD type = pData->type; 120 LPSTR szLongName = _ILGetTextPointer(pidltemp); 121 LPSTR szShortName = _ILGetSTextPointer(pidltemp); 122 char szName[MAX_PATH]; 123 124 _ILSimpleGetText(pidltemp, szName, MAX_PATH); 125 if( PT_FOLDER == type) 126 dwAttrib = pData->u.folder.uFileAttribs; 127 else if( PT_VALUE == type) 128 dwAttrib = pData->u.file.uFileAttribs; 129 130 MESSAGE ("-- pidl=%p size=%u type=%lx attr=0x%08lx name=%s (%s,%s)\n", 131 pidltemp, pidltemp->mkid.cb,type,dwAttrib,szName,debugstr_a(szLongName), debugstr_a(szShortName)); 132 133 pidltemp = ILGetNext(pidltemp); 134 135 } while (pidltemp->mkid.cb); 136 } 137 else 138 { 139 MESSAGE ("empty pidl (Desktop)\n"); 140 } 141 pcheck(pidl); 142 } 143 144 __SET_DEBUGGING(__DBCL_TRACE, dbch_shell, bIsShellDebug); 145 __SET_DEBUGGING(__DBCL_TRACE, dbch_pidl, TRUE); 146 147 } 148 #endif //__WIN32OS2__ 149 81 __SET_DEBUGGING(__DBCL_TRACE, __wine_dbch_shell, bIsShellDebug); 82 __SET_DEBUGGING(__DBCL_TRACE, __wine_dbch_pidl, TRUE); 83 84 } 85 #endif 150 86 #define BYTES_PRINTED 32 151 87 BOOL pcheck (LPCITEMIDLIST pidl) … … 156 92 157 93 bIsPidlDebug = TRACE_ON(shell); 158 __SET_DEBUGGING(__DBCL_TRACE, dbch_pidl, FALSE);94 __SET_DEBUGGING(__DBCL_TRACE, __wine_dbch_pidl, FALSE); 159 95 160 96 if (pidltemp && pidltemp->mkid.cb) … … 175 111 case PT_COMP: 176 112 case PT_NETWORK: 113 case PT_IESPECIAL1: 114 case PT_IESPECIAL2: 177 115 case PT_SHARE: 178 case PT_IESPECIAL:179 116 break; 180 117 default: … … 202 139 } while (pidltemp->mkid.cb); 203 140 } 204 __SET_DEBUGGING(__DBCL_TRACE, dbch_pidl, bIsPidlDebug);141 __SET_DEBUGGING(__DBCL_TRACE, __wine_dbch_pidl, bIsPidlDebug); 205 142 return ret; 206 143 } … … 300 237 return pidlNew; 301 238 } 239 302 240 /************************************************************************* 303 241 * ILLoadFromStream … … 332 270 } 333 271 334 /* we are not jet fully compatible */272 /* we are not yet fully compatible */ 335 273 if (!pcheck(*ppPidl)) 336 274 { SHFree(*ppPidl); … … 343 281 return ret; 344 282 } 283 284 /************************************************************************* 285 * ILSaveToStream 286 * 287 * NOTES 288 * the first two bytes are the len, the pidl is following then 289 */ 290 HRESULT WINAPI ILSaveToStream (IStream * pStream, LPCITEMIDLIST pPidl) 291 { 292 LPITEMIDLIST pidl; 293 WORD wLen = 0; 294 HRESULT ret = E_FAIL; 295 296 TRACE_(shell)("%p %p\n", pStream, pPidl); 297 298 IStream_AddRef (pStream); 299 300 pidl = pPidl; 301 while (pidl->mkid.cb) 302 { 303 wLen += sizeof(WORD) + pidl->mkid.cb; 304 pidl = ILGetNext(pidl); 305 } 306 307 if (SUCCEEDED(IStream_Write(pStream, (LPVOID)&wLen, 2, NULL))) 308 { 309 if (SUCCEEDED(IStream_Write(pStream, pPidl, wLen, NULL))) 310 { ret = S_OK; 311 } 312 } 313 314 315 IStream_Release (pStream); 316 317 return ret; 318 } 319 345 320 /************************************************************************* 346 321 * SHILCreateFromPath [SHELL32.28] … … 357 332 TRACE_(shell)("%s %p 0x%08lx\n",path,ppidl,attributes?*attributes:0); 358 333 359 lstrcpynAtoW(lpszDisplayName, path, MAX_PATH); 334 if (!MultiByteToWideChar( CP_ACP, 0, path, -1, lpszDisplayName, MAX_PATH )) 335 lpszDisplayName[MAX_PATH-1] = 0; 360 336 361 337 if (SUCCEEDED (SHGetDesktopFolder(&sf))) … … 831 807 TRACE("path=%s\n",debugstr_w(lpszPath)); 832 808 833 lstrcpynWtoA(lpszTemp, lpszPath, MAX_PATH); 809 if (!WideCharToMultiByte( CP_ACP, 0, lpszPath, -1, lpszTemp, sizeof(lpszTemp), NULL, NULL )) 810 lpszTemp[sizeof(lpszTemp)-1] = 0; 834 811 835 812 return SHSimpleIDListFromPathA (lpszTemp); … … 994 971 pfd->dwFileAttributes = _ILGetFileAttributes(pidl, NULL, 0); 995 972 pfd->nFileSizeLow = _ILGetFileSize ( pidl, NULL, 0); 996 lstrcpynAtoW(pfd->cFileName,_ILGetTextPointer(pidl), MAX_PATH); 997 lstrcpynAtoW(pfd->cAlternateFileName,_ILGetSTextPointer(pidl), 14); 973 if (!MultiByteToWideChar( CP_ACP, 0, _ILGetTextPointer(pidl), -1, 974 pfd->cFileName, MAX_PATH )) 975 pfd->cFileName[MAX_PATH-1] = 0; 976 if (!MultiByteToWideChar( CP_ACP, 0, _ILGetSTextPointer(pidl), -1, 977 pfd->cAlternateFileName, 14 )) 978 pfd->cFileName[13] = 0; 998 979 } 999 980 return NOERROR; … … 1069 1050 1070 1051 SHGetPathFromIDListA (pidl, sTemp); 1071 lstrcpyAtoW(pszPath, sTemp);1052 MultiByteToWideChar( CP_ACP, 0, sTemp, -1, pszPath, MAX_PATH ); 1072 1053 1073 1054 TRACE_(shell)("-- (%s)\n",debugstr_w(pszPath)); … … 1292 1273 */ 1293 1274 1294 LPITEMIDLIST _ILCreate(PIDLTYPE type, LPCVOID pIn, UINT 16uInSize)1275 LPITEMIDLIST _ILCreate(PIDLTYPE type, LPCVOID pIn, UINT uInSize) 1295 1276 { 1296 1277 LPITEMIDLIST pidlOut = NULL, pidlTemp = NULL; 1297 1278 LPPIDLDATA pData; 1298 UINT 16uSize = 0;1279 UINT uSize = 0; 1299 1280 LPSTR pszDest; 1300 1281 … … 1374 1355 * strlen (lpszText) 1375 1356 */ 1376 DWORD _ILGetDrive(LPCITEMIDLIST pidl,LPSTR pOut, UINT 16uSize)1357 DWORD _ILGetDrive(LPCITEMIDLIST pidl,LPSTR pOut, UINT uSize) 1377 1358 { TRACE("(%p,%p,%u)\n",pidl,pOut,uSize); 1378 1359 … … 1474 1455 * gets the text for the first item in the pidl (eg. simple pidl) 1475 1456 * 1476 * returns the leng htof the string1457 * returns the length of the string 1477 1458 */ 1478 1459 DWORD _ILSimpleGetText (LPCITEMIDLIST pidl, LPSTR szOut, UINT uOutSize) … … 1569 1550 case PT_FOLDER1: 1570 1551 case PT_VALUE: 1571 case PT_IESPECIAL: 1552 case PT_IESPECIAL1: 1553 case PT_IESPECIAL2: 1572 1554 return (LPSTR)&(pdata->u.file.szNames); 1573 1555 … … 1597 1579 case PT_FOLDER: 1598 1580 case PT_VALUE: 1599 case PT_IESPECIAL: 1581 case PT_IESPECIAL1: 1582 case PT_IESPECIAL2: 1600 1583 return (LPSTR)(pdata->u.file.szNames + strlen (pdata->u.file.szNames) + 1); 1601 1584
Note:
See TracChangeset
for help on using the changeset viewer.