/*********************************************************************** * Function Name : PSPReturnXMLResult * Description : This function appends given element(xmlNode) * to the Result XML * Input : pTrSet - Transaction Set * xmlNode - Result XML element to be appended. * Calling function should free"xmlNode". * Output : none * Return value : CNTRLXML_SUCCESS, CNTRLXML_BADPARAM, CNTRLXML_FAILURE ***********************************************************************/ t_int32 PSPReturnXMLResult (PSPTransactionId_t * pTrSet, DOM xmlNode) { t_char8 xmlDeclare[] = "<?xml version=\"1.0\"encoding=\"UTF-8\"?>"; t_char8 xmlFile[] = "<result><Transaction status=\'ok\'></Transaction></result>"; t_int32 retVal = 0; t_char8 *tempBuff = NULL; if (!xmlNode) { return CNTRLXML_BADPARAM; } if (IsValidTransaction (pTrSet)) { if (pXmlResult == NULL) { /* * Create error XML DOM structure. */ retVal = CNTRLXMLParseXML (xmlFile, &pXmlResult); } if (!pTransList) /*If no transactions in progress */ { /* * Convert the XML structure into string buffer */ retVal = CNTRLXMLtoBuffer (pXmlResult, &tempBuff); if (retVal == CNTRLXML_SUCCESS) { pXMLResultStr = (t_char8 *) T_malloc (T_strlen (xmlDeclare) + T_strlen (tempBuff) + 1); T_strcat (pXMLResultStr, xmlDeclare); T_strcat (pXMLResultStr, tempBuff); free (tempBuff); } } else { /* * Append xmlNode structure to pXmlError */ t_void *rootNode = NULL; t_void *pCurrentCommand = NULL; CNTRLXMLGetRootNode (pXmlResult, &rootNode); retVal = CNTRLXMLGetFirstChildElement (rootNode, &pCurrentCommand); if (retVal != CNTRLXML_SUCCESS) { #ifdef XMLDEBUG XML_Debug ("Could not append the child.", __FUNCTION__); #endif return CNTRLXML_FAILURE; } retVal = CNTRLXMLAppendChildNode (&rootNode, xmlNode); if (retVal != CNTRLXML_SUCCESS) { #ifdef XMLDEBUG XML_Debug ("Could not append the child.", __FUNCTION__); #endif return CNTRLXML_FAILURE; } } } else { /* * Convert the XML structure into string buffer */ retVal = CNTRLXMLtoBuffer (pXmlResult, &pXMLResultStr); if (retVal != CNTRLXML_SUCCESS) { #ifdef XMLDEBUG XML_Debug ("Could not append the Result XML.", __FUNCTION__); #endif return CNTRLXML_FAILURE; } } return CNTRLXML_SUCCESS; }
int T_main(int argc, TCHAR* argv[]) { double Dversion = 2.043; const TCHAR* pdbref = 0; bool debug = false; while (argc > 1 && argv[1][0] == '-') { argv++; argc--; if (argv[0][1] == '-') break; if (argv[0][1] == 'D') Dversion = T_strtod(argv[0] + 2, 0); else if (argv[0][1] == 'C') Dversion = 0; else if (argv[0][1] == 'n') demangleSymbols = false; else if (argv[0][1] == 'e') useTypedefEnum = true; else if (argv[0][1] == 'd' && argv[0][2] == 'e' && argv[0][3] == 'b') // deb[ug] debug = true; else if (argv[0][1] == 's' && argv[0][2]) dotReplacementChar = (char)argv[0][2]; else if (argv[0][1] == 'p' && argv[0][2]) pdbref = argv[0] + 2; else fatal("unknown option: " SARG, argv[0]); } if (argc < 2) { printf("Convert DMD CodeView/DWARF debug information to PDB files, Version %g\n", VERSION); printf("Copyright (c) 2009-2012 by Rainer Schuetze, All Rights Reserved\n"); printf("\n"); printf("License for redistribution is given by the Artistic License 2.0\n"); printf("see file LICENSE for further details\n"); printf("\n"); printf("usage: " SARG " [-Dversion|-C|-n|-e|-sC|-pembedded-pdb] <exe-file> [new-exe-file] [pdb-file]\n", argv[0]); return -1; } PEImage img; if (!img.loadExe(argv[1])) fatal(SARG ": %s", argv[1], img.getLastError()); if (img.countCVEntries() == 0 && !img.hasDWARF()) fatal(SARG ": no codeview debug entries found", argv[1]); CV2PDB cv2pdb(img); cv2pdb.Dversion = Dversion; cv2pdb.debug = debug; cv2pdb.initLibraries(); TCHAR* outname = argv[1]; if (argc > 2 && argv[2][0]) outname = argv[2]; TCHAR pdbname[260]; if (argc > 3) T_strcpy (pdbname, argv[3]); else { T_strcpy (pdbname, outname); TCHAR *pDot = T_strrchr (pdbname, '.'); if (!pDot || pDot <= T_strrchr (pdbname, '/') || pDot <= T_strrchr (pdbname, '\\')) T_strcat (pdbname, TEXT(".pdb")); else T_strcpy (pDot, TEXT(".pdb")); } makefullpath(pdbname); T_unlink(pdbname); if(!cv2pdb.openPDB(pdbname, pdbref)) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if(img.hasDWARF()) { if(!img.relocateDebugLineInfo(0x400000)) fatal(SARG ": %s", argv[1], cv2pdb.getLastError()); if(!cv2pdb.createDWARFModules()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if(!cv2pdb.addDWARFTypes()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if(!cv2pdb.addDWARFLines()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if (!cv2pdb.addDWARFPublics()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if (!cv2pdb.writeDWARFImage(outname)) fatal(SARG ": %s", outname, cv2pdb.getLastError()); } else { if (!cv2pdb.initSegMap()) fatal(SARG ": %s", argv[1], cv2pdb.getLastError()); if (!cv2pdb.initGlobalSymbols()) fatal(SARG ": %s", argv[1], cv2pdb.getLastError()); if (!cv2pdb.initGlobalTypes()) fatal(SARG ": %s", argv[1], cv2pdb.getLastError()); if (!cv2pdb.createModules()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if (!cv2pdb.addTypes()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if (!cv2pdb.addSymbols()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if (!cv2pdb.addSrcLines()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if (!cv2pdb.addPublics()) fatal(SARG ": %s", pdbname, cv2pdb.getLastError()); if (!cv2pdb.writeImage(outname)) fatal(SARG ": %s", outname, cv2pdb.getLastError()); } return 0; }