--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/xml/libxml2libs/src/xmlengineutils/xmlengxmlengine.cpp Thu Dec 17 09:29:21 2009 +0200
@@ -0,0 +1,84 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// This file contains methods that to add/remove XmlEngine user
+//
+
+#include "libxml2_globals_private.h"
+#include <stdapis/libxml2/libxml2_parser.h>
+#include <stdapis/libxml2/libxml2_xpath.h>
+#include <xml/utils/xmlengxestd.h>
+#include <xml/utils/xmlengmem.h>
+
+EXPORT_C void XmlEngLeaveL(TInt aCode)
+{
+ User::Leave(aCode);
+}
+
+EXPORT_C void XmlEngineCleanup(TAny* aParserContext)
+ {
+ xmlGlobalStatePtr gs = xeGetTLS();
+ if (!gs)
+ return; // Note: This should not happen in normal conditions!
+ if (aParserContext)
+ {
+ xmlParserCtxtPtr ctxt = reinterpret_cast<xmlParserCtxtPtr>(aParserContext);
+ if(ctxt->myDoc)
+ {
+ xmlFreeDoc(ctxt->myDoc);
+ }
+ xmlFreeParserCtxt(ctxt);
+ }
+
+#undef xeUserCount
+ if(gs->xeUserCount > 1)
+ {
+ gs->xeUserCount--;
+ return;
+ }
+
+ xmlCleanupGlobalData();
+ }
+
+
+EXPORT_C void XmlEngineAttachL()
+ {
+ xmlGlobalStatePtr gs = xeGetTLS();
+ if(!gs)
+ {
+ gs = xmlCreateAndInitializeGlobalState();
+ if(!gs)
+ {
+ OOM_HAPPENED;
+ }
+ }
+#undef xeUserCount
+ gs->xeUserCount++;
+ }
+
+// ------------------------------------------------------------------------------
+// This function should have matching call to XmlEnginePopAndClose()
+// (which is CleanupStack::PopAndDestroy() so far but may become more complex)
+// ------------------------------------------------------------------------------
+//
+EXPORT_C void XmlEnginePushL()
+ {
+ XmlEngineAttachL();
+ CleanupStack::PushL(TCleanupItem(XmlEngineCleanup, NULL));
+ }
+
+
+EXPORT_C void XmlEnginePopAndClose()
+ {
+ CleanupStack::PopAndDestroy();
+ }