示例#1
0
void Config::load()
{
    isdefault = true;
    if (fullname == NULL)
    {
	    generatedefault();
	    return;
    }

    struct stat st;
    int retcode = lstat(fullname, &st);
    if (retcode != 0) //файла нет?
    {
	    //делаем дефолтный
	    generatedefault();
	    return;
    }
    //читаем файл
    FILE* pfile;
    pfile = fopen(fullname,"r");
    if (pfile!=NULL)
    {
        kLogPrintf("SIZE=%ld\n",st.st_size);
	    char* buf = (char*)malloc(st.st_size + 1);
	    size_t n = fread (buf,1,st.st_size,pfile);
	    buf[n]=0;
	    kLogPrintf("%s\n",buf);
	    root = xmlparse(buf, st.st_size, errmsg);
        if (!errmsg.empty())
            errmsg = fullname + std::string("\n") +  errmsg;
	    fclose (pfile);
        isdefault = false;
    }
}
示例#2
0
Document* XmlParser::parseStream(FILE* fd)
{
	// Specify the stream to use by the parser.
	xmlFlushBuffer();
	xmlin = fd;

	// Start the parsing of the document.
	Document *xdoc = NULL;
	int xmlErr = xmlparse(&xdoc);

	return xdoc;
}
示例#3
0
文件: xmlparse.cpp 项目: h4314/lg
bool parseXML(FILE* f, xml::Document * doc) {
  int err;

  document_ = doc;

  xmlin = f;
  // parsing du xml en utilisant le parser généré par Bison
  err = xmlparse();
  if (err != 0)
    printf("XML file : parse ended with %d error(s)\n", err);
  else
    printf("XML file : parse ended with sucess\n");

  return (err == 0);
}
示例#4
0
Item* Srv::req(const char* fmt, ...) //выполнить запрос (вернет дерево или NULL)
{
    if (hsock == -1)
	createconnect();
    if (hsock == -1)
	return NULL;
    // === посылаем запрос ===
    char req[1024];
    strcpy(req, "<boinc_gui_rpc_request>\n");
    strcat(req, fmt);
    strcat(req, "\n</boinc_gui_rpc_request>\n\003");
    va_list	args;
    lock();
    va_start(args, fmt);
    sendreq(req, args);
    va_end(args);
    char* result = waitresult();
    unlock();
    if (result != NULL) //получен ответ
    {
	// === отрезаем теги <boinc_gui_rpc_reply> </boinc_gui_rpc_reply>
	const char* teg1 = "<boinc_gui_rpc_reply>";
	const char* teg2 = "</boinc_gui_rpc_reply>";
	char* b = strstr(result,teg1);
	char* e = strstr(result,teg2);
	if (( b == NULL)||( e == NULL))
	{
	    free(result);
	    return NULL;
	}
	*e = '\0';
	b = b + strlen(teg1);
	while ( (*b != '\0')&&(*b != '<') )
	    b++; //отрезаем лидирующие переводы строки и т.д.
	// === костыль ТОЛЬКО для <get_messages>
	if (strstr(fmt, "<get_messages>") != NULL)
	    b =  (char*)stripinvalidtag(b, strlen(b)); //убираем кривые теги
	// === разбираем ответ ===
	lock();
    std::string errmsg;
	Item* dom = xmlparse(b, strlen(b), errmsg); //парсим xml
	unlock();
	free(result); //рез-т в тесктовом виде больше не нужен
	return dom;
    }
    else
	return NULL;
}
示例#5
0
int main(int argc, char **argv)
{
  int err = -1;
  int errXML, errDTD;

  FILE *fidXML, *fidDTD;

  if(argc != 2){
 	printf("Parse ended with %d error(s)\n", err);
  }

  /* Analyse XML */
  fidXML = fopen(argv[1], "r");
  xmlin  = fidXML;

  errXML = xmlparse();
  fclose(fidXML);
  if (errXML != 0) printf("Parse XML ended with %d error(s)\n", errXML);
  	else  printf("Parse XML ended with sucess\n", errXML);


  /* Analyse DTD */
  fidDTD = fopen(argv[2], "r");
  dtdin  = fidDTD;

  errDTD = dtdparse();
  fclose(fidXML);
  if (errDTD != 0) printf("Parse DTD ended with %d error(s)\n", errDTD);
  	else  printf("Parse DTD ended with sucess\n", errDTD);

	//docXML;
	//docDTD;

  return 0;

}