xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/FileManager/NetFolder.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // NetFolder.cpp
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker 
5*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/PropVariant.h"
6*f6dc9357SAndroid Build Coastguard Worker 
7*f6dc9357SAndroid Build Coastguard Worker #include "../../PropID.h"
8*f6dc9357SAndroid Build Coastguard Worker 
9*f6dc9357SAndroid Build Coastguard Worker #include "FSFolder.h"
10*f6dc9357SAndroid Build Coastguard Worker #include "NetFolder.h"
11*f6dc9357SAndroid Build Coastguard Worker #include "SysIconUtils.h"
12*f6dc9357SAndroid Build Coastguard Worker 
13*f6dc9357SAndroid Build Coastguard Worker using namespace NWindows;
14*f6dc9357SAndroid Build Coastguard Worker using namespace NNet;
15*f6dc9357SAndroid Build Coastguard Worker 
16*f6dc9357SAndroid Build Coastguard Worker static const Byte  kProps[] =
17*f6dc9357SAndroid Build Coastguard Worker {
18*f6dc9357SAndroid Build Coastguard Worker   kpidName,
19*f6dc9357SAndroid Build Coastguard Worker   kpidLocalName,
20*f6dc9357SAndroid Build Coastguard Worker   kpidComment,
21*f6dc9357SAndroid Build Coastguard Worker   kpidProvider
22*f6dc9357SAndroid Build Coastguard Worker };
23*f6dc9357SAndroid Build Coastguard Worker 
Init(const UString & path)24*f6dc9357SAndroid Build Coastguard Worker void CNetFolder::Init(const UString &path)
25*f6dc9357SAndroid Build Coastguard Worker {
26*f6dc9357SAndroid Build Coastguard Worker   /*
27*f6dc9357SAndroid Build Coastguard Worker   if (path.Len() > 2)
28*f6dc9357SAndroid Build Coastguard Worker   {
29*f6dc9357SAndroid Build Coastguard Worker     if (path[0] == L'\\' && path[1] == L'\\')
30*f6dc9357SAndroid Build Coastguard Worker     {
31*f6dc9357SAndroid Build Coastguard Worker       CResource netResource;
32*f6dc9357SAndroid Build Coastguard Worker       netResource.RemoteName = GetSystemString(path.Left(path.Len() - 1));
33*f6dc9357SAndroid Build Coastguard Worker       netResource.Scope = RESOURCE_GLOBALNET;
34*f6dc9357SAndroid Build Coastguard Worker       netResource.Type = RESOURCETYPE_DISK;
35*f6dc9357SAndroid Build Coastguard Worker       netResource.DisplayType = RESOURCEDISPLAYTYPE_SERVER;
36*f6dc9357SAndroid Build Coastguard Worker       netResource.Usage = RESOURCEUSAGE_CONTAINER;
37*f6dc9357SAndroid Build Coastguard Worker       Init(&netResource, 0, path);
38*f6dc9357SAndroid Build Coastguard Worker       return;
39*f6dc9357SAndroid Build Coastguard Worker     }
40*f6dc9357SAndroid Build Coastguard Worker   }
41*f6dc9357SAndroid Build Coastguard Worker   Init(0, 0 , L"");
42*f6dc9357SAndroid Build Coastguard Worker   */
43*f6dc9357SAndroid Build Coastguard Worker   CResourceW resource;
44*f6dc9357SAndroid Build Coastguard Worker   resource.RemoteNameIsDefined = true;
45*f6dc9357SAndroid Build Coastguard Worker   if (!path.IsEmpty())
46*f6dc9357SAndroid Build Coastguard Worker     resource.RemoteName.SetFrom(path, path.Len() - 1);
47*f6dc9357SAndroid Build Coastguard Worker   resource.ProviderIsDefined = false;
48*f6dc9357SAndroid Build Coastguard Worker   resource.LocalNameIsDefined = false;
49*f6dc9357SAndroid Build Coastguard Worker   resource.CommentIsDefined = false;
50*f6dc9357SAndroid Build Coastguard Worker   resource.Type = RESOURCETYPE_DISK;
51*f6dc9357SAndroid Build Coastguard Worker   resource.Scope = RESOURCE_GLOBALNET;
52*f6dc9357SAndroid Build Coastguard Worker   resource.Usage = 0;
53*f6dc9357SAndroid Build Coastguard Worker   resource.DisplayType = 0;
54*f6dc9357SAndroid Build Coastguard Worker   CResourceW destResource;
55*f6dc9357SAndroid Build Coastguard Worker   UString systemPathPart;
56*f6dc9357SAndroid Build Coastguard Worker   DWORD result = GetResourceInformation(resource, destResource, systemPathPart);
57*f6dc9357SAndroid Build Coastguard Worker   if (result == NO_ERROR)
58*f6dc9357SAndroid Build Coastguard Worker     Init(&destResource, NULL, path);
59*f6dc9357SAndroid Build Coastguard Worker   else
60*f6dc9357SAndroid Build Coastguard Worker     Init(NULL, NULL , L"");
61*f6dc9357SAndroid Build Coastguard Worker   return;
62*f6dc9357SAndroid Build Coastguard Worker }
63*f6dc9357SAndroid Build Coastguard Worker 
Init(const NWindows::NNet::CResourceW * netResource,IFolderFolder * parentFolder,const UString & path)64*f6dc9357SAndroid Build Coastguard Worker void CNetFolder::Init(const NWindows::NNet::CResourceW *netResource,
65*f6dc9357SAndroid Build Coastguard Worker       IFolderFolder *parentFolder, const UString &path)
66*f6dc9357SAndroid Build Coastguard Worker {
67*f6dc9357SAndroid Build Coastguard Worker   _path = path;
68*f6dc9357SAndroid Build Coastguard Worker   if (!netResource)
69*f6dc9357SAndroid Build Coastguard Worker     _netResourcePointer = NULL;
70*f6dc9357SAndroid Build Coastguard Worker   else
71*f6dc9357SAndroid Build Coastguard Worker   {
72*f6dc9357SAndroid Build Coastguard Worker     _netResource = *netResource;
73*f6dc9357SAndroid Build Coastguard Worker     _netResourcePointer = &_netResource;
74*f6dc9357SAndroid Build Coastguard Worker 
75*f6dc9357SAndroid Build Coastguard Worker     // if (_netResource.DisplayType == RESOURCEDISPLAYTYPE_SERVER)
76*f6dc9357SAndroid Build Coastguard Worker     _path = _netResource.RemoteName;
77*f6dc9357SAndroid Build Coastguard Worker 
78*f6dc9357SAndroid Build Coastguard Worker     /* WinXP-64: When we move UP from Network share without _parentFolder chain,
79*f6dc9357SAndroid Build Coastguard Worker          we can get empty _netResource.RemoteName. Do we need to use Provider there ? */
80*f6dc9357SAndroid Build Coastguard Worker     if (_path.IsEmpty())
81*f6dc9357SAndroid Build Coastguard Worker       _path = _netResource.Provider;
82*f6dc9357SAndroid Build Coastguard Worker 
83*f6dc9357SAndroid Build Coastguard Worker     if (!_path.IsEmpty())
84*f6dc9357SAndroid Build Coastguard Worker       _path.Add_PathSepar();
85*f6dc9357SAndroid Build Coastguard Worker   }
86*f6dc9357SAndroid Build Coastguard Worker   _parentFolder = parentFolder;
87*f6dc9357SAndroid Build Coastguard Worker }
88*f6dc9357SAndroid Build Coastguard Worker 
Z7_COM7F_IMF(CNetFolder::LoadItems ())89*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(CNetFolder::LoadItems())
90*f6dc9357SAndroid Build Coastguard Worker {
91*f6dc9357SAndroid Build Coastguard Worker   _items.Clear();
92*f6dc9357SAndroid Build Coastguard Worker   CEnum enumerator;
93*f6dc9357SAndroid Build Coastguard Worker 
94*f6dc9357SAndroid Build Coastguard Worker   for (;;)
95*f6dc9357SAndroid Build Coastguard Worker   {
96*f6dc9357SAndroid Build Coastguard Worker     DWORD result = enumerator.Open(
97*f6dc9357SAndroid Build Coastguard Worker       RESOURCE_GLOBALNET,
98*f6dc9357SAndroid Build Coastguard Worker       RESOURCETYPE_DISK,
99*f6dc9357SAndroid Build Coastguard Worker       0,        // enumerate all resources
100*f6dc9357SAndroid Build Coastguard Worker       _netResourcePointer
101*f6dc9357SAndroid Build Coastguard Worker       );
102*f6dc9357SAndroid Build Coastguard Worker     if (result == NO_ERROR)
103*f6dc9357SAndroid Build Coastguard Worker       break;
104*f6dc9357SAndroid Build Coastguard Worker     if (result != ERROR_ACCESS_DENIED)
105*f6dc9357SAndroid Build Coastguard Worker       return HRESULT_FROM_WIN32(result);
106*f6dc9357SAndroid Build Coastguard Worker     if (_netResourcePointer)
107*f6dc9357SAndroid Build Coastguard Worker     result = AddConnection2(_netResource,
108*f6dc9357SAndroid Build Coastguard Worker         NULL, NULL, CONNECT_INTERACTIVE);
109*f6dc9357SAndroid Build Coastguard Worker     if (result != NO_ERROR)
110*f6dc9357SAndroid Build Coastguard Worker       return HRESULT_FROM_WIN32(result);
111*f6dc9357SAndroid Build Coastguard Worker   }
112*f6dc9357SAndroid Build Coastguard Worker 
113*f6dc9357SAndroid Build Coastguard Worker   for (;;)
114*f6dc9357SAndroid Build Coastguard Worker   {
115*f6dc9357SAndroid Build Coastguard Worker     CResourceEx resource;
116*f6dc9357SAndroid Build Coastguard Worker     const DWORD result = enumerator.Next(resource);
117*f6dc9357SAndroid Build Coastguard Worker     if (result == NO_ERROR)
118*f6dc9357SAndroid Build Coastguard Worker     {
119*f6dc9357SAndroid Build Coastguard Worker       if (!resource.RemoteNameIsDefined) // For Win 98, I don't know what's wrong
120*f6dc9357SAndroid Build Coastguard Worker         resource.RemoteName = resource.Comment;
121*f6dc9357SAndroid Build Coastguard Worker       resource.Name = resource.RemoteName;
122*f6dc9357SAndroid Build Coastguard Worker       const int pos = resource.Name.ReverseFind_PathSepar();
123*f6dc9357SAndroid Build Coastguard Worker       if (pos >= 0)
124*f6dc9357SAndroid Build Coastguard Worker       {
125*f6dc9357SAndroid Build Coastguard Worker         // _path = resource.Name.Left(pos + 1);
126*f6dc9357SAndroid Build Coastguard Worker         resource.Name.DeleteFrontal((unsigned)pos + 1);
127*f6dc9357SAndroid Build Coastguard Worker       }
128*f6dc9357SAndroid Build Coastguard Worker       _items.Add(resource);
129*f6dc9357SAndroid Build Coastguard Worker     }
130*f6dc9357SAndroid Build Coastguard Worker     else if (result == ERROR_NO_MORE_ITEMS)
131*f6dc9357SAndroid Build Coastguard Worker       break;
132*f6dc9357SAndroid Build Coastguard Worker     else
133*f6dc9357SAndroid Build Coastguard Worker       return HRESULT_FROM_WIN32(result);
134*f6dc9357SAndroid Build Coastguard Worker   }
135*f6dc9357SAndroid Build Coastguard Worker 
136*f6dc9357SAndroid Build Coastguard Worker   /*
137*f6dc9357SAndroid Build Coastguard Worker   It's too slow for some systems.
138*f6dc9357SAndroid Build Coastguard Worker   if (_netResourcePointer && _netResource.DisplayType == RESOURCEDISPLAYTYPE_SERVER)
139*f6dc9357SAndroid Build Coastguard Worker   {
140*f6dc9357SAndroid Build Coastguard Worker     for (char c = 'a'; c <= 'z'; c++)
141*f6dc9357SAndroid Build Coastguard Worker     {
142*f6dc9357SAndroid Build Coastguard Worker       CResourceEx resource;
143*f6dc9357SAndroid Build Coastguard Worker       resource.Name = UString(wchar_t(c)) + L'$';
144*f6dc9357SAndroid Build Coastguard Worker       resource.RemoteNameIsDefined = true;
145*f6dc9357SAndroid Build Coastguard Worker       resource.RemoteName = _path + resource.Name;
146*f6dc9357SAndroid Build Coastguard Worker 
147*f6dc9357SAndroid Build Coastguard Worker       NFile::NFind::CFindFile findFile;
148*f6dc9357SAndroid Build Coastguard Worker       NFile::NFind::CFileInfo fileInfo;
149*f6dc9357SAndroid Build Coastguard Worker       if (!findFile.FindFirst(us2fs(resource.RemoteName) + FString(FCHAR_PATH_SEPARATOR) + FCHAR_ANY_MASK, fileInfo))
150*f6dc9357SAndroid Build Coastguard Worker         continue;
151*f6dc9357SAndroid Build Coastguard Worker       resource.Usage = RESOURCEUSAGE_CONNECTABLE;
152*f6dc9357SAndroid Build Coastguard Worker       resource.LocalNameIsDefined = false;
153*f6dc9357SAndroid Build Coastguard Worker       resource.CommentIsDefined = false;
154*f6dc9357SAndroid Build Coastguard Worker       resource.ProviderIsDefined = false;
155*f6dc9357SAndroid Build Coastguard Worker       _items.Add(resource);
156*f6dc9357SAndroid Build Coastguard Worker     }
157*f6dc9357SAndroid Build Coastguard Worker   }
158*f6dc9357SAndroid Build Coastguard Worker   */
159*f6dc9357SAndroid Build Coastguard Worker   return S_OK;
160*f6dc9357SAndroid Build Coastguard Worker }
161*f6dc9357SAndroid Build Coastguard Worker 
162*f6dc9357SAndroid Build Coastguard Worker 
Z7_COM7F_IMF(CNetFolder::GetNumberOfItems (UInt32 * numItems))163*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(CNetFolder::GetNumberOfItems(UInt32 *numItems))
164*f6dc9357SAndroid Build Coastguard Worker {
165*f6dc9357SAndroid Build Coastguard Worker   *numItems = _items.Size();
166*f6dc9357SAndroid Build Coastguard Worker   return S_OK;
167*f6dc9357SAndroid Build Coastguard Worker }
168*f6dc9357SAndroid Build Coastguard Worker 
Z7_COM7F_IMF(CNetFolder::GetProperty (UInt32 itemIndex,PROPID propID,PROPVARIANT * value))169*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(CNetFolder::GetProperty(UInt32 itemIndex, PROPID propID, PROPVARIANT *value))
170*f6dc9357SAndroid Build Coastguard Worker {
171*f6dc9357SAndroid Build Coastguard Worker   NCOM::CPropVariant prop;
172*f6dc9357SAndroid Build Coastguard Worker   const CResourceEx &item = _items[itemIndex];
173*f6dc9357SAndroid Build Coastguard Worker   switch (propID)
174*f6dc9357SAndroid Build Coastguard Worker   {
175*f6dc9357SAndroid Build Coastguard Worker     case kpidIsDir:  prop = true; break;
176*f6dc9357SAndroid Build Coastguard Worker     case kpidName:
177*f6dc9357SAndroid Build Coastguard Worker       // if (item.RemoteNameIsDefined)
178*f6dc9357SAndroid Build Coastguard Worker         prop = item.Name;
179*f6dc9357SAndroid Build Coastguard Worker       break;
180*f6dc9357SAndroid Build Coastguard Worker     case kpidLocalName:  if (item.LocalNameIsDefined) prop = item.LocalName; break;
181*f6dc9357SAndroid Build Coastguard Worker     case kpidComment: if (item.CommentIsDefined) prop = item.Comment; break;
182*f6dc9357SAndroid Build Coastguard Worker     case kpidProvider: if (item.ProviderIsDefined) prop = item.Provider; break;
183*f6dc9357SAndroid Build Coastguard Worker   }
184*f6dc9357SAndroid Build Coastguard Worker   prop.Detach(value);
185*f6dc9357SAndroid Build Coastguard Worker   return S_OK;
186*f6dc9357SAndroid Build Coastguard Worker }
187*f6dc9357SAndroid Build Coastguard Worker 
Z7_COM7F_IMF(CNetFolder::BindToFolder (UInt32 index,IFolderFolder ** resultFolder))188*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(CNetFolder::BindToFolder(UInt32 index, IFolderFolder **resultFolder))
189*f6dc9357SAndroid Build Coastguard Worker {
190*f6dc9357SAndroid Build Coastguard Worker   *resultFolder = NULL;
191*f6dc9357SAndroid Build Coastguard Worker   const CResourceEx &resource = _items[index];
192*f6dc9357SAndroid Build Coastguard Worker   if (resource.Usage == RESOURCEUSAGE_CONNECTABLE ||
193*f6dc9357SAndroid Build Coastguard Worker       resource.DisplayType == RESOURCEDISPLAYTYPE_SHARE)
194*f6dc9357SAndroid Build Coastguard Worker   {
195*f6dc9357SAndroid Build Coastguard Worker     NFsFolder::CFSFolder *fsFolderSpec = new NFsFolder::CFSFolder;
196*f6dc9357SAndroid Build Coastguard Worker     CMyComPtr<IFolderFolder> subFolder = fsFolderSpec;
197*f6dc9357SAndroid Build Coastguard Worker     RINOK(fsFolderSpec->Init(us2fs(resource.RemoteName + WCHAR_PATH_SEPARATOR))) // , this
198*f6dc9357SAndroid Build Coastguard Worker     *resultFolder = subFolder.Detach();
199*f6dc9357SAndroid Build Coastguard Worker   }
200*f6dc9357SAndroid Build Coastguard Worker   else
201*f6dc9357SAndroid Build Coastguard Worker   {
202*f6dc9357SAndroid Build Coastguard Worker     CNetFolder *netFolder = new CNetFolder;
203*f6dc9357SAndroid Build Coastguard Worker     CMyComPtr<IFolderFolder> subFolder = netFolder;
204*f6dc9357SAndroid Build Coastguard Worker     netFolder->Init(&resource, this, resource.Name + WCHAR_PATH_SEPARATOR);
205*f6dc9357SAndroid Build Coastguard Worker     *resultFolder = subFolder.Detach();
206*f6dc9357SAndroid Build Coastguard Worker   }
207*f6dc9357SAndroid Build Coastguard Worker   return S_OK;
208*f6dc9357SAndroid Build Coastguard Worker }
209*f6dc9357SAndroid Build Coastguard Worker 
Z7_COM7F_IMF(CNetFolder::BindToFolder (const wchar_t *,IFolderFolder **))210*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(CNetFolder::BindToFolder(const wchar_t * /* name */, IFolderFolder ** /* resultFolder */))
211*f6dc9357SAndroid Build Coastguard Worker {
212*f6dc9357SAndroid Build Coastguard Worker   return E_NOTIMPL;
213*f6dc9357SAndroid Build Coastguard Worker }
214*f6dc9357SAndroid Build Coastguard Worker 
Z7_COM7F_IMF(CNetFolder::BindToParentFolder (IFolderFolder ** resultFolder))215*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(CNetFolder::BindToParentFolder(IFolderFolder **resultFolder))
216*f6dc9357SAndroid Build Coastguard Worker {
217*f6dc9357SAndroid Build Coastguard Worker   *resultFolder = NULL;
218*f6dc9357SAndroid Build Coastguard Worker   if (_parentFolder)
219*f6dc9357SAndroid Build Coastguard Worker   {
220*f6dc9357SAndroid Build Coastguard Worker     CMyComPtr<IFolderFolder> parentFolder = _parentFolder;
221*f6dc9357SAndroid Build Coastguard Worker     *resultFolder = parentFolder.Detach();
222*f6dc9357SAndroid Build Coastguard Worker     return S_OK;
223*f6dc9357SAndroid Build Coastguard Worker   }
224*f6dc9357SAndroid Build Coastguard Worker   if (_netResourcePointer)
225*f6dc9357SAndroid Build Coastguard Worker   {
226*f6dc9357SAndroid Build Coastguard Worker     CResourceW resourceParent;
227*f6dc9357SAndroid Build Coastguard Worker     const DWORD result = GetResourceParent(_netResource, resourceParent);
228*f6dc9357SAndroid Build Coastguard Worker     if (result != NO_ERROR)
229*f6dc9357SAndroid Build Coastguard Worker       return HRESULT_FROM_WIN32(result);
230*f6dc9357SAndroid Build Coastguard Worker     if (!_netResource.RemoteNameIsDefined)
231*f6dc9357SAndroid Build Coastguard Worker       return S_OK;
232*f6dc9357SAndroid Build Coastguard Worker 
233*f6dc9357SAndroid Build Coastguard Worker     CNetFolder *netFolder = new CNetFolder;
234*f6dc9357SAndroid Build Coastguard Worker     CMyComPtr<IFolderFolder> subFolder = netFolder;
235*f6dc9357SAndroid Build Coastguard Worker     netFolder->Init(&resourceParent, NULL, WSTRING_PATH_SEPARATOR);
236*f6dc9357SAndroid Build Coastguard Worker     *resultFolder = subFolder.Detach();
237*f6dc9357SAndroid Build Coastguard Worker   }
238*f6dc9357SAndroid Build Coastguard Worker   return S_OK;
239*f6dc9357SAndroid Build Coastguard Worker }
240*f6dc9357SAndroid Build Coastguard Worker 
241*f6dc9357SAndroid Build Coastguard Worker IMP_IFolderFolder_Props(CNetFolder)
242*f6dc9357SAndroid Build Coastguard Worker 
Z7_COM7F_IMF(CNetFolder::GetFolderProperty (PROPID propID,PROPVARIANT * value))243*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(CNetFolder::GetFolderProperty(PROPID propID, PROPVARIANT *value))
244*f6dc9357SAndroid Build Coastguard Worker {
245*f6dc9357SAndroid Build Coastguard Worker   NWindows::NCOM::CPropVariant prop;
246*f6dc9357SAndroid Build Coastguard Worker   switch (propID)
247*f6dc9357SAndroid Build Coastguard Worker   {
248*f6dc9357SAndroid Build Coastguard Worker     case kpidType: prop = "NetFolder"; break;
249*f6dc9357SAndroid Build Coastguard Worker     case kpidPath: prop = _path; break;
250*f6dc9357SAndroid Build Coastguard Worker   }
251*f6dc9357SAndroid Build Coastguard Worker   prop.Detach(value);
252*f6dc9357SAndroid Build Coastguard Worker   return S_OK;
253*f6dc9357SAndroid Build Coastguard Worker }
254*f6dc9357SAndroid Build Coastguard Worker 
Z7_COM7F_IMF(CNetFolder::GetSystemIconIndex (UInt32 index,Int32 * iconIndex))255*f6dc9357SAndroid Build Coastguard Worker Z7_COM7F_IMF(CNetFolder::GetSystemIconIndex(UInt32 index, Int32 *iconIndex))
256*f6dc9357SAndroid Build Coastguard Worker {
257*f6dc9357SAndroid Build Coastguard Worker   *iconIndex = -1;
258*f6dc9357SAndroid Build Coastguard Worker   if (index >= _items.Size())
259*f6dc9357SAndroid Build Coastguard Worker     return E_INVALIDARG;
260*f6dc9357SAndroid Build Coastguard Worker   const CResourceW &resource = _items[index];
261*f6dc9357SAndroid Build Coastguard Worker   if (resource.DisplayType == RESOURCEDISPLAYTYPE_SERVER ||
262*f6dc9357SAndroid Build Coastguard Worker       resource.Usage == RESOURCEUSAGE_CONNECTABLE)
263*f6dc9357SAndroid Build Coastguard Worker   {
264*f6dc9357SAndroid Build Coastguard Worker     return Shell_GetFileInfo_SysIconIndex_for_Path_return_HRESULT(
265*f6dc9357SAndroid Build Coastguard Worker         us2fs(resource.RemoteName), FILE_ATTRIBUTE_DIRECTORY, iconIndex);
266*f6dc9357SAndroid Build Coastguard Worker   }
267*f6dc9357SAndroid Build Coastguard Worker   else
268*f6dc9357SAndroid Build Coastguard Worker   {
269*f6dc9357SAndroid Build Coastguard Worker #if 0
270*f6dc9357SAndroid Build Coastguard Worker     return S_FALSE;
271*f6dc9357SAndroid Build Coastguard Worker #else
272*f6dc9357SAndroid Build Coastguard Worker     return Shell_GetFileInfo_SysIconIndex_for_Path_return_HRESULT(
273*f6dc9357SAndroid Build Coastguard Worker         FTEXT("__DIR__"), FILE_ATTRIBUTE_DIRECTORY, iconIndex);
274*f6dc9357SAndroid Build Coastguard Worker #endif
275*f6dc9357SAndroid Build Coastguard Worker   }
276*f6dc9357SAndroid Build Coastguard Worker }
277