Author: cwittich Date: Sun Aug 31 10:21:45 2008 New Revision: 35833
URL: http://svn.reactos.org/svn/reactos?rev=35833&view=rev Log: -add a xml config file -load and parse settings
Added: trunk/tools/sysreg2/options.c (with props) trunk/tools/sysreg2/sysreg.xml (with props) Modified: trunk/tools/sysreg2/console.c trunk/tools/sysreg2/makefile trunk/tools/sysreg2/sysreg.h trunk/tools/sysreg2/virt.c
Modified: trunk/tools/sysreg2/console.c URL: http://svn.reactos.org/svn/reactos/trunk/tools/sysreg2/console.c?rev=35833&a... ============================================================================== --- trunk/tools/sysreg2/console.c [iso-8859-1] (original) +++ trunk/tools/sysreg2/console.c [iso-8859-1] Sun Aug 31 10:21:45 2008 @@ -2,7 +2,7 @@ #include <termios.h> #include <poll.h>
-void ProcessDebugData(const char* tty, int timeout) +void ProcessDebugData(const char* tty, int timeout, int stage ) { int ttyfd, i; struct termios ttyattr, rawattr;
Modified: trunk/tools/sysreg2/makefile URL: http://svn.reactos.org/svn/reactos/trunk/tools/sysreg2/makefile?rev=35833&am... ============================================================================== --- trunk/tools/sysreg2/makefile [iso-8859-1] (original) +++ trunk/tools/sysreg2/makefile [iso-8859-1] Sun Aug 31 10:21:45 2008 @@ -10,7 +10,7 @@ LIBS := -lgcc -lm -lvirt -ltasn1 -lz -lxml2 -lgnutls INC := -I/usr/include/libvirt/ -I/usr/include/libxml2/
-SRCS := virt.c utils.c console.c +SRCS := virt.c utils.c console.c options.c
OBJS := $(SRCS:.c=.o)
Added: trunk/tools/sysreg2/options.c URL: http://svn.reactos.org/svn/reactos/trunk/tools/sysreg2/options.c?rev=35833&a... ============================================================================== --- trunk/tools/sysreg2/options.c (added) +++ trunk/tools/sysreg2/options.c [iso-8859-1] Sun Aug 31 10:21:45 2008 @@ -1,0 +1,64 @@ +#include "sysreg.h" + +bool LoadSettings(const char* XmlConfig) +{ + xmlDocPtr xml = NULL; + xmlXPathObjectPtr obj = NULL; + xmlXPathContextPtr ctxt = NULL; + char TempStr[255]; + int Stage; + const char* StageNames[] = { + "firststage", + "secondstage", + "thirdstage" + }; + + xml = xmlReadFile(XmlConfig, NULL, 0); + if (!xml) + return false; + ctxt = xmlXPathNewContext(xml); + if (!ctxt) + { + xmlFreeDoc(xml); + return false; + } + + obj = xmlXPathEval(BAD_CAST"string(/settings/@file)",ctxt); + if ((obj != NULL) && ((obj->type == XPATH_STRING) && + (obj->stringval != NULL) && (obj->stringval[0] != 0))) + { + strncpy(AppSettings.Filename, obj->stringval, 254); + } + + obj = xmlXPathEval(BAD_CAST"string(/settings/@name)",ctxt); + if ((obj != NULL) && ((obj->type == XPATH_STRING) && + (obj->stringval != NULL) && (obj->stringval[0] != 0))) + { + strncpy(AppSettings.Name, obj->stringval, 79); + } + + obj = xmlXPathEval(BAD_CAST"number(/settings/general/timeout/@ms)",ctxt); + if ((obj != NULL) && (obj->type == XPATH_NUMBER)) + { + /* when no value is set - return value is negative + * which means infinite */ + AppSettings.Timeout = (int)obj->floatval; + } + + for (Stage=0;Stage<3;Stage++) + { + strcpy(TempStr, "string(/settings/"); + strcat(TempStr, StageNames[Stage]); + strcat(TempStr, "/@bootdevice)"); + obj = xmlXPathEval((xmlChar*) TempStr,ctxt); + if ((obj != NULL) && ((obj->type == XPATH_STRING) && + (obj->stringval != NULL) && (obj->stringval[0] != 0))) + { + strncpy(AppSettings.Stage[Stage].BootDevice, obj->stringval, 7); + } + } + xmlFreeDoc(xml); + xmlXPathFreeContext(ctxt); + return true; +} +
Propchange: trunk/tools/sysreg2/options.c ------------------------------------------------------------------------------ svn:eol-style = native
Modified: trunk/tools/sysreg2/sysreg.h URL: http://svn.reactos.org/svn/reactos/trunk/tools/sysreg2/sysreg.h?rev=35833&am... ============================================================================== --- trunk/tools/sysreg2/sysreg.h [iso-8859-1] (original) +++ trunk/tools/sysreg2/sysreg.h [iso-8859-1] Sun Aug 31 10:21:45 2008 @@ -10,6 +10,25 @@ #include <libxml/xpath.h> #include <libxml/xpathInternals.h>
-char* ReadFile (const char *filename); -void ProcessDebugData(const char* tty, int timeout); +typedef struct { + char BootDevice[8]; +} stage; + +typedef struct { + int Timeout; + char Filename[255]; + char Name[80]; + stage Stage[3]; +} Settings; + +Settings AppSettings; + +/* utils.c */ +char* ReadFile (const char* filename); ssize_t safewrite(int fd, const void *buf, size_t count); + +/* options.c */ +bool LoadSettings(const char* XmlConfig); + +/* console.c */ +void ProcessDebugData(const char* tty, int timeout, int stage);
Added: trunk/tools/sysreg2/sysreg.xml URL: http://svn.reactos.org/svn/reactos/trunk/tools/sysreg2/sysreg.xml?rev=35833&... ============================================================================== --- trunk/tools/sysreg2/sysreg.xml (added) +++ trunk/tools/sysreg2/sysreg.xml [iso-8859-1] Sun Aug 31 10:21:45 2008 @@ -1,0 +1,13 @@ +<settings vm="ReactOS" file="/opt/buildbot/kvmtest/reactos.xml"> + <general> + <!-- kill the VM after n milliseconds without debug msg --> + <timeout ms="20000"/> + </general2 + <firststage bootdevice="cdrom"> + <success on="SYSREG_CHECKPOINT:USETUP_COMPLETE"/> + </firststage> + <secondstage bootdevice="hd"> + </secondstage> + <thirdstage bootdevice="hd"> + </thirdstage> +</settings>
Propchange: trunk/tools/sysreg2/sysreg.xml ------------------------------------------------------------------------------ svn:eol-style = native
Modified: trunk/tools/sysreg2/virt.c URL: http://svn.reactos.org/svn/reactos/trunk/tools/sysreg2/virt.c?rev=35833&... ============================================================================== --- trunk/tools/sysreg2/virt.c [iso-8859-1] (original) +++ trunk/tools/sysreg2/virt.c [iso-8859-1] Sun Aug 31 10:21:45 2008 @@ -51,7 +51,7 @@ int i; for(i=0; i<iDomains; i++) { - if (strcmp(name, names[i]) == 0) + if (strcasecmp(name, names[i]) == 0) return true; } } @@ -111,7 +111,6 @@ name = virDomainGetName(vDomPtr); domname = strdup(name); virDomainFree(vDomPtr); - vDomPtr = virDomainLookupByName(vConn, domname); free(domname); } } @@ -121,32 +120,42 @@
int main() { - virConnectPtr vConn; virDomainPtr vDom; + int Stage; + int Stages = 1; /* 1 for testing, should be set to 3 later */ + + if (!LoadSettings("sysreg.xml")) + { + printf("Can not load configuration file\n"); + return EXIT_FAILURE; + }
vConn = virConnectOpen("qemu:///session");
- if (IsVirtualMachineRunning(vConn, "reactos")) - printf("Virtual Machine is already running\n"); - else + for (Stage=0;Stage<Stages; Stage++) { - vDom = LaunchVirtualMachine(vConn, "/opt/buildbot/kvmtest/reactos.xml", "cdrom"); + if (IsVirtualMachineRunning(vConn, AppSettings.Name)) + printf("Virtual Machine is already running\n"); + else { - if (vDom) + vDom = LaunchVirtualMachine(vConn, AppSettings.Filename, + AppSettings.Stage[Stage].BootDevice); { - printf("Domain %s started.\n", virDomainGetName(vDom)); - printf("%s\n", GetConsole(vDom)); - ProcessDebugData(GetConsole(vDom), 10000 /*10 sec */); - - virDomainDestroy(vDom); - virDomainUndefine(vDom); - virDomainFree(vDom); - } + if (vDom) + { + printf("Domain %s started.\n", virDomainGetName(vDom)); + ProcessDebugData(GetConsole(vDom), + AppSettings.Timeout, Stage); + virDomainDestroy(vDom); + virDomainUndefine(vDom); + virDomainFree(vDom); + } + } } }
virConnectClose(vConn); - return 1; + return EXIT_SUCCESS; }