summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorMatúš Kukan <matus.kukan@gmail.com>2013-11-08 16:37:21 +0100
committerMatúš Kukan <matus.kukan@gmail.com>2013-11-13 10:33:18 +0100
commitf116128500531ce3c95d8258a47ddd6d5cb7cb27 (patch)
tree380323ae43c15bbe306b1657a973901d47f43346 /tools
parentf2b3cedc01d66eb42d7ad94d158f3c7ea3c96c41 (diff)
implement very simple SvScriptStream to read from process
It inherits from SvStream, so it could be used easily. Basically, it's just a simple wrapper around osl_executeProcess_WithRedirectedIO() and osl_readFile(). Change-Id: Ifa225c87d2c9be7e71ea113b0832a4fe83ec65b3
Diffstat (limited to 'tools')
-rw-r--r--tools/source/stream/stream.cxx57
1 files changed, 57 insertions, 0 deletions
diff --git a/tools/source/stream/stream.cxx b/tools/source/stream/stream.cxx
index 32babd9b7a6a..7cbdca78292b 100644
--- a/tools/source/stream/stream.cxx
+++ b/tools/source/stream/stream.cxx
@@ -1961,6 +1961,63 @@ void SvMemoryStream::SetSize( sal_Size nNewSize )
ReAllocateMemory( nDiff );
}
+SvScriptStream::SvScriptStream(const OUString& rUrl):
+ mpProcess(NULL), mpHandle(NULL)
+{
+ oslProcessError rc;
+ rc = osl_executeProcess_WithRedirectedIO(
+ rUrl.pData,
+ NULL, 0,
+ osl_Process_HIDDEN,
+ NULL,
+ NULL,
+ NULL, 0,
+ &mpProcess,
+ NULL, &mpHandle, NULL);
+ if (osl_Process_E_None != rc)
+ {
+ mpProcess = NULL;
+ mpHandle = NULL;
+ }
+}
+
+SvScriptStream::~SvScriptStream()
+{
+ if (mpProcess)
+ {
+ osl_terminateProcess(mpProcess);
+ osl_freeProcessHandle(mpProcess);
+ }
+ if (mpHandle)
+ osl_closeFile(mpHandle);
+}
+
+bool SvScriptStream::ReadLine(OString &rStr, sal_Int32)
+{
+ rStr = OString();
+ if (!good())
+ return false;
+
+ OStringBuffer sBuf;
+ sal_Char aChar('\n');
+ sal_uInt64 nBytesRead;
+ while (osl_File_E_None == osl_readFile(mpHandle, &aChar, 1, &nBytesRead)
+ && nBytesRead == 1 && aChar != '\n')
+ {
+ sBuf.append( aChar );
+ }
+ rStr = sBuf.makeStringAndClear();
+ if (!rStr.isEmpty())
+ return true;
+
+ return false;
+}
+
+bool SvScriptStream::good() const
+{
+ return mpHandle != NULL;
+}
+
TYPEINIT0 ( SvDataCopyStream )
void SvDataCopyStream::Assign( const SvDataCopyStream& )