error checking

This commit is contained in:
Glenn Maynard
2004-06-06 20:47:48 +00:00
parent d7e4964cf6
commit d044b29ca4
2 changed files with 54 additions and 24 deletions
+50 -21
View File
@@ -516,9 +516,9 @@ char* XNode::Load( const char* pszXml, LPPARSEINFO pi /*= &piDefault*/ )
// Coder Date Desc // Coder Date Desc
// bro 2002-10-29 // bro 2002-10-29
//======================================================== //========================================================
void XAttr::GetXML( RageFile &f, LPDISP_OPT opt /*= &optDefault*/ ) bool XAttr::GetXML( RageFile &f, LPDISP_OPT opt /*= &optDefault*/ )
{ {
f.Write(name + "='" + (opt->reference_value&&opt->entitys?opt->entitys->Entity2Ref(value):value) + "' "); return f.Write(name + "='" + (opt->reference_value&&opt->entitys?opt->entitys->Entity2Ref(value):value) + "' ") != -1;
} }
//======================================================== //========================================================
@@ -530,44 +530,52 @@ void XAttr::GetXML( RageFile &f, LPDISP_OPT opt /*= &optDefault*/ )
// Coder Date Desc // Coder Date Desc
// bro 2002-10-29 // bro 2002-10-29
//======================================================== //========================================================
void XNode::GetXML( RageFile &f, LPDISP_OPT opt /*= &optDefault*/ ) bool XNode::GetXML( RageFile &f, LPDISP_OPT opt /*= &optDefault*/ )
{ {
// tab // tab
if( opt && opt->newline ) if( opt && opt->newline )
{ {
if( opt && opt->newline ) if( opt && opt->newline )
f.Write("\r\n"); if( f.Write("\r\n") == -1 )
return false;
for( int i = 0 ; i < opt->tab_base ; i++) for( int i = 0 ; i < opt->tab_base ; i++)
f.Write("\t"); if( f.Write("\t") == -1 )
return false;
} }
// <TAG // <TAG
f.Write("<" + name); if( f.Write("<" + name) == -1 )
return false;
// <TAG Attr1="Val1" // <TAG Attr1="Val1"
if( attrs.empty() == false ) f.Write(" "); //os << ' '; if( attrs.empty() == false )
if( f.Write(" ") == -1 )
return false;
for( unsigned i = 0 ; i < attrs.size(); i++ ) for( unsigned i = 0 ; i < attrs.size(); i++ )
{ if( !attrs[i]->GetXML(f, opt) )
attrs[i]->GetXML(f, opt); return false;
}
if( childs.empty() && value.empty() ) if( childs.empty() && value.empty() )
{ {
// <TAG Attr1="Val1"/> alone tag // <TAG Attr1="Val1"/> alone tag
f.Write("/>"); if( f.Write("/>") == -1 )
return false;
} }
else else
{ {
// <TAG Attr1="Val1"> and get child // <TAG Attr1="Val1"> and get child
f.Write(">"); if( f.Write(">") == -1 )
return false;
if( opt && opt->newline && !childs.empty() ) if( opt && opt->newline && !childs.empty() )
{ {
opt->tab_base++; opt->tab_base++;
} }
for( unsigned i = 0 ; i < childs.size(); i++ ) for( unsigned i = 0 ; i < childs.size(); i++ )
childs[i]->GetXML( f, opt ); if( !childs[i]->GetXML( f, opt ) )
return false;
// Text Value // Text Value
if( value != ("") ) if( value != ("") )
@@ -575,21 +583,27 @@ void XNode::GetXML( RageFile &f, LPDISP_OPT opt /*= &optDefault*/ )
if( opt && opt->newline && !childs.empty() ) if( opt && opt->newline && !childs.empty() )
{ {
if( opt && opt->newline ) if( opt && opt->newline )
f.Write("\r\n"); if( f.Write("\r\n") == -1 )
return false;
for( int i = 0 ; i < opt->tab_base ; i++) for( int i = 0 ; i < opt->tab_base ; i++)
f.Write("\t"); if( f.Write("\t") == -1 )
return false;
} }
f.Write((opt->reference_value&&opt->entitys?opt->entitys->Entity2Ref(value):value)); if( f.Write((opt->reference_value&&opt->entitys?opt->entitys->Entity2Ref(value):value)) == -1 )
return false;
} }
// </TAG> CloseTag // </TAG> CloseTag
if( opt && opt->newline && !childs.empty() ) if( opt && opt->newline && !childs.empty() )
{ {
f.Write("\r\n"); if( f.Write("\r\n") == -1 )
return false;
for( int i = 0 ; i < opt->tab_base-1 ; i++) for( int i = 0 ; i < opt->tab_base-1 ; i++)
f.Write("\t"); if( f.Write("\t") == -1 )
return false;
} }
f.Write("</" + name + ">"); if( f.Write("</" + name + ">") == -1 )
return false;
if( opt && opt->newline ) if( opt && opt->newline )
{ {
@@ -597,6 +611,7 @@ void XNode::GetXML( RageFile &f, LPDISP_OPT opt /*= &optDefault*/ )
opt->tab_base--; opt->tab_base--;
} }
} }
return true;
} }
//======================================================== //========================================================
@@ -1191,7 +1206,18 @@ bool XNode::LoadFromFile( CString sFile, LPPARSEINFO pi )
return false; return false;
} }
CString s; CString s;
f.Read( s ); if( f.Read( s ) == -1 )
{
if( pi )
{
pi->erorr_occur = true;
pi->error_pointer = NULL;
pi->error_code = PIE_READ_ERROR;
pi->error_string = f.GetError();
}
return false;
}
this->Load( s, pi ); this->Load( s, pi );
return true; return true;
} }
@@ -1204,6 +1230,9 @@ bool XNode::SaveToFile( CString sFile, LPDISP_OPT opt )
LOG->Warn("Couldn't open %s for writing: %s", sFile.c_str(), f.GetError().c_str() ); LOG->Warn("Couldn't open %s for writing: %s", sFile.c_str(), f.GetError().c_str() );
return false; return false;
} }
this->GetXML(f, opt); if( !this->GetXML(f, opt) )
return false;
if( f.Flush() == -1 )
return false;
return true; return true;
} }
+4 -3
View File
@@ -62,7 +62,8 @@ enum PCODE
PIE_ALONE_NOT_CLOSED, PIE_ALONE_NOT_CLOSED,
PIE_NOT_CLOSED, PIE_NOT_CLOSED,
PIE_NOT_NESTED, PIE_NOT_NESTED,
PIE_ATTR_NO_VALUE PIE_ATTR_NO_VALUE,
PIE_READ_ERROR
}; };
// Parse info. // Parse info.
@@ -110,7 +111,7 @@ struct XAttr
XNode* parent; XNode* parent;
void GetXML( RageFile &f, LPDISP_OPT opt = &optDefault ); bool GetXML( RageFile &f, LPDISP_OPT opt = &optDefault );
}; };
typedef XAttr* LPXAttr; typedef XAttr* LPXAttr;
@@ -134,7 +135,7 @@ struct XNode
// Load/Save XML // Load/Save XML
char* Load( const char* pszXml, LPPARSEINFO pi = &piDefault ); char* Load( const char* pszXml, LPPARSEINFO pi = &piDefault );
char* LoadAttributes( const char* pszAttrs, LPPARSEINFO pi = &piDefault ); char* LoadAttributes( const char* pszAttrs, LPPARSEINFO pi = &piDefault );
void GetXML( RageFile &f, LPDISP_OPT opt = &optDefault ); bool GetXML( RageFile &f, LPDISP_OPT opt = &optDefault );
bool LoadFromFile( CString sFile, LPPARSEINFO pi = &piDefault ); bool LoadFromFile( CString sFile, LPPARSEINFO pi = &piDefault );
bool SaveToFile( CString sFile, LPDISP_OPT opt = &optDefault ); bool SaveToFile( CString sFile, LPDISP_OPT opt = &optDefault );