summaryrefslogtreecommitdiff
path: root/ACEXML/common/StreamFactory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACEXML/common/StreamFactory.cpp')
-rw-r--r--ACEXML/common/StreamFactory.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/ACEXML/common/StreamFactory.cpp b/ACEXML/common/StreamFactory.cpp
index 80edc8a265f..005b18c668b 100644
--- a/ACEXML/common/StreamFactory.cpp
+++ b/ACEXML/common/StreamFactory.cpp
@@ -3,6 +3,7 @@
#include "ACEXML/common/StreamFactory.h"
#include "ACEXML/common/FileCharStream.h"
#include "ACEXML/common/HttpCharStream.h"
+#include "ACEXML/common/ZipCharStream.h"
ACE_RCSID (common, StreamFactory, "$Id$")
@@ -11,8 +12,8 @@ ACEXML_StreamFactory::create_stream (const ACEXML_Char* uri)
{
if (uri == 0)
return 0;
-
ACEXML_FileCharStream* fstream = 0;
+ ACEXML_ZipCharStream* zstream = 0;
ACEXML_HttpCharStream* hstream = 0;
if (ACE_OS::strstr (uri, ACE_TEXT("ftp://")) != 0)
@@ -24,17 +25,22 @@ ACEXML_StreamFactory::create_stream (const ACEXML_Char* uri)
ACE_NEW_RETURN (hstream, ACEXML_HttpCharStream, 0);
if (hstream->open (uri) != -1)
return hstream;
- else
- return 0;
}
else
{
+ if (ACE_OS::strstr (uri, ACE_TEXT ("file://")) != 0)
+ uri += 7; // Skip over file://
ACE_NEW_RETURN (fstream, ACEXML_FileCharStream, 0);
if (fstream->open (uri) != -1)
return fstream;
else
- return 0;
+ {
+ ACE_NEW_RETURN (zstream, ACEXML_ZipCharStream, 0);
+ if (zstream->open (uri) != -1)
+ return zstream;
+ }
}
+ return 0;
}
ACEXML_StreamFactory::~ACEXML_StreamFactory ()