mirror of
https://github.com/reactos/reactos.git
synced 2024-06-30 09:50:07 +00:00
[XML2SDB] Add support for DATA in Layers.
This commit is contained in:
parent
083c3d992b
commit
767fc4a6ad
|
@ -14,7 +14,7 @@
|
||||||
using tinyxml2::XMLText;
|
using tinyxml2::XMLText;
|
||||||
|
|
||||||
static const GUID GUID_NULL = { 0 };
|
static const GUID GUID_NULL = { 0 };
|
||||||
static const char szCompilerVersion[] = "1.7.0.0";
|
static const char szCompilerVersion[] = "1.7.0.1";
|
||||||
|
|
||||||
#if !defined(C_ASSERT)
|
#if !defined(C_ASSERT)
|
||||||
#define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1]
|
#define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1]
|
||||||
|
@ -398,6 +398,69 @@ bool Flag::toSdb(PDB pdb, Database& db)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* Data
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef REG_SZ
|
||||||
|
#define REG_SZ 1
|
||||||
|
//#define REG_BINARY 3
|
||||||
|
#define REG_DWORD 4
|
||||||
|
#define REG_QWORD 11
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
bool Data::fromXml(XMLHandle dbNode)
|
||||||
|
{
|
||||||
|
Name = ReadStringNode(dbNode, "NAME");
|
||||||
|
|
||||||
|
StringData = ReadStringNode(dbNode, "DATA_STRING");
|
||||||
|
if (!StringData.empty())
|
||||||
|
{
|
||||||
|
DataType = REG_SZ;
|
||||||
|
return !Name.empty();
|
||||||
|
}
|
||||||
|
DWordData = ReadDWordNode(dbNode, "DATA_DWORD");
|
||||||
|
if (DWordData)
|
||||||
|
{
|
||||||
|
DataType = REG_DWORD;
|
||||||
|
return !Name.empty();
|
||||||
|
}
|
||||||
|
QWordData = ReadQWordNode(dbNode, "DATA_QWORD");
|
||||||
|
if (QWordData)
|
||||||
|
{
|
||||||
|
DataType = REG_QWORD;
|
||||||
|
return !Name.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
SHIM_ERR("Data node (%s) without value!\n", Name.c_str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Data::toSdb(PDB pdb, Database& db)
|
||||||
|
{
|
||||||
|
Tagid = db.BeginWriteListTag(pdb, TAG_DATA);
|
||||||
|
db.WriteString(pdb, TAG_NAME, Name, true);
|
||||||
|
db.WriteDWord(pdb, TAG_DATA_VALUETYPE, DataType, true);
|
||||||
|
switch (DataType)
|
||||||
|
{
|
||||||
|
case REG_SZ:
|
||||||
|
db.WriteString(pdb, TAG_DATA_STRING, StringData);
|
||||||
|
break;
|
||||||
|
case REG_DWORD:
|
||||||
|
db.WriteDWord(pdb, TAG_DATA_DWORD, DWordData);
|
||||||
|
break;
|
||||||
|
case REG_QWORD:
|
||||||
|
db.WriteQWord(pdb, TAG_DATA_QWORD, QWordData);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
SHIM_ERR("Data node (%s) with unknown type (0x%x)\n", Name.c_str(), DataType);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return !!db.EndWriteListTag(pdb, Tagid);
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* Layer
|
* Layer
|
||||||
*/
|
*/
|
||||||
|
@ -407,6 +470,7 @@ bool Layer::fromXml(XMLHandle dbNode)
|
||||||
Name = ReadStringNode(dbNode, "NAME");
|
Name = ReadStringNode(dbNode, "NAME");
|
||||||
ReadGeneric(dbNode, ShimRefs, "SHIM_REF");
|
ReadGeneric(dbNode, ShimRefs, "SHIM_REF");
|
||||||
ReadGeneric(dbNode, FlagRefs, "FLAG_REF");
|
ReadGeneric(dbNode, FlagRefs, "FLAG_REF");
|
||||||
|
ReadGeneric(dbNode, Datas, "DATA");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -418,6 +482,8 @@ bool Layer::toSdb(PDB pdb, Database& db)
|
||||||
return false;
|
return false;
|
||||||
if (!WriteGeneric(pdb, FlagRefs, db))
|
if (!WriteGeneric(pdb, FlagRefs, db))
|
||||||
return false;
|
return false;
|
||||||
|
if (!WriteGeneric(pdb, Datas, db))
|
||||||
|
return false;
|
||||||
return !!db.EndWriteListTag(pdb, Tagid);
|
return !!db.EndWriteListTag(pdb, Tagid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -91,6 +91,22 @@ struct Flag
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
struct Data
|
||||||
|
{
|
||||||
|
Data() : Tagid(0), DataType(0), DWordData(0), QWordData(0) { ; }
|
||||||
|
|
||||||
|
bool fromXml(XMLHandle dbNode);
|
||||||
|
bool toSdb(PDB pdb, Database& db);
|
||||||
|
|
||||||
|
std::string Name;
|
||||||
|
TAGID Tagid;
|
||||||
|
DWORD DataType;
|
||||||
|
|
||||||
|
std::string StringData;
|
||||||
|
DWORD DWordData;
|
||||||
|
QWORD QWordData;
|
||||||
|
};
|
||||||
|
|
||||||
struct Layer
|
struct Layer
|
||||||
{
|
{
|
||||||
Layer() : Tagid(0) { ; }
|
Layer() : Tagid(0) { ; }
|
||||||
|
@ -102,6 +118,7 @@ struct Layer
|
||||||
TAGID Tagid;
|
TAGID Tagid;
|
||||||
std::list<ShimRef> ShimRefs;
|
std::list<ShimRef> ShimRefs;
|
||||||
std::list<FlagRef> FlagRefs;
|
std::list<FlagRef> FlagRefs;
|
||||||
|
std::list<Data> Datas;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MatchingFile
|
struct MatchingFile
|
||||||
|
|
Loading…
Reference in a new issue