示例#1
0
文件: xpath.c 项目: tof25/DST
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);
}
示例#2
0
文件: test3.c 项目: github188/doc-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;
}
示例#3
0
文件: febxml.c 项目: nerses73/epics
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);
}
示例#4
0
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;
}
示例#5
0
文件: xmlread.c 项目: kamihouse/TiBot
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;
}
示例#7
0
// 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]);
		
	}
}
示例#8
0
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;
}
示例#9
0
文件: i3_config.c 项目: surki/hipl
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);
}
示例#10
0
文件: i3_config.c 项目: surki/hipl
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);
}
示例#11
0
#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 );
	}
}/*}}}*/
示例#12
0
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);

}
示例#13
0
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);  
      }
    }
  }
  
}
示例#15
0
文件: febxml.c 项目: nerses73/epics
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);
}
示例#16
0
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;
}
示例#17
0
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;
}
示例#18
0
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;
}