When a directory can't accessed, don't assert, return false
from wxDir and give a suppressable error message. This fixes problems reading e.g. .vol directories. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26271 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -81,6 +81,7 @@ public:
|
|||||||
void Rewind() ;
|
void Rewind() ;
|
||||||
|
|
||||||
const wxString& GetName() const { return m_dirname; }
|
const wxString& GetName() const { return m_dirname; }
|
||||||
|
bool Ok() const { return m_ok; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CInfoPBRec m_CPB ;
|
CInfoPBRec m_CPB ;
|
||||||
@@ -93,6 +94,7 @@ private:
|
|||||||
wxString m_filespec;
|
wxString m_filespec;
|
||||||
|
|
||||||
int m_flags;
|
int m_flags;
|
||||||
|
bool m_ok;
|
||||||
};
|
};
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -106,6 +108,8 @@ private:
|
|||||||
wxDirData::wxDirData(const wxString& dirname)
|
wxDirData::wxDirData(const wxString& dirname)
|
||||||
: m_dirname(dirname)
|
: m_dirname(dirname)
|
||||||
{
|
{
|
||||||
|
m_ok = false;
|
||||||
|
|
||||||
OSErr err;
|
OSErr err;
|
||||||
|
|
||||||
// throw away the trailing slashes
|
// throw away the trailing slashes
|
||||||
@@ -133,7 +137,11 @@ wxDirData::wxDirData(const wxString& dirname)
|
|||||||
|
|
||||||
err = FSpGetDirectoryID( &fsspec , &m_dirId , &m_isDir ) ;
|
err = FSpGetDirectoryID( &fsspec , &m_dirId , &m_isDir ) ;
|
||||||
#endif
|
#endif
|
||||||
wxASSERT_MSG( (err == noErr) || (err == nsvErr) , wxT("Error accessing directory " + m_dirname)) ;
|
//wxASSERT_MSG( (err == noErr) || (err == nsvErr) , wxT("Error accessing directory " + m_dirname)) ;
|
||||||
|
if ( (err == noErr) || (err == nsvErr))
|
||||||
|
m_ok = true;
|
||||||
|
else
|
||||||
|
wxLogError(wxString(wxT("Error accessing directory ")) + m_dirname);
|
||||||
|
|
||||||
m_CPB.hFileInfo.ioNamePtr = m_name ;
|
m_CPB.hFileInfo.ioNamePtr = m_name ;
|
||||||
m_index = 0 ;
|
m_index = 0 ;
|
||||||
@@ -247,8 +255,14 @@ bool wxDir::Open(const wxString& dirname)
|
|||||||
{
|
{
|
||||||
delete M_DIR;
|
delete M_DIR;
|
||||||
m_data = new wxDirData(dirname);
|
m_data = new wxDirData(dirname);
|
||||||
|
if (m_data->Ok())
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delete m_data;
|
||||||
|
m_data = NULL;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxDir::IsOpened() const
|
bool wxDir::IsOpened() const
|
||||||
|
@@ -81,6 +81,7 @@ public:
|
|||||||
void Rewind() ;
|
void Rewind() ;
|
||||||
|
|
||||||
const wxString& GetName() const { return m_dirname; }
|
const wxString& GetName() const { return m_dirname; }
|
||||||
|
bool Ok() const { return m_ok; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
CInfoPBRec m_CPB ;
|
CInfoPBRec m_CPB ;
|
||||||
@@ -93,6 +94,7 @@ private:
|
|||||||
wxString m_filespec;
|
wxString m_filespec;
|
||||||
|
|
||||||
int m_flags;
|
int m_flags;
|
||||||
|
bool m_ok;
|
||||||
};
|
};
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -106,6 +108,8 @@ private:
|
|||||||
wxDirData::wxDirData(const wxString& dirname)
|
wxDirData::wxDirData(const wxString& dirname)
|
||||||
: m_dirname(dirname)
|
: m_dirname(dirname)
|
||||||
{
|
{
|
||||||
|
m_ok = false;
|
||||||
|
|
||||||
OSErr err;
|
OSErr err;
|
||||||
|
|
||||||
// throw away the trailing slashes
|
// throw away the trailing slashes
|
||||||
@@ -133,7 +137,11 @@ wxDirData::wxDirData(const wxString& dirname)
|
|||||||
|
|
||||||
err = FSpGetDirectoryID( &fsspec , &m_dirId , &m_isDir ) ;
|
err = FSpGetDirectoryID( &fsspec , &m_dirId , &m_isDir ) ;
|
||||||
#endif
|
#endif
|
||||||
wxASSERT_MSG( (err == noErr) || (err == nsvErr) , wxT("Error accessing directory " + m_dirname)) ;
|
//wxASSERT_MSG( (err == noErr) || (err == nsvErr) , wxT("Error accessing directory " + m_dirname)) ;
|
||||||
|
if ( (err == noErr) || (err == nsvErr))
|
||||||
|
m_ok = true;
|
||||||
|
else
|
||||||
|
wxLogError(wxString(wxT("Error accessing directory ")) + m_dirname);
|
||||||
|
|
||||||
m_CPB.hFileInfo.ioNamePtr = m_name ;
|
m_CPB.hFileInfo.ioNamePtr = m_name ;
|
||||||
m_index = 0 ;
|
m_index = 0 ;
|
||||||
@@ -247,8 +255,14 @@ bool wxDir::Open(const wxString& dirname)
|
|||||||
{
|
{
|
||||||
delete M_DIR;
|
delete M_DIR;
|
||||||
m_data = new wxDirData(dirname);
|
m_data = new wxDirData(dirname);
|
||||||
|
if (m_data->Ok())
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delete m_data;
|
||||||
|
m_data = NULL;
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxDir::IsOpened() const
|
bool wxDir::IsOpened() const
|
||||||
|
Reference in New Issue
Block a user