+ m_type = is_drive;
+ m_size = 0;
+ return;
+ }
+#endif // __DOS__ || __WINDOWS__
+
+#ifdef __WXWINCE__
+
+ // WinCE
+
+ DWORD fileAttribs = GetFileAttributes(m_filePath.fn_str());
+ m_type |= (fileAttribs & FILE_ATTRIBUTE_DIRECTORY) != 0 ? is_dir : 0;
+
+ wxString p, f, ext;
+ wxSplitPath(m_filePath, & p, & f, & ext);
+ if (wxStricmp(ext, wxT("exe")) == 0)
+ m_type |= is_exe;
+
+ // Find out size
+ m_size = 0;
+ HANDLE fileHandle = CreateFile(m_filePath.fn_str(),
+ GENERIC_READ,
+ FILE_SHARE_READ,
+ NULL,
+ OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL,
+ NULL);
+
+ if (fileHandle != INVALID_HANDLE_VALUE)
+ {
+ m_size = GetFileSize(fileHandle, 0);
+ CloseHandle(fileHandle);
+ }
+
+ m_dateTime = wxFileModificationTime(m_filePath);
+
+#else
+
+ // OTHER PLATFORMS
+
+ wxStructStat buff;
+
+#if defined(__UNIX__) && (!defined( __OS2__ ) && !defined(__VMS))
+ lstat( m_filePath.fn_str(), &buff );
+ m_type |= S_ISLNK( buff.st_mode ) != 0 ? is_link : 0;
+#else // no lstat()
+ // only translate to file charset if we don't go by our
+ // wxStat implementation
+#ifndef wxNEED_WX_UNISTD_H
+ wxStat( m_filePath.fn_str() , &buff );
+#else
+ wxStat( m_filePath, &buff );
+#endif
+#endif
+
+ m_type |= (buff.st_mode & S_IFDIR) != 0 ? is_dir : 0;
+ m_type |= (buff.st_mode & wxS_IXUSR) != 0 ? is_exe : 0;
+
+ m_size = buff.st_size;
+
+ m_dateTime = buff.st_mtime;
+#endif
+ // __WXWINCE__
+
+#if defined(__UNIX__)
+ m_permissions.Printf(_T("%c%c%c%c%c%c%c%c%c"),
+ buff.st_mode & wxS_IRUSR ? _T('r') : _T('-'),
+ buff.st_mode & wxS_IWUSR ? _T('w') : _T('-'),
+ buff.st_mode & wxS_IXUSR ? _T('x') : _T('-'),
+ buff.st_mode & wxS_IRGRP ? _T('r') : _T('-'),
+ buff.st_mode & wxS_IWGRP ? _T('w') : _T('-'),
+ buff.st_mode & wxS_IXGRP ? _T('x') : _T('-'),
+ buff.st_mode & wxS_IROTH ? _T('r') : _T('-'),
+ buff.st_mode & wxS_IWOTH ? _T('w') : _T('-'),
+ buff.st_mode & wxS_IXOTH ? _T('x') : _T('-'));
+#elif defined(__WIN32__)
+ DWORD attribs = ::GetFileAttributes(m_filePath.c_str());
+ if (attribs != (DWORD)-1)
+ {
+ m_permissions.Printf(_T("%c%c%c%c"),
+ attribs & FILE_ATTRIBUTE_ARCHIVE ? _T('A') : _T(' '),
+ attribs & FILE_ATTRIBUTE_READONLY ? _T('R') : _T(' '),
+ attribs & FILE_ATTRIBUTE_HIDDEN ? _T('H') : _T(' '),
+ attribs & FILE_ATTRIBUTE_SYSTEM ? _T('S') : _T(' '));
+ }
+#endif
+
+ // try to get a better icon
+ if (m_image == wxFileIconsTable::file)
+ {
+ if (m_fileName.Find(wxT('.'), true) != wxNOT_FOUND)