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; } }
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; }
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); }
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; }
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; }