Ejemplo n.º 1
0
/***********************************************************************
 * 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;

}
Ejemplo n.º 2
0
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;
}