int main(int argc, char **argv) { char *docname; xmlDocPtr doc; xmlChar *xpath = (xmlChar*) "//storyinfo/keyword"; xmlNodeSetPtr nodeset; xmlXPathObjectPtr result; int i; xmlChar *keyword; if (argc <= 1) { printf("Usage: %s docname\n", argv[0]); return(0); } docname = argv[1]; doc = getdoc(docname); result = getnodeset (doc, xpath); if (result) { nodeset = result->nodesetval; for (i=0; i < nodeset->nodeNr; i++) { keyword = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1); printf("keyword: %s\n", keyword); xmlFree(keyword); } xmlXPathFreeObject (result); } xmlFreeDoc(doc); xmlCleanupParser(); return (1); }
int main(int argc, char *argv[]) { char *docname; xmlDocPtr doc; xmlChar *xpath = ("//*"); xmlNodeSetPtr nodeset; xmlXPathObjectPtr result; int i; xmlChar *value; if (argc <= 1) { printf("Usage: %s docname\n", argv[0]); return 0; } docname = argv[1]; doc = getdoc(docname); result = getnodeset(doc, xpath); if (result) { nodeset = result->nodesetval; for (i=0; i < nodeset->nodeNr; i++) { value = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1); printf("%s: %s\n", nodeset->nodeTab[i]->name, value); xmlFree(value); } xmlXPathFreeObject(result); } xmlFreeDoc(doc); return 0; }
xmlXPathObjectPtr getFebDna(xmlDocPtr doc) { char tmp[256]; //sprintf(tmp,"/system/status/ControlDpm/FebFpga/AxiVersion/DeviceDna"); strcpy(tmp,"/system/status/ControlDpm/FebFpga/AxiVersion/DeviceDna"); if(DEBUG>2) printf("[ getFebDna ] : xpath \"%s\"\n",tmp); return getnodeset(doc, (xmlChar*) tmp); }
int getFebNumProcess(char* pname, xmlDoc* doc) { int val; int idpm; int idp; char str1[256]; char str2[256]; char action[256]; xmlXPathObjectPtr result; xmlNodePtr node; char tmp[256]; val = -1; idpm = -1; idp = -1; getStringFromEpicsName(pname,str1,1); getStringFromEpicsName(pname,str2,2); if(strcmp(str1,"daq")==0 && strcmp(str2,"dpm")==0) { idpm = getIntFromEpicsName(pname,3); idp = getIntFromEpicsName(pname,4); getStringFromEpicsName(pname,action,5); if(DEBUG>2) printf("[ getFebNumProcess ] : get %s from dpm xml\n", action); if(strcmp(action,"febnum_sub")==0) { sprintf(tmp,"/system/status/DataDpm/RceCore/DataPath[@index=\"%d\"]/FebNum",idp); } else if( strcmp(action,"hybnum_sub")==0) { sprintf(tmp,"/system/status/DataDpm/RceCore/DataPath[@index=\"%d\"]/HybridNum",idp); } else { strcpy(tmp,""); } if(strcmp(tmp,"")!=0) { if(DEBUG>2) printf("[ getFebNumProcess ] : xpath \"%s\"\n",tmp); result = getnodeset(doc, (xmlChar*) tmp); if(result!=NULL) { if(DEBUG>2) printf("[ getFebNumProcess ] : got %d nodes\n", result->nodesetval->nodeNr); if(result->nodesetval->nodeNr==1) { node = result->nodesetval->nodeTab[0]; if(node!=NULL) { val = getIntValue(doc, node); if(DEBUG>0) printf("[ getFebNumProcess ]: got val %d.\n",val); } else { printf("[ getFebNumProcess ] : [ WARNING ] no FebNum nodes found\n"); } } else { printf("[ getFebNumProcess ] : [ WARNING ] %d FebNum nodes found, should be exactly 1\n", result->nodesetval->nodeNr); } } else { printf("[ getFebNumProcess ] : [ WARNING ] no results found\n"); } } else { printf("[ getFebNumProcess ] : [ WARNING ] wrong action (%s) \n",action); } } else { printf("[ getFebNumProcess ]: [ ERROR ]: wrong record name? \"%s\"!\n",pname); } return val; }
int main(int argc, char **argv) { int i; if (argc <= 2) { printf("Usage: %s docname xpath\n", argv[0]); return(0); } xmlChar *xpath = (xmlChar*) argv[2]; char* docname = argv[1]; xmlDocPtr doc = getdoc(docname); xmlXPathObjectPtr result = getnodeset (doc, xpath); if (result){ xmlNodeSetPtr nodeset = result->nodesetval; for (i=0; i < nodeset->nodeNr; i++) { xmlChar *text = xmlNodeListGetString(doc, nodeset->nodeTab[i]->xmlChildrenNode, 1); printf("%s\n", text); xmlFree(text); } xmlXPathFreeObject (result); } xmlFreeDoc(doc); xmlCleanupParser(); return (1); }
ValgrindResult* valgrindXML_evaluate(char *xml_path,int testing_framework) { char *docname; xmlDocPtr doc; xmlChar *xpath = (xmlChar*) "//errorcounts/pair/count"; xmlNodeSetPtr nodeset; xmlXPathObjectPtr result; int i; docname = xml_path; doc = getdoc(docname); result = getnodeset (doc, xpath); ValgrindResult *valgrindResult=NULL; //Get all the errors first if (result) { nodeset = result->nodesetval; if(nodeset->nodeNr==0){ //NO valgrind errors for this mutant return NULL; } valgrindResult= malloc(sizeof(ValgrindResult)); //Initialization of valgrindResult valgrindResult->valgrind_error_count=0; valgrindResult->unique_valgrind_error_count=0; //Capturing results in valgrindResult valgrindResult->unique_valgrind_error_count=nodeset->nodeNr; valgrindResult->valgrindErrors = malloc(nodeset->nodeNr*sizeof(ValgrindError)); for (i=0; i < nodeset->nodeNr; i++) { //Get <count></count> xmlNodePtr countNode = nodeset->nodeTab[i]; //Get <unique></unique> xmlNodePtr uniqueNode = xmlNextElementSibling(countNode); //Values for both of the nodes xmlChar *count_value = xmlNodeListGetString(doc, countNode->xmlChildrenNode, 1); xmlChar *unique_value = xmlNodeListGetString(doc, uniqueNode->xmlChildrenNode, 1); int error_count = (int)strtoumax((char*)count_value, NULL, 10); valgrindResult->valgrind_error_count+=error_count; //For each unique value, get all its error nodes evaluate_error_nodes(&valgrindResult->valgrindErrors[i],doc,error_count,unique_value,testing_framework); xmlFree(count_value); xmlFree(unique_value); } xmlXPathFreeObject (result); } xmlFreeDoc(doc); xmlCleanupParser(); return valgrindResult; }
// Iteratively output check list on every single vulnerablity // Do not simply use <Trace> nodes, cause it loses the informatin // of <Context> // vulTy specifies the type of vulnerability, such as, "bufferoverflow", "memoryleak" // see gloable variable VulType void getTraceInfoForBufferOverflow(xmlDocPtr doc, xmlNodePtr vulNode, FILE * fp){ int i = 0; // noderef is 1 means that we should find Node from NodeRef xmlChar * xpath = (unsigned char *)"//fvdl:Primary/fvdl:Entry"; xmlNodePtr child = NULL, cur_entry = NULL, sourcelocation = NULL; xmlNodeSetPtr Entry = getnodeset((xmlDocPtr)vulNode, xpath)->nodesetval; xmlNodePtr cur_node = NULL; xmlChar * file = NULL, * line = NULL; xmlChar * tags[3] = {"DEF", "N/A", "BOF"}; for(; i < Entry->nodeNr; i++){ cur_entry = Entry->nodeTab[i]; child = cur_entry->children; if(!xmlStrcmp(child->name, (const xmlChar*)"NodeRef")){ if(!NodeRefs){ // We haven`t got NodeRef, now get it NodeRefs = getnodeset(doc, (unsigned char *)"//fvdl:UnifiedNodePool/fvdl:Node")->nodesetval; } cur_node = getNodeFromRefID(NodeRefs, xmlGetProp(child, (xmlChar *)"id")); } else cur_node = child; // Get file and line number ! sourcelocation = cur_node->children; file = xmlGetProp(sourcelocation, (xmlChar *)"path"); int absolutepath = fvcontains((char *)file, '/'); // If it is an absolute path, we should simplify it. // Make it look like this: src.c rather than /home/xxx/xxx/src/src.c if(absolutepath == 1)file = (xmlChar *)fvsubstr((char *)file, fvlastIndexof((char *)file, '/') + 1); line = xmlGetProp(sourcelocation, (xmlChar *)"line"); if(i == 0) fprintf(fp, "%s\t%s\t%s\n", file, line, tags[0]); else if(i == Entry->nodeNr - 1) fprintf(fp, "%s\t%s\t%s\n", file, line, tags[2]); else fprintf(fp, "%s\t%s\t%s\n", file, line, tags[1]); } }
void getRunState(int idpm, xmlDoc* doc, char* state) { int dpm; xmlXPathObjectPtr result; xmlNodePtr node; char tmp[256]; dpm = idpm; strcpy((char*)state, "undef"); if(DEBUG>0) printf("[ getRunState ] : get state of dpm %d (idpm=%d) dpm_doc at %p\n", dpm, idpm, doc); if(doc!=NULL) { if(DEBUG>0) printf("[ getRunState ]: idpm %d xml ok\n", idpm); if(DEBUG>2) printf("[ getRunStateFromDpmValue ] : get RunState from dpm xml\n"); sprintf(tmp,"/system/status/RunState"); if(DEBUG>2) printf("[ getRunStateDpm ] : xpath \"%s\"\n",tmp); result = getnodeset(doc, (xmlChar*) tmp); if(result!=NULL) { if(DEBUG>2) printf("[ getRunStateFromDpmValue ] : got %d nodes\n", result->nodesetval->nodeNr); if(result->nodesetval->nodeNr==1) { node = result->nodesetval->nodeTab[0]; if(node!=NULL) { getStrValue(doc, node, state); //getRunStateFromDpmValue(doc, (xmlChar*) state); if(DEBUG>0) printf("[ getRunState ]: got val %s\n", state); } else { printf("[ getRunStateFromDpmValue ] : [ WARNING ] no RunState nodes found\n"); strcpy((char*)state, "no valid node"); } } else { printf("[ getRunStateFromDpmValue ] : [ WARNING ] %d RunState nodes found, should be exactly 1\n", result->nodesetval->nodeNr); strcpy((char*)state,"wrong nr of nodes"); } } else { printf("[ getRunStateFromDpmValue ] : [ WARNING ] no results found\n"); strcpy((char*)state, "no xpath results"); } } else { if(DEBUG>0) printf("[ getRunState ]: [ WARNING ]: the dpm %d xml doc status is invalid\n",idpm); strcpy(state,"no valid xml"); } if(DEBUG>0) printf("[ getRunStateFromDpmValue ] : returning with state \"%s\"\n", state); return; }
void read_string_attribute(char* elementPath, char *attribName, char* str, int required) { xmlChar *xpath; xmlXPathObjectPtr result; xmlNodeSetPtr nodeset; xmlChar* resultstr; char tmpBuf[1000]; sprintf(tmpBuf, "%s[@%s]", elementPath, attribName); xpath = xmlCharStrdup(tmpBuf); result = getnodeset(xpath); xmlFree(xpath); required=1; if ( required && result == NULL ) { printf("%s: %s required in configuration file\n",cfilename, elementPath); exit(-1); } if ( result == NULL ) return; nodeset = result->nodesetval; if ( nodeset->nodeNr >= 2 ) { I3_PRINT_INFO2( I3_INFO_LEVEL_FATAL_ERROR, "%s: %s should appear atmost once in configuration file\n", cfilename, elementPath ); exit(-1); } resultstr = xmlGetProp(nodeset->nodeTab[0], (xmlChar*)attribName); strcpy(str,(char*)resultstr); strip_ws(str); xmlFree(resultstr); xmlXPathFreeObject(result); }
void read_string_par(char* path,char* str,int required) { xmlNodeSetPtr nodeset; xmlChar* resultstr; xmlChar *xpath = xmlCharStrdup(path); xmlXPathObjectPtr result = getnodeset(xpath); xmlFree(xpath); required=1; if ( required && result == NULL ) { printf("%s: %s required in configuration file\n",cfilename,path); exit(-1); } if ( result == NULL ) return; nodeset = result->nodesetval; if ( nodeset->nodeNr >= 2 ) { I3_PRINT_INFO2( I3_INFO_LEVEL_FATAL_ERROR, "%s: %s should appear atmost once in configuration file\n", cfilename,path ); exit(-1); } resultstr = xmlNodeListGetString(i3_config_doc, nodeset->nodeTab[0]->xmlChildrenNode, 1); strcpy(str,(char*)resultstr); strip_ws(str); xmlFree(resultstr); xmlXPathFreeObject(result); }
#include "DobHtmlParser.h" DobHtmlParser::DobHtmlParser () { doc = NULL; } DobHtmlParser::DobHtmlParser (QString *document, QString *data_xpath )/*{{{*/ { doc = NULL; setDoc ( document ); setXpath ( data_xpath ); }/*}}}*/ DobHtmlParser::~DobHtmlParser ()/*{{{*/ { if ( doc ) xmlFreeDoc( doc ); if ( xpath ) xmlFree(xpath); xmlCleanupParser (); }/*}}}*/ void DobHtmlParser::setDoc ( QString *document )/*{{{*/ { if ( doc ) xmlFreeDoc ( doc ); doc = htmlReadMemory ( document->toLatin1(), document->size(), "noname.html", NULL, 0 ); }/*}}}*/ void DobHtmlParser::setXpath ( QString *data_xpath )/*{{{*/ { QByteArray a = data_xpath->toLatin1(); xpath = xmlCharStrdup ( a.data() ); }/*}}}*/ QStringList DobHtmlParser::parse ()/*{{{*/ { getlastpost (); //qDebug() << list; return list; }/*}}}*/ void DobHtmlParser::getlastpost ()/*{{{*/ { int i; xmlNodeSetPtr nodeset; xmlXPathObjectPtr result; xmlChar *keyword; list.clear(); result = getnodeset (); if ( result ){ nodeset = result->nodesetval; for ( i = 0; i < nodeset->nodeNr; i++ ) { keyword = xmlNodeListGetString ( doc, nodeset->nodeTab[i]->xmlChildrenNode, 1 ); if ( keyword ) list << QString::fromUtf8( ( char *) keyword ); xmlFree ( keyword ); } xmlXPathFreeObject ( result ); } }/*}}}*/
int main(int argc, char** argv){ int i; char* fvdlDocName; xmlDocPtr doc; FILE *fp=NULL, *fp_buf = NULL; xmlChar *xpath=(unsigned char*)"//fvdl:Vulnerability[./fvdl:ClassInfo/fvdl:Type='Memory Leak']" "/fvdl:AnalysisInfo/fvdl:Unified/fvdl:Trace"; xmlChar *xpath_buf = (unsigned char *)"//fvdl:Vulnerability[./fvdl:ClassInfo/fvdl:Type='Buffer Overflow']" "/fvdl:AnalysisInfo/fvdl:Unified/fvdl:Trace"; // Inlcudes Context info required to obtain the caller function xmlNodeSetPtr nodeset; xmlXPathObjectPtr result, result_buf = NULL; if(argc <=1){ printf("Usage: %s docname\n",argv[0]); return (0); } fvdlDocName=argv[1]; doc=getFvdlDoc(fvdlDocName); if(NULL!=doc){ result=getnodeset(doc, xpath); result_buf = getnodeset(doc, xpath_buf); } else return (0); if(result){ fp=fopen("checklists","w"); nodeset = result->nodesetval; for(i=0;i< nodeset->nodeNr; i++){ fprintf(stderr,"%d\n",i); fprintf(fp,"%d\n",i); getTraceInfo(doc,nodeset->nodeTab[i],fp); fprintf(fp,"END_PATH\n"); } xmlXPathFreeObject(result); }else{ printf("no result for xpath: %s\n", xpath); } if(result_buf){ fp_buf = fopen("checklist_bufferoverflow", "w"); if(!fp_buf){ printf("Failed to open file %s\n", "checklist_bufferoverflow"); return 0; } nodeset = result_buf->nodesetval; for(i = 0; i < nodeset->nodeNr; i++){ fprintf(stderr, "%d\n", i); fprintf(fp_buf, "%d\n", i); getTraceInfoForBufferOverflow(doc, nodeset->nodeTab[i], fp_buf); fprintf(fp_buf, "END_PATH\n"); } xmlXPathFreeObject(result_buf); } else printf("no result for xpath: %s\n",xpath_buf); if(fp) fclose(fp); if(fp_buf) fclose(fp_buf); xmlFreeDoc(doc); xmlCleanupParser(); return(1); }
void getTraceInfo(xmlDocPtr doc,xmlNodePtr cur, FILE* fp){ int i,j; xmlChar* nodeXpath=(unsigned char*)"//fvdl:Primary/fvdl:Entry/fvdl:Node"; xmlNodeSetPtr nodeset; xmlXPathObjectPtr result; xmlNodePtr nodeChild; xmlNodePtr reasonChildNode; xmlChar* refxpath=NULL; xmlNodeSetPtr refNodeset=NULL; xmlXPathObjectPtr refResult=NULL; xmlChar *file,*line,*actionType,*actionString; //xmlChar *lineEnd xmlChar *markWord=NULL; xmlChar *traceRefId; result=getnodeset((xmlDocPtr)cur,nodeXpath); if(result){ nodeset = result ->nodesetval; for(i=0;i<nodeset->nodeNr;i++){ nodeChild=nodeset->nodeTab[i]->xmlChildrenNode; while(nodeChild!=NULL){ if(!xmlStrcmp(nodeChild->name,(const xmlChar*)"SourceLocation")){ file=xmlGetProp(nodeChild,(const xmlChar*)"path"); line=xmlGetProp(nodeChild,(const xmlChar*)"line"); //lineEnd=xmlGetProp(nodeChild,(const xmlChar*)"lineEnd"); //assert(!xmlStrcmp(line,lineEnd)); fprintf(fp,"%s\t%s\t",file,line); xmlFree(file); xmlFree(line); //xmlFree(lineEnd); }else if(!xmlStrcmp(nodeChild->name,(const xmlChar*)"Action")){ actionType=xmlGetProp(nodeChild,(const xmlChar*)"type"); actionString=xmlNodeListGetString(doc,nodeChild->xmlChildrenNode,1); if(!xmlStrcmp(actionType,(const xmlChar*)"BranchNotTaken")){ if(matchReg((char*)actionString,(char*)"^Branch not taken: (create_html_directory(.*) != 0)$")){ markWord=(unsigned char*)"BT"; //!func() -> cil reverse branch , and we have to reverse }else markWord=(unsigned char*)"BF"; //branch false } else if(!xmlStrcmp(actionType,(const xmlChar*)"BranchTaken")){ if(matchReg((char*)actionString,(char*)"Branch taken: (create_heml_directory(.*) == 0)$")){ markWord=(unsigned char*)"BF"; }else markWord=(unsigned char*)"BT"; //branch true } else if(isAssignOrReturn(actionType) && (matchReg((char*)actionString,(char*)"^.* malloc.*$") || matchReg((char*)actionString,(char*)"^malloc.*$"))) markWord=(unsigned char*)"MA"; else if(isAssignOrReturn(actionType) && (matchReg((char*)actionString,(char*)"^.* calloc.*$") || matchReg((char*)actionString,(char*)"^calloc.*$"))) markWord=(unsigned char*)"CA"; else if(isAssignOrReturn(actionType) && (matchReg((char*)actionString,(char*)"^.* realloc.*$") || matchReg((char*)actionString,(char*)"^realloc.*$"))) markWord=(unsigned char*)"RA"; else if(isAssignOrReturn(actionType) && (matchReg((char*)actionString,(char*)"^.* xmalloc.*$") || matchReg((char*)actionString,(char*)"^xmalloc.*$"))) markWord=(unsigned char*)"MA"; else if(isAssignOrReturn(actionType) && (matchReg((char*)actionString,(char*)"^.* xstrdup.*$") || matchReg((char*)actionString,(char*)"^xstrdup.*$"))) markWord=(unsigned char*)"XSD"; else if(isAssignOrReturn(actionType) && (matchReg((char*)actionString,(char*)"^.* xcalloc.*$") || matchReg((char*)actionString,(char*)"^xcalloc.*$"))) markWord=(unsigned char*)"CA"; else if(isAssignOrReturn(actionType) && (matchReg((char*)actionString,(char*)"^.* xrealloc.*$") || matchReg((char*)actionString,(char*)"^xrealloc.*$"))) markWord=(unsigned char*)"RA"; else if((!xmlStrcmp(actionType,(const xmlChar*)"EndScope")) && matchReg((char*)actionString,(char*)"^.*Memory leaked$")) markWord=(unsigned char*)"LK"; //leak point else markWord=(unsigned char*)"PP"; //normal path point fprintf(fp,"%s\n",markWord); xmlFree(actionType); xmlFree(actionString); }else if(!xmlStrcmp(nodeChild->name,(const xmlChar*)"Reason")){ reasonChildNode = nodeChild->xmlChildrenNode; if(!xmlStrcmp(reasonChildNode->name,(const xmlChar*)"TraceRef")){ traceRefId=xmlGetProp(reasonChildNode,(const xmlChar*)"id"); //printf("%s\n",traceRefId); refxpath=(unsigned char*)"//fvdl:UnifiedTracePool/fvdl:Trace"; refResult=getnodeset(doc,refxpath); if(refResult){ refNodeset = refResult ->nodesetval; for(j=0;j< refNodeset->nodeNr; j++){ if(!xmlStrcmp(traceRefId,xmlGetProp(refNodeset->nodeTab[j],(const xmlChar*)"id"))){ //fprintf(fp,"BEGIN_TraceRef\tRefId:%s\n",traceRefId); getTraceInfo(doc,refNodeset->nodeTab[j],fp); //fprintf(fp,"END_TraceRef"); } } xmlXPathFreeObject(refResult); } } } nodeChild=nodeChild->next; } //fprintf(fp,"\n"); } xmlXPathFreeObject(result); } }
void evaluate_error_nodes(ValgrindError*valgrindError,xmlDocPtr doc,int error_count,xmlChar *unique_value,int testing_framework){ xmlNodeSetPtr nodeset; char*xPath_prefix = "//error[unique='"; char*xPath_suffix = "']"; char xPath_query[strlen(xPath_prefix)+strlen((char*)unique_value)+strlen(xPath_suffix)+1]; xmlXPathObjectPtr result; int i; //Initialization of valgrinderror valgrindError->siblings=NULL; valgrindError->occurrences=0; valgrindError->kind=NULL; valgrindError->what=NULL; valgrindError->auxwhat=NULL; valgrindError->location=NULL; sprintf(xPath_query, "%s%s%s",xPath_prefix , (char*)unique_value,xPath_suffix); xmlChar *xpath = (xmlChar*) xPath_query; result = getnodeset (doc, xpath); valgrindError->occurrences=error_count; if(error_count>1){ valgrindError->siblings = malloc(error_count*sizeof(ValgrindError)); } //We have a guarentee of getting a non-empty nodeset due to the format of the valgrind output nodeset = result->nodesetval; //Itterate through the <error><error> nodes that have the provided <unique></unique> value ValgrindError* current_error=valgrindError; for (i=0; i < nodeset->nodeNr; i++) { if(i>0){ current_error = &valgrindError->siblings[i-1]; current_error->siblings=NULL; current_error->occurrences=1; current_error->kind=NULL; current_error->auxwhat=NULL; current_error->location=NULL; } xmlNodePtr errorNode = nodeset->nodeTab[i]; xmlNodePtr currentNode = errorNode->xmlChildrenNode; while(currentNode!=NULL){ //Get Kind if present if ((!xmlStrcmp(currentNode->name, (const xmlChar *)"kind"))){ xmlChar *kind_value = xmlNodeListGetString(doc, currentNode->xmlChildrenNode, 1); current_error->kind=(char*)kind_value; currentNode=xmlNextElementSibling(currentNode); }else if((!xmlStrcmp(currentNode->name, (const xmlChar *)"what"))){ xmlChar *what_value = xmlNodeListGetString(doc, currentNode->xmlChildrenNode, 1); current_error->what=(char*)what_value; currentNode=xmlNextElementSibling(currentNode); }else if((!xmlStrcmp(currentNode->name, (const xmlChar *)"stack"))){ int max_location_size = 128; current_error->location=calloc(sizeof(char),max_location_size); //Iterate each frame in the stack xmlNodePtr frame_node = currentNode->xmlChildrenNode; int reached_stack_depth=0; while(frame_node!=NULL){ if(xmlStrcmp(frame_node->name, (const xmlChar *)"frame")!=0){ frame_node = xmlNextElementSibling(frame_node); }else{ xmlNodePtr frame_child = frame_node->xmlChildrenNode; //get the <fn></fn> element while(frame_child!=NULL){ if ((!xmlStrcmp(frame_child->name, (const xmlChar *)"fn"))){ xmlChar *fn_value = xmlNodeListGetString(doc, frame_child->xmlChildrenNode, 1); if(testing_framework==1){ if(strncmp((char*)fn_value,"CuTestRun",strlen("CuTestRun"))==0){ reached_stack_depth=1; break; } } int total_len = (strlen(current_error->location)+strlen(" :: ")+strlen((char*)fn_value))+1; if(total_len>max_location_size){ //Realloc current_error->location = realloc(current_error->location,(max_location_size*2)+total_len); }else{ if(strlen(current_error->location)==0){ strcat(current_error->location,(char*)fn_value); }else{ strcat(current_error->location," :: "); strcat(current_error->location,(char*)fn_value); } } } frame_child=xmlNextElementSibling(frame_child); } if(reached_stack_depth){ break; } frame_node=xmlNextElementSibling(frame_node); } } //Get the auxwhat if it exists currentNode=xmlNextElementSibling(currentNode); //CHeck if we have an auxwhat and either way go to the next error if(currentNode!=NULL &&(!xmlStrcmp(currentNode->name, (const xmlChar *)"auxwhat"))){ xmlChar *auxwhat_value = xmlNodeListGetString(doc, currentNode->xmlChildrenNode, 1); current_error->auxwhat=(char*)auxwhat_value; } break; }else{ currentNode=xmlNextElementSibling(currentNode); } } } }
xmlXPathObjectPtr getFebTemps(xmlDocPtr doc, const char* type) { char tmp[256]; sprintf(tmp,"/system/status/ControlDpm/FebFpga/FebCore/SoftPowerMonitor/%s",type); if(DEBUG>1) printf("[ getFebTemps ] : xpath %s\n", tmp); return getnodeset(doc, (xmlChar*) tmp); }
void getSyncProcess(char* pname, xmlDoc* doc, char* value) { int val; int ifeb; int idp; int iapv; char str1[256]; char str5[256]; char action[256]; char tmp[256]; xmlXPathObjectPtr result; xmlNodePtr node; val = -1; ifeb = -1; idp = -1; getStringFromEpicsName(pname,str1,1); if(strcmp(str1,"daq")==0) { getStringFromEpicsName(pname,str5,5); if(strcmp(str5,"syncbase_rd_asub")==0) { ifeb = getIntFromEpicsName(pname,2); idp = getIntFromEpicsName(pname,3); iapv = getIntFromEpicsName(pname,4); sprintf(tmp,"/system/status/ControlDpm/FebFpga[@index=\"%d\"]/FebCore/HybridSyncStatus[@index=\"%d\"]/Base%d", ifeb, idp, iapv); } else if(strcmp(str5,"syncpeak_rd_asub")==0) { ifeb = getIntFromEpicsName(pname,2); idp = getIntFromEpicsName(pname,3); iapv = getIntFromEpicsName(pname,4); sprintf(tmp,"/system/status/ControlDpm/FebFpga[@index=\"%d\"]/FebCore/HybridSyncStatus[@index=\"%d\"]/Peak%d", ifeb, idp, iapv); } else { strcpy(tmp,""); } if(strcmp(tmp,"")!=0) { if(DEBUG>2) printf("[ getSyncProcess ] : xpath \"%s\"\n",tmp); result = getnodeset(doc, (xmlChar*) tmp); if(result!=NULL) { if(DEBUG>0) printf("[ getSyncProcess ] : got %d nodes\n", result->nodesetval->nodeNr); if(result->nodesetval->nodeNr==1) { node = result->nodesetval->nodeTab[0]; if(node!=NULL) { getStrValue(doc,node,value); if(DEBUG>0) printf("[ getSyncProcess ]: got val %tmp2.\n",value); } else { printf("[ getSyncProcess ] : [ WARNING ] no Sync nodes found\n"); strcpy(value,"no nodes"); } } else { printf("[ getSyncProcess ] : [ WARNING ] %d Sync nodes found, should be exactly 1\n", result->nodesetval->nodeNr); strcpy(value,"too many nodes"); } } else { if(DEBUG>1) printf("[ getSyncProcess ] : [ WARNING ] no results found\n"); strcpy(value,"no result"); } } else { printf("[ getSyncProcess ]: [ ERROR ]: wrong action \"%s\"!\n",action); strcpy(value,"wrong action"); } } else { printf("[ getSyncProcess ]: [ ERROR ]: wrong record name? \"%s\"!\n",pname); strcpy(value, "record"); } return; }
int getLinkProcess(char* pname, xmlDoc* doc) { int val; int idpm; int idp; char str1[256]; char str2[256]; char action[256]; char tmp[256]; xmlXPathObjectPtr result; xmlNodePtr node; val = -1; idpm = -1; idp = -1; getStringFromEpicsName(pname,str1,1); getStringFromEpicsName(pname,str2,2); if(strcmp(str1,"daq")==0 && strcmp(str2,"dpm")==0) { idpm = getIntFromEpicsName(pname,3); idp = getIntFromEpicsName(pname,4); getStringFromEpicsName(pname,action,5); if(strcmp(action,"rxphyready_sub")==0) { sprintf(tmp,"/system/status/DataDpm/Pgp2bAxi[@index=\"%d\"]/RxPhyReady",idp); } else if(strcmp(action,"rxframecount_sub")==0) { sprintf(tmp,"/system/status/DataDpm/Pgp2bAxi[@index=\"%d\"]/RxFrameCount",idp); } else if(strcmp(action,"rxframeerrorcount_sub")==0) { sprintf(tmp,"/system/status/DataDpm/Pgp2bAxi[@index=\"%d\"]/RxFrameErrorCount",idp); } else if(strcmp(action,"rxcellerrorcount_sub")==0) { sprintf(tmp,"/system/status/DataDpm/Pgp2bAxi[@index=\"%d\"]/RxCellErrorCount",idp); } else if(strcmp(action,"rxlinkerrorcount_sub")==0) { sprintf(tmp,"/system/status/DataDpm/Pgp2bAxi[@index=\"%d\"]/RxLinkErrorCount",idp); } else if(strcmp(action,"rxlinkdowncount_sub")==0) { sprintf(tmp,"/system/status/DataDpm/Pgp2bAxi[@index=\"%d\"]/RxLinkDownCount",idp); } else { strcpy(tmp,""); } if(strcmp(tmp,"")!=0) { if(DEBUG>2) printf("[ getLinkDpm ] : xpath \"%s\"\n",tmp); result = getnodeset(doc, (xmlChar*) tmp); if(result!=NULL) { if(DEBUG>0) printf("[ getLinkProcess ] : got %d nodes\n", result->nodesetval->nodeNr); if(result->nodesetval->nodeNr==1) { node = result->nodesetval->nodeTab[0]; if(node!=NULL) { if(strcmp(action,"rxphyready")==0) { char tmp2[256]; getStrValue(doc,node,tmp2); if(strcmp(strToUpper(tmp2),"FALSE")==0) val = 0; else if(strcmp(strToUpper(tmp2),"TRUE")==0) val = 1; else { printf("[ getLinkProcess ] : [ ERROR ] wrong boolean string %s\n",tmp2); val = -2; } } else { val = getIntValue(doc, node); } if(DEBUG>0) printf("[ getLinkProcess ]: got val %d.\n",val); } else { printf("[ getLinkProcess ] : [ WARNING ] no Link nodes found\n"); } } else { printf("[ getLinkProcess ] : [ WARNING ] %d Link nodes found, should be exactly 1\n", result->nodesetval->nodeNr); } } else { printf("[ getLinkProcess ] : [ WARNING ] no results found\n"); } } else { printf("[ getLinkProcess ]: [ ERROR ]: wrong action \"%s\"!\n",action); } } else { printf("[ getLinkProcess ]: [ ERROR ]: wrong record name? \"%s\"!\n",pname); } return val; }
static GList *infb_db_get_authors(xmlDocPtr doc,xmlNodePtr node) { GList *ret=NULL; xmlNodePtr auxn; xmlNodeSetPtr nodeset; xmlXPathObjectPtr result; xmlChar *text; gchar *str=NULL,*tofree; gint i; auxn = getnode(doc,BAD_CAST "author",node); if (auxn) { auxn = getnode(doc,BAD_CAST "personname/firstname",node); /* v5 */ if (!auxn) auxn = getnode(doc,BAD_CAST "firstname",node); /* v4 */ if (auxn) { text = xmlNodeGetContent(auxn); str = g_strdup((gchar*)text); xmlFree(text); } auxn = getnode(doc,BAD_CAST "personname/surname",node); /* v5 */ if (!auxn) auxn = getnode(doc,BAD_CAST "surname",node); /* v4 */ if (auxn) { text = xmlNodeGetContent(auxn); if ( str ) { tofree = str; str = g_strconcat(str,(gchar*)text,NULL); g_free(tofree); } else str = g_strdup((gchar*)text); xmlFree(text); } if (str) ret = g_list_append(ret,str); } else { result = getnodeset(doc, BAD_CAST "authorgroup/author",node); if (result) { nodeset = result->nodesetval; for(i=0;i<nodeset->nodeNr;i++) { auxn = getnode(doc,BAD_CAST "personname/firstname",nodeset->nodeTab[i]); /* v5 */ if (!auxn) auxn = getnode(doc,BAD_CAST "firstname",nodeset->nodeTab[i]); /* v4 */ if (auxn) { text = xmlNodeGetContent(auxn); str = g_strdup((gchar*)text); xmlFree(text); } auxn = getnode(doc,BAD_CAST "personname/surname",nodeset->nodeTab[i]); /* v5 */ if (!auxn) auxn = getnode(doc,BAD_CAST "surname",nodeset->nodeTab[i]); /* v4 */ if (auxn) { text = xmlNodeGetContent(auxn); if ( str ) { tofree = str; str = g_strconcat(str,(gchar*)text,NULL); g_free(tofree); } else str = g_strdup((gchar*)text); xmlFree(text); } if (str) ret = g_list_append(ret,str); } /* set */ xmlXPathFreeObject(result); } } return ret; }