webservices/wsfragment/src/rsendocument.cpp
changeset 31 a8ae8e6fbd42
parent 23 a1df79fa35b4
equal deleted inserted replaced
23:a1df79fa35b4 31:a8ae8e6fbd42
    57     RXmlEngDOMImplementation domImpl;
    57     RXmlEngDOMImplementation domImpl;
    58     domImpl.OpenL();
    58     domImpl.OpenL();
    59     RXmlEngDocument doc;
    59     RXmlEngDocument doc;
    60     doc.OpenL(domImpl);
    60     doc.OpenL(domImpl);
    61     RSenDocument document;
    61     RSenDocument document;
       
    62     CleanupClosePushL(document);
       
    63 	document.ipData =  NULL;
       
    64 	document.iInternal = NULL;
    62     document.ipData = new (ELeave) TSenDocumentData;
    65     document.ipData = new (ELeave) TSenDocumentData;
    63     document.iInternal =
    66     document.iInternal =
    64         (reinterpret_cast<RSenDocument*>(const_cast<RXmlEngDocument*>(&doc)))->iInternal;
    67         (reinterpret_cast<RSenDocument*>(const_cast<RXmlEngDocument*>(&doc)))->iInternal;
    65     document.ipData->iInternal = document.iInternal;
    68     document.ipData->iInternal = document.iInternal;
       
    69 	document.ipData->ipOpenDocuments = NULL;
    66     document.ipData->ipOpenDocuments = new (ELeave) TInt(1);
    70     document.ipData->ipOpenDocuments = new (ELeave) TInt(1);
    67     document.ipData->iDomImpl = domImpl;
    71     document.ipData->iDomImpl = domImpl;
       
    72     CleanupStack::Pop();
    68     TCleanupItem cleanup(CleanupRSenDocument, document.ipData);
    73     TCleanupItem cleanup(CleanupRSenDocument, document.ipData);
    69     CleanupStack::PushL(cleanup);
    74     CleanupStack::PushL(cleanup);
    70     return document;
    75     return document;
    71     }
    76     }
    72 
    77 
    87     RXmlEngDOMImplementation domImpl;
    92     RXmlEngDOMImplementation domImpl;
    88     domImpl.OpenL();
    93     domImpl.OpenL();
    89     RXmlEngDocument doc;
    94     RXmlEngDocument doc;
    90     doc.OpenL(domImpl, aInternal);
    95     doc.OpenL(domImpl, aInternal);
    91     RSenDocument document;
    96     RSenDocument document;
       
    97     CleanupClosePushL(document);
       
    98 	document.ipData =  NULL;
       
    99 	document.iInternal = NULL;	 
    92     document.ipData = new (ELeave) TSenDocumentData;
   100     document.ipData = new (ELeave) TSenDocumentData;
    93     document.iInternal =
   101     document.iInternal =
    94         (reinterpret_cast<RSenDocument*>(const_cast<RXmlEngDocument*>(&doc)))->iInternal;
   102         (reinterpret_cast<RSenDocument*>(const_cast<RXmlEngDocument*>(&doc)))->iInternal;
    95     document.ipData->iInternal = document.iInternal;
   103     document.ipData->iInternal = document.iInternal;
       
   104 	document.ipData->ipOpenDocuments = NULL;	
    96     document.ipData->ipOpenDocuments = new (ELeave) TInt(1);
   105     document.ipData->ipOpenDocuments = new (ELeave) TInt(1);
    97     document.ipData->iDomImpl = domImpl;
   106     document.ipData->iDomImpl = domImpl;
       
   107      CleanupStack::Pop();
    98     TCleanupItem cleanup(CleanupRSenDocument, document.ipData);
   108     TCleanupItem cleanup(CleanupRSenDocument, document.ipData);
    99     CleanupStack::PushL(cleanup);
   109     CleanupStack::PushL(cleanup);
   100     return document;
   110     return document;
   101     }
   111     }
   102 
   112 
   106     return *this;
   116     return *this;
   107     }
   117     }
   108 
   118 
   109 EXPORT_C void RSenDocument::Close()
   119 EXPORT_C void RSenDocument::Close()
   110     {
   120     {
   111     *ipData->ipOpenDocuments = *ipData->ipOpenDocuments - 1;
   121 	if(ipData && ipData->ipOpenDocuments)
   112     if ( !*ipData->ipOpenDocuments )
   122 		{
   113         {
   123 	    *ipData->ipOpenDocuments = *ipData->ipOpenDocuments - 1;
   114         RXmlEngDOMImplementation domImpl = ipData->iDomImpl;
   124 	    if ( !*ipData->ipOpenDocuments )
   115         iInternal = ipData->iInternal;
   125 	        {
   116         delete ipData->ipOpenDocuments;
   126 	        RXmlEngDOMImplementation domImpl = ipData->iDomImpl;
   117         delete ipData;
   127 	        iInternal = ipData->iInternal;
   118         RXmlEngDocument::Close();
   128 	        delete ipData->ipOpenDocuments;
   119         domImpl.Close();
   129 	        delete ipData;
   120     	TBool* pDisabled = (TBool*)Dll::Tls();
   130 	        RXmlEngDocument::Close();
   121     	if ( !pDisabled )
   131 	        domImpl.Close();
   122     	    {
   132 	    	TBool* pDisabled = (TBool*)Dll::Tls();
   123             XmlEngineCleanup();
   133 	    	if ( !pDisabled )
   124     	    }
   134 	    	    {
   125         }
   135 	            XmlEngineCleanup();
   126     else
   136 	    	    }
   127         {
   137 	        }
   128         iInternal = NULL;
   138 	    else
   129         }
   139 	        {
   130        
   140 	        iInternal = NULL;
       
   141 	        }
       
   142        }
   131     }
   143     }
   132 
   144 
   133 EXPORT_C void RSenDocument::Destroy()
   145 EXPORT_C void RSenDocument::Destroy()
   134     {
   146     {
   135     RSenDocument::Close();
   147     RSenDocument::Close();