ReactOS 0.4.15-dev-8127-g6338913
main.cpp File Reference
#include "xml2sdb.h"
#include "sdbpapi.h"
#include "sdbstringtable.h"
#include <time.h>
#include <stdio.h>
#include <stdarg.h>
Include dependency graph for main.cpp:

Go to the source code of this file.

Macros

#define TICKSPERSEC   10000000
 
#define TICKSTO1970   0x019db1ded53e8000i64
 

Functions

LPVOID WINAPI SdbpAlloc (SIZE_T size)
 
LPVOID WINAPI SdbpReAlloc (LPVOID mem, SIZE_T size, SIZE_T oldSize)
 
void WINAPI SdbpFree (LPVOID mem)
 
DWORD SdbpStrlen (PCWSTR string)
 
DWORD WINAPI SdbpStrsize (PCWSTR string)
 
PDB WINAPI SdbpCreate (LPCWSTR path, PATH_TYPE type, BOOL write)
 
void WINAPI SdbpFlush (PDB pdb)
 
void WINAPI SdbCloseDatabase (PDB pdb)
 
BOOL WINAPI SdbpCheckTagType (TAG tag, WORD type)
 
BOOL WINAPI SdbpReadData (PDB pdb, PVOID dest, DWORD offset, DWORD num)
 
TAG WINAPI SdbGetTagFromTagID (PDB pdb, TAGID tagid)
 
BOOL WINAPI SdbpCheckTagIDType (PDB pdb, TAGID tagid, WORD type)
 
BOOL WINAPIV ShimDbgPrint (SHIM_LOG_LEVEL Level, PCSTR FunctionName, PCSTR Format,...)
 
VOID NTAPI RtlSecondsSince1970ToTime (IN ULONG SecondsSince1970, OUT PLARGE_INTEGER Time)
 
bool xml_2_db (const char *xml, const WCHAR *sdb)
 
static bool run_one (std::string &input, std::string &output)
 
static std::string get_strarg (int argc, char *argv[], int &i)
 
static void update_loglevel (int argc, char *argv[], int &i)
 
int main (int argc, char *argv[])
 

Variables

ULONG g_ShimDebugLevel = SHIM_WARN
 

Macro Definition Documentation

◆ TICKSPERSEC

#define TICKSPERSEC   10000000

Definition at line 161 of file main.cpp.

◆ TICKSTO1970

#define TICKSTO1970   0x019db1ded53e8000i64

Definition at line 165 of file main.cpp.

Function Documentation

◆ get_strarg()

static std::string get_strarg ( int  argc,
char argv[],
int i 
)
static

Definition at line 188 of file main.cpp.

189{
190 if (argv[i][2] != 0)
191 return std::string(argv[i] + 2);
192
193 ++i;
194 if (i >= argc || !argv[i])
195 return std::string();
196 return argv[i];
197}
static int argc
Definition: ServiceArgs.c:12
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define argv
Definition: mplay32.c:18

Referenced by main(), and update_loglevel().

◆ main()

int main ( int argc  ,
char argv[] 
)

Definition at line 205 of file main.cpp.

206{
207 std::string input, output;
208 srand(time(0));
209
210 for (int i = 1; i < argc; ++i)
211 {
212 if (argv[i][0] != '/' && argv[i][0] != '-')
213 continue;
214
215 switch(argv[i][1])
216 {
217 case 'i':
219 break;
220 case 'o':
221 output = get_strarg(argc, argv, i);
222 break;
223 case 'l':
225 break;
226 }
227 if (input.empty() || output.empty())
228 continue;
229
230 if (!run_one(input, output))
231 {
232 printf("Failed converting '%s' to '%s'\n", input.c_str(), output.c_str());
233 return 1;
234 }
235 }
236 return 0;
237}
#define printf
Definition: freeldr.h:97
GLenum GLenum GLenum input
Definition: glext.h:9031
void __cdecl srand(_In_ unsigned int _Seed)
__u16 time
Definition: mkdosfs.c:8
static void update_loglevel(int argc, char *argv[], int &i)
Definition: main.cpp:199
static std::string get_strarg(int argc, char *argv[], int &i)
Definition: main.cpp:188
static bool run_one(std::string &input, std::string &output)
Definition: main.cpp:179

◆ RtlSecondsSince1970ToTime()

VOID NTAPI RtlSecondsSince1970ToTime ( IN ULONG  SecondsSince1970,
OUT PLARGE_INTEGER  Time 
)

Definition at line 167 of file main.cpp.

169{
170 Time->QuadPart = ((LONGLONG)SecondsSince1970 * TICKSPERSEC) + TICKSTO1970;
171}
static PLARGE_INTEGER Time
Definition: time.c:105
#define TICKSPERSEC
Definition: main.cpp:161
#define TICKSTO1970
Definition: main.cpp:165
int64_t LONGLONG
Definition: typedefs.h:68
LONGLONG QuadPart
Definition: typedefs.h:114

◆ run_one()

static bool run_one ( std::string &  input,
std::string &  output 
)
static

Definition at line 179 of file main.cpp.

180{
181 sdbstring outputW(output.begin(), output.end());
182 if (!xml_2_db(input.c_str(), outputW.c_str()))
183 return false;
184 input = output = "";
185 return true;
186}
bool xml_2_db(const char *xml, const WCHAR *sdb)
Definition: xml2sdb.cpp:765
std::basic_string< WCHAR > sdbstring
Definition: xml2sdb.h:27

Referenced by main().

◆ SdbCloseDatabase()

void WINAPI SdbCloseDatabase ( PDB  pdb)

Closes specified database and frees its memory.

Parameters
[in]pdbHandle to the shim database.

Definition at line 76 of file main.cpp.

77{
78 if (!pdb)
79 return;
80
81 if (pdb->file)
82 fclose((FILE*)pdb->file);
83 if (pdb->string_buffer)
84 SdbCloseDatabase(pdb->string_buffer);
85 if (pdb->string_lookup)
86 SdbpTableDestroy(&pdb->string_lookup);
87 SdbFree(pdb->data);
88 SdbFree(pdb);
89}
static PDB pdb
Definition: db.cpp:172
_Check_return_opt_ _CRTIMP int __cdecl fclose(_Inout_ FILE *_File)
#define SdbFree(mem)
Definition: sdbpapi.h:37
void SdbpTableDestroy(struct SdbStringHashTable **pTable)
void WINAPI SdbCloseDatabase(PDB pdb)
Definition: main.cpp:76

Referenced by SdbCloseDatabase(), SdbCloseDatabaseWrite(), SdbInstall(), SdbRegisterDatabaseEx(), SdbReleaseDatabase(), SdbUninstall(), and CLayerStringList::~CLayerStringList().

◆ SdbGetTagFromTagID()

TAG WINAPI SdbGetTagFromTagID ( PDB  pdb,
TAGID  tagid 
)

Searches shim database for the tag associated with specified tagid.

Parameters
[in]pdbHandle to the shim database.
[in]tagidThe TAGID of the tag.
Returns
Success: The tag associated with specified tagid, Failure: TAG_NULL.

Definition at line 114 of file main.cpp.

115{
116 TAG data;
117 if (!SdbpReadData(pdb, &data, tagid, sizeof(data)))
118 return TAG_NULL;
119 return data;
120}
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
#define TAG_NULL
Definition: apphelp.c:45
BOOL WINAPI SdbpReadData(PDB pdb, PVOID dest, DWORD offset, DWORD num)
Definition: main.cpp:98
Definition: fs_rec.h:143

Referenced by SdbpCheckTagIDType(), and SdbpMatchFileAttributes().

◆ SdbpAlloc()

LPVOID WINAPI SdbpAlloc ( SIZE_T  size)

Definition at line 19 of file main.cpp.

20{
21 return ::calloc(1, size);
22}
GLsizeiptr size
Definition: glext.h:5919

◆ SdbpCheckTagIDType()

BOOL WINAPI SdbpCheckTagIDType ( PDB  pdb,
TAGID  tagid,
WORD  type 
)

Definition at line 122 of file main.cpp.

123{
124 TAG tag = SdbGetTagFromTagID(pdb, tagid);
125 if (tag == TAG_NULL)
126 return FALSE;
127 return SdbpCheckTagType(tag, type);
128}
#define FALSE
Definition: types.h:117
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
BOOL WINAPI SdbpCheckTagType(TAG tag, WORD type)
Definition: main.cpp:91
TAG WINAPI SdbGetTagFromTagID(PDB pdb, TAGID tagid)
Definition: main.cpp:114
Definition: ecma_167.h:138

◆ SdbpCheckTagType()

BOOL WINAPI SdbpCheckTagType ( TAG  tag,
WORD  type 
)

Definition at line 91 of file main.cpp.

92{
93 if ((tag & TAG_TYPE_MASK) != type)
94 return FALSE;
95 return TRUE;
96}
#define TRUE
Definition: types.h:120
#define TAG_TYPE_MASK
Definition: shimdbg.c:106

Referenced by SdbpCheckTagIDType().

◆ SdbpCreate()

PDB WINAPI SdbpCreate ( LPCWSTR  path,
PATH_TYPE  type,
BOOL  write 
)

Definition at line 52 of file main.cpp.

53{
54 PDB pdb;
55 FILE* f;
56 std::string pathA(path, path + SdbpStrlen(path));
57
58 f = fopen(pathA.c_str(), write ? "wb" : "rb");
59 if (!f)
60 return NULL;
61
62 pdb = (PDB)SdbAlloc(sizeof(DB));
63 pdb->file = f;
64 pdb->for_write = write;
65
66 return pdb;
67}
#define write
Definition: acwin.h:97
VOID * PDB
#define NULL
Definition: types.h:112
GLfloat f
Definition: glext.h:7540
GLuint pathA
Definition: glext.h:11719
_Check_return_ _CRTIMP FILE *__cdecl fopen(_In_z_ const char *_Filename, _In_z_ const char *_Mode)
#define f
Definition: ke_i.h:83
#define SdbAlloc(size)
Definition: sdbpapi.h:35
DWORD SdbpStrlen(PCWSTR string)
Definition: main.cpp:39
Definition: sdbtypes.h:24

◆ SdbpFlush()

void WINAPI SdbpFlush ( PDB  pdb)

Definition at line 69 of file main.cpp.

70{
71 ASSERT(pdb->for_write);
72
73 fwrite(pdb->data, pdb->write_iter, 1, (FILE*)pdb->file);
74}
_Check_return_opt_ _CRTIMP size_t __cdecl fwrite(_In_reads_bytes_(_Size *_Count) const void *_Str, _In_ size_t _Size, _In_ size_t _Count, _Inout_ FILE *_File)
#define ASSERT(a)
Definition: mode.c:44

◆ SdbpFree()

void WINAPI SdbpFree ( LPVOID  mem)

Definition at line 34 of file main.cpp.

35{
36 return ::free(mem);
37}
Definition: mem.c:156

◆ SdbpReadData()

BOOL WINAPI SdbpReadData ( PDB  pdb,
PVOID  dest,
DWORD  offset,
DWORD  num 
)

Definition at line 98 of file main.cpp.

99{
100 DWORD size = offset + num;
101
102 /* Either overflow or no data to read */
103 if (size <= offset)
104 return FALSE;
105
106 /* Overflow */
107 if (pdb->size < size)
108 return FALSE;
109
110 memcpy(dest, pdb->data + offset, num);
111 return TRUE;
112}
unsigned long DWORD
Definition: ntddk_ex.h:95
GLuint GLuint num
Definition: glext.h:9618
GLintptr offset
Definition: glext.h:5920
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
static char * dest
Definition: rtl.c:135

Referenced by SdbGetTagFromTagID(), SdbpOpenDatabase(), and SdbQueryDataExTagID().

◆ SdbpReAlloc()

LPVOID WINAPI SdbpReAlloc ( LPVOID  mem,
SIZE_T  size,
SIZE_T  oldSize 
)

Definition at line 24 of file main.cpp.

25{
26 LPVOID newMem = ::realloc(mem, size);
27 if (newMem && size > oldSize)
28 {
29 memset((BYTE*)newMem + oldSize, 0, size - oldSize);
30 }
31 return newMem;
32}
#define realloc
Definition: debug_ros.c:6
#define memset(x, y, z)
Definition: compat.h:39
unsigned char BYTE
Definition: xxhash.c:193

◆ SdbpStrlen()

DWORD SdbpStrlen ( PCWSTR  string)

Definition at line 39 of file main.cpp.

40{
41 size_t len = 0;
42 while (string[len])
43 len++;
44 return len;
45}
GLenum GLsizei len
Definition: glext.h:6722

Referenced by SdbpCreate(), and SdbpStrsize().

◆ SdbpStrsize()

DWORD WINAPI SdbpStrsize ( PCWSTR  string)

Definition at line 47 of file main.cpp.

48{
49 return (SdbpStrlen(string) + 1) * sizeof(WCHAR);
50}
__wchar_t WCHAR
Definition: xmlstorage.h:180

Referenced by SdbpOpenKey(), SdbSetPermLayerKeys(), SdbWriteStringTag(), and SeiInitPaths().

◆ ShimDbgPrint()

BOOL WINAPIV ShimDbgPrint ( SHIM_LOG_LEVEL  Level,
PCSTR  FunctionName,
PCSTR  Format,
  ... 
)

Outputs diagnostic info.

Parameters
[in]LevelThe level to log this message with, choose any of [SHIM_ERR, SHIM_WARN, SHIM_INFO].
[in]FunctionNameThe function this log should be attributed to.
[in]FormatThe format string.
...Variable arguments providing additional information.
Returns
Success: TRUE Failure: FALSE.

Definition at line 130 of file main.cpp.

131{
132 va_list ArgList;
133 const char* LevelStr;
134
136 return FALSE;
137
138 switch (Level)
139 {
140 case SHIM_ERR:
141 LevelStr = "Err ";
142 break;
143 case SHIM_WARN:
144 LevelStr = "Warn";
145 break;
146 case SHIM_INFO:
147 LevelStr = "Info";
148 break;
149 default:
150 LevelStr = "User";
151 break;
152 }
153 printf("[%s][%-20s] ", LevelStr, FunctionName);
154 va_start(ArgList, Format);
155 vprintf(Format, ArgList);
156 va_end(ArgList);
157 return TRUE;
158}
char * va_list
Definition: acmsvcex.h:78
#define va_end(ap)
Definition: acmsvcex.h:90
#define va_start(ap, A)
Definition: acmsvcex.h:91
ACPI_BUFFER *RetBuffer ACPI_BUFFER *RetBuffer char ACPI_WALK_RESOURCE_CALLBACK void *Context ACPI_BUFFER *RetBuffer UINT16 ACPI_RESOURCE **ResourcePtr ACPI_GENERIC_ADDRESS *Reg UINT32 *ReturnValue UINT8 UINT8 *Slp_TypB ACPI_PHYSICAL_ADDRESS PhysicalAddress64 UINT32 UINT32 *TimeElapsed UINT32 ACPI_STATUS const char UINT32 ACPI_STATUS const char UINT32 const char * FunctionName
Definition: acpixf.h:1279
_Check_return_opt_ _CRTIMP int __cdecl vprintf(_In_z_ _Printf_format_string_ const char *_Format, va_list _ArgList)
#define SHIM_INFO(fmt,...)
Definition: sdbpapi.h:78
#define SHIM_WARN(fmt,...)
Definition: sdbpapi.h:77
#define SHIM_ERR(fmt,...)
Definition: sdbpapi.h:76
ULONG g_ShimDebugLevel
Definition: main.cpp:17
uint32_t ULONG
Definition: typedefs.h:59
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
Definition: wmitypes.h:56

◆ update_loglevel()

static void update_loglevel ( int  argc,
char argv[],
int i 
)
static

Definition at line 199 of file main.cpp.

200{
201 std::string value = get_strarg(argc, argv, i);
202 g_ShimDebugLevel = strtoul(value.c_str(), NULL, 10);
203}
UINT32 strtoul(const char *String, char **Terminator, UINT32 Base)
Definition: utclib.c:696
Definition: pdh_main.c:94

Referenced by main().

◆ xml_2_db()

bool xml_2_db ( const char xml,
const WCHAR sdb 
)

Definition at line 765 of file xml2sdb.cpp.

766{
767 Database db;
768 if (db.fromXml(xml))
769 {
770 return db.toSdb((LPCWSTR)sdb);
771 }
772 return false;
773}
bool toSdb(LPCWSTR path)
Definition: xml2sdb.cpp:677
bool fromXml(const char *fileName)
Definition: xml2sdb.cpp:669
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by run_one().

Variable Documentation

◆ g_ShimDebugLevel

ULONG g_ShimDebugLevel = SHIM_WARN

Definition at line 17 of file main.cpp.

Referenced by ShimDbgPrint(), and update_loglevel().