xref: /aoo41x/main/vos/source/pipe.cxx (revision e8c8fa4b)
1*e8c8fa4bSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*e8c8fa4bSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*e8c8fa4bSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*e8c8fa4bSAndrew Rist  * distributed with this work for additional information
6*e8c8fa4bSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*e8c8fa4bSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*e8c8fa4bSAndrew Rist  * "License"); you may not use this file except in compliance
9*e8c8fa4bSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*e8c8fa4bSAndrew Rist  *
11*e8c8fa4bSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*e8c8fa4bSAndrew Rist  *
13*e8c8fa4bSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*e8c8fa4bSAndrew Rist  * software distributed under the License is distributed on an
15*e8c8fa4bSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*e8c8fa4bSAndrew Rist  * KIND, either express or implied.  See the License for the
17*e8c8fa4bSAndrew Rist  * specific language governing permissions and limitations
18*e8c8fa4bSAndrew Rist  * under the License.
19*e8c8fa4bSAndrew Rist  *
20*e8c8fa4bSAndrew Rist  *************************************************************/
21*e8c8fa4bSAndrew Rist 
22*e8c8fa4bSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir 
25cdf0e10cSrcweir #include <vos/pipe.hxx>
26cdf0e10cSrcweir #include <vos/diagnose.hxx>
27cdf0e10cSrcweir 
28cdf0e10cSrcweir using namespace vos;
29cdf0e10cSrcweir 
30cdf0e10cSrcweir ///////////////////////////////////////////////////////////////////////////////
31cdf0e10cSrcweir // Pipe
32cdf0e10cSrcweir 
33cdf0e10cSrcweir 
34cdf0e10cSrcweir VOS_IMPLEMENT_CLASSINFO(VOS_CLASSNAME(OPipe, vos),
35cdf0e10cSrcweir 						VOS_NAMESPACE(OPipe, vos),
36cdf0e10cSrcweir 						VOS_NAMESPACE(OObject, vos), 0);
37cdf0e10cSrcweir 
38cdf0e10cSrcweir /*****************************************************************************/
39cdf0e10cSrcweir // OPipe()
40cdf0e10cSrcweir /*****************************************************************************/
OPipe()41cdf0e10cSrcweir OPipe::OPipe()
42cdf0e10cSrcweir {
43cdf0e10cSrcweir 	m_pPipeRef= 0;
44cdf0e10cSrcweir }
45cdf0e10cSrcweir 
46cdf0e10cSrcweir /*****************************************************************************/
47cdf0e10cSrcweir // OPipe()
48cdf0e10cSrcweir /*****************************************************************************/
49cdf0e10cSrcweir 
OPipe(const rtl::OUString & strName,TPipeOption Options)50cdf0e10cSrcweir OPipe::OPipe( const rtl::OUString& strName, TPipeOption Options)
51cdf0e10cSrcweir {
52cdf0e10cSrcweir 	m_pPipeRef =
53cdf0e10cSrcweir 		new PipeRef( osl_createPipe(strName.pData,
54cdf0e10cSrcweir 									(oslPipeOptions)Options,
55cdf0e10cSrcweir 									NULL) );
56cdf0e10cSrcweir 
57cdf0e10cSrcweir 	VOS_POSTCOND(m_pPipeRef != 0, "OPipe(): new failed.\n");
58cdf0e10cSrcweir 	VOS_POSTCOND((*m_pPipeRef)(), "OPipe(): creation of pipe failed!\n");
59cdf0e10cSrcweir }
60cdf0e10cSrcweir 
61cdf0e10cSrcweir /*****************************************************************************/
62cdf0e10cSrcweir // OPipe()
63cdf0e10cSrcweir /*****************************************************************************/
64cdf0e10cSrcweir 
OPipe(const rtl::OUString & strName,TPipeOption Options,const OSecurity & rSecurity)65cdf0e10cSrcweir OPipe::OPipe( const rtl::OUString& strName,
66cdf0e10cSrcweir 			  TPipeOption Options,
67cdf0e10cSrcweir 			  const OSecurity& rSecurity)
68cdf0e10cSrcweir {
69cdf0e10cSrcweir 	m_pPipeRef=
70cdf0e10cSrcweir 		new PipeRef(osl_createPipe(strName.pData,
71cdf0e10cSrcweir 								   (oslPipeOptions)Options,
72cdf0e10cSrcweir 								   (oslSecurity)rSecurity));
73cdf0e10cSrcweir 
74cdf0e10cSrcweir 	VOS_POSTCOND(m_pPipeRef != 0, "OPipe(): new failed.\n");
75cdf0e10cSrcweir 	VOS_POSTCOND((*m_pPipeRef)(), "OPipe(): creation of pipe failed!\n");
76cdf0e10cSrcweir }
77cdf0e10cSrcweir 
78cdf0e10cSrcweir /*****************************************************************************/
79cdf0e10cSrcweir // OPipe()
80cdf0e10cSrcweir /*****************************************************************************/
OPipe(const OPipe & pipe)81cdf0e10cSrcweir OPipe::OPipe(const OPipe& pipe) :
82cdf0e10cSrcweir OReference(), OObject()
83cdf0e10cSrcweir {
84cdf0e10cSrcweir 
85cdf0e10cSrcweir 	VOS_ASSERT(pipe.m_pPipeRef != 0);
86cdf0e10cSrcweir 
87cdf0e10cSrcweir 	m_pPipeRef= pipe.m_pPipeRef;
88cdf0e10cSrcweir 
89cdf0e10cSrcweir 	m_pPipeRef->acquire();
90cdf0e10cSrcweir }
91cdf0e10cSrcweir 
92cdf0e10cSrcweir /*****************************************************************************/
93cdf0e10cSrcweir // OPipe()
94cdf0e10cSrcweir /*****************************************************************************/
OPipe(oslPipe Pipe)95cdf0e10cSrcweir OPipe::OPipe(oslPipe Pipe)
96cdf0e10cSrcweir {
97cdf0e10cSrcweir 	m_pPipeRef = new PipeRef(Pipe);
98cdf0e10cSrcweir }
99cdf0e10cSrcweir 
100cdf0e10cSrcweir 
101cdf0e10cSrcweir /*****************************************************************************/
102cdf0e10cSrcweir // ~OPipe()
103cdf0e10cSrcweir /*****************************************************************************/
~OPipe()104cdf0e10cSrcweir OPipe::~OPipe()
105cdf0e10cSrcweir {
106cdf0e10cSrcweir 	close();
107cdf0e10cSrcweir }
108cdf0e10cSrcweir 
109cdf0e10cSrcweir /*****************************************************************************/
110cdf0e10cSrcweir // create
111cdf0e10cSrcweir /*****************************************************************************/
create(const rtl::OUString & strName,TPipeOption Options)112cdf0e10cSrcweir sal_Bool OPipe::create( const rtl::OUString& strName, TPipeOption Options )
113cdf0e10cSrcweir {
114cdf0e10cSrcweir 	// if this was a valid pipe, decrease reference
115cdf0e10cSrcweir 	if ((m_pPipeRef) && (m_pPipeRef->release() == 0))
116cdf0e10cSrcweir 	{
117cdf0e10cSrcweir 		osl_releasePipe((*m_pPipeRef)());
118cdf0e10cSrcweir 		delete m_pPipeRef;
119cdf0e10cSrcweir 		m_pPipeRef= 0;
120cdf0e10cSrcweir 	}
121cdf0e10cSrcweir 
122cdf0e10cSrcweir 	m_pPipeRef=
123cdf0e10cSrcweir 		new PipeRef(osl_createPipe(strName.pData,
124cdf0e10cSrcweir 								   (oslPipeOptions)Options,
125cdf0e10cSrcweir 								   NULL));
126cdf0e10cSrcweir 
127cdf0e10cSrcweir 	VOS_POSTCOND(m_pPipeRef != 0, "OPipe(): new failed.\n");
128cdf0e10cSrcweir 
129cdf0e10cSrcweir 	return (*m_pPipeRef)() != 0;
130cdf0e10cSrcweir }
131cdf0e10cSrcweir 
132cdf0e10cSrcweir /*****************************************************************************/
133cdf0e10cSrcweir // create
134cdf0e10cSrcweir /*****************************************************************************/
create(const rtl::OUString & strName,TPipeOption Options,const vos::OSecurity & rSecurity)135cdf0e10cSrcweir sal_Bool OPipe::create( const rtl::OUString& strName,
136cdf0e10cSrcweir 						TPipeOption Options,
137cdf0e10cSrcweir 						const vos::OSecurity& rSecurity )
138cdf0e10cSrcweir {
139cdf0e10cSrcweir 	// if this was a valid pipe, decrease reference
140cdf0e10cSrcweir 	if ((m_pPipeRef) && (m_pPipeRef->release() == 0))
141cdf0e10cSrcweir 	{
142cdf0e10cSrcweir 		osl_releasePipe((*m_pPipeRef)());
143cdf0e10cSrcweir 		delete m_pPipeRef;
144cdf0e10cSrcweir 		m_pPipeRef= 0;
145cdf0e10cSrcweir 	}
146cdf0e10cSrcweir 
147cdf0e10cSrcweir 	m_pPipeRef=
148cdf0e10cSrcweir 		new PipeRef(osl_createPipe(strName.pData,
149cdf0e10cSrcweir 								   (oslPipeOptions)Options,
150cdf0e10cSrcweir 								   (oslSecurity)rSecurity));
151cdf0e10cSrcweir 
152cdf0e10cSrcweir 	VOS_POSTCOND(m_pPipeRef != 0, "OPipe(): new failed.\n");
153cdf0e10cSrcweir 
154cdf0e10cSrcweir 	return (*m_pPipeRef)() != 0;
155cdf0e10cSrcweir }
156cdf0e10cSrcweir 
157cdf0e10cSrcweir /*****************************************************************************/
158cdf0e10cSrcweir // operator=
159cdf0e10cSrcweir /*****************************************************************************/
operator =(const OPipe & pipe)160cdf0e10cSrcweir OPipe& OPipe::operator= (const OPipe& pipe)
161cdf0e10cSrcweir {
162cdf0e10cSrcweir 	VOS_PRECOND(pipe.m_pPipeRef != 0, "OPipe::operator=: tried to assign an empty/invalid pipe\n");
163cdf0e10cSrcweir 
164cdf0e10cSrcweir 	if (m_pPipeRef == pipe.m_pPipeRef)
165cdf0e10cSrcweir 		return *this;
166cdf0e10cSrcweir 
167cdf0e10cSrcweir 	// if this was a valid pipe, decrease reference
168cdf0e10cSrcweir 	if ((m_pPipeRef) && (m_pPipeRef->release() == 0))
169cdf0e10cSrcweir 	{
170cdf0e10cSrcweir 		osl_releasePipe((*m_pPipeRef)());
171cdf0e10cSrcweir 		delete m_pPipeRef;
172cdf0e10cSrcweir 		m_pPipeRef= 0;
173cdf0e10cSrcweir 	}
174cdf0e10cSrcweir 
175cdf0e10cSrcweir 	m_pPipeRef= pipe.m_pPipeRef;
176cdf0e10cSrcweir 
177cdf0e10cSrcweir 	m_pPipeRef->acquire();
178cdf0e10cSrcweir 
179cdf0e10cSrcweir 	return *this;
180cdf0e10cSrcweir }
181cdf0e10cSrcweir 
182cdf0e10cSrcweir /*****************************************************************************/
183cdf0e10cSrcweir // operator oslPipe()
184cdf0e10cSrcweir /*****************************************************************************/
operator oslPipe() const185cdf0e10cSrcweir OPipe::operator oslPipe() const
186cdf0e10cSrcweir {
187cdf0e10cSrcweir 	VOS_ASSERT(m_pPipeRef);
188cdf0e10cSrcweir 	return (*m_pPipeRef)();
189cdf0e10cSrcweir }
190cdf0e10cSrcweir 
191cdf0e10cSrcweir /*****************************************************************************/
192cdf0e10cSrcweir // isValid()
193cdf0e10cSrcweir /*****************************************************************************/
isValid() const194cdf0e10cSrcweir sal_Bool OPipe::isValid() const
195cdf0e10cSrcweir {
196cdf0e10cSrcweir 	return m_pPipeRef != 0 && (*m_pPipeRef)() != 0;
197cdf0e10cSrcweir }
198cdf0e10cSrcweir 
199cdf0e10cSrcweir 
200cdf0e10cSrcweir /*****************************************************************************/
201cdf0e10cSrcweir // close
202cdf0e10cSrcweir /*****************************************************************************/
close()203cdf0e10cSrcweir void OPipe::close()
204cdf0e10cSrcweir {
205cdf0e10cSrcweir 	if (m_pPipeRef && (m_pPipeRef->release() == 0))
206cdf0e10cSrcweir 	{
207cdf0e10cSrcweir 		osl_releasePipe((*m_pPipeRef)());
208cdf0e10cSrcweir 		delete m_pPipeRef;
209cdf0e10cSrcweir 	}
210cdf0e10cSrcweir 	m_pPipeRef= 0;
211cdf0e10cSrcweir }
212cdf0e10cSrcweir 
213cdf0e10cSrcweir /*****************************************************************************/
214cdf0e10cSrcweir // accept
215cdf0e10cSrcweir /*****************************************************************************/
accept(OStreamPipe & Connection)216cdf0e10cSrcweir OPipe::TPipeError OPipe::accept(OStreamPipe& Connection)
217cdf0e10cSrcweir {
218cdf0e10cSrcweir 	if ( isValid() )
219cdf0e10cSrcweir 	{
220cdf0e10cSrcweir 		Connection = osl_acceptPipe((*m_pPipeRef)());
221cdf0e10cSrcweir 
222cdf0e10cSrcweir 		if(Connection.isValid())
223cdf0e10cSrcweir 			return E_None;
224cdf0e10cSrcweir 	}
225cdf0e10cSrcweir 
226cdf0e10cSrcweir 	return getError();
227cdf0e10cSrcweir }
228cdf0e10cSrcweir 
229cdf0e10cSrcweir /*****************************************************************************/
230cdf0e10cSrcweir // recv
231cdf0e10cSrcweir /*****************************************************************************/
recv(void * pBuffer,sal_uInt32 BytesToRead)232cdf0e10cSrcweir sal_Int32 OPipe::recv(void* pBuffer, sal_uInt32 BytesToRead)
233cdf0e10cSrcweir {
234cdf0e10cSrcweir 	if ( isValid() )
235cdf0e10cSrcweir 		return osl_receivePipe((*m_pPipeRef)(),
236cdf0e10cSrcweir 					 		pBuffer,
237cdf0e10cSrcweir 							BytesToRead);
238cdf0e10cSrcweir 	else
239cdf0e10cSrcweir 		return -1;
240cdf0e10cSrcweir 
241cdf0e10cSrcweir }
242cdf0e10cSrcweir 
243cdf0e10cSrcweir /*****************************************************************************/
244cdf0e10cSrcweir // send
245cdf0e10cSrcweir /*****************************************************************************/
send(const void * pBuffer,sal_uInt32 BytesToSend)246cdf0e10cSrcweir sal_Int32 OPipe::send(const void* pBuffer, sal_uInt32 BytesToSend)
247cdf0e10cSrcweir {
248cdf0e10cSrcweir 	if ( isValid() )
249cdf0e10cSrcweir 		return osl_sendPipe((*m_pPipeRef)(),
250cdf0e10cSrcweir 							pBuffer,
251cdf0e10cSrcweir 							BytesToSend);
252cdf0e10cSrcweir 	else
253cdf0e10cSrcweir 		return -1;
254cdf0e10cSrcweir }
255cdf0e10cSrcweir 
256cdf0e10cSrcweir /*****************************************************************************/
257cdf0e10cSrcweir // getError
258cdf0e10cSrcweir /*****************************************************************************/
getError() const259cdf0e10cSrcweir OPipe::TPipeError OPipe::getError() const
260cdf0e10cSrcweir {
261cdf0e10cSrcweir 	if (m_pPipeRef)
262cdf0e10cSrcweir 		return (TPipeError)osl_getLastPipeError((*m_pPipeRef)());
263cdf0e10cSrcweir 	else
264cdf0e10cSrcweir 		return (TPipeError)osl_getLastPipeError(NULL);
265cdf0e10cSrcweir }
266cdf0e10cSrcweir 
267cdf0e10cSrcweir 
268cdf0e10cSrcweir 
269cdf0e10cSrcweir VOS_IMPLEMENT_CLASSINFO(VOS_CLASSNAME(OStreamPipe, vos),
270cdf0e10cSrcweir 						VOS_NAMESPACE(OStreamPipe, vos),
271cdf0e10cSrcweir 						VOS_NAMESPACE(OPipe, vos), 0);
272cdf0e10cSrcweir 
273cdf0e10cSrcweir 
274cdf0e10cSrcweir 
275cdf0e10cSrcweir /*****************************************************************************/
276cdf0e10cSrcweir // OStreamPipe
277cdf0e10cSrcweir /*****************************************************************************/
OStreamPipe()278cdf0e10cSrcweir OStreamPipe::OStreamPipe()
279cdf0e10cSrcweir {
280cdf0e10cSrcweir }
281cdf0e10cSrcweir 
282cdf0e10cSrcweir /*****************************************************************************/
283cdf0e10cSrcweir // OStreamPipe
284cdf0e10cSrcweir /*****************************************************************************/
OStreamPipe(oslPipe Pipe)285cdf0e10cSrcweir OStreamPipe::OStreamPipe(oslPipe Pipe) :
286cdf0e10cSrcweir 	OPipe(Pipe)
287cdf0e10cSrcweir {
288cdf0e10cSrcweir }
289cdf0e10cSrcweir 
290cdf0e10cSrcweir /*****************************************************************************/
291cdf0e10cSrcweir // OStreamPipe
292cdf0e10cSrcweir // copy constructor
293cdf0e10cSrcweir /*****************************************************************************/
OStreamPipe(const OStreamPipe & pipe)294cdf0e10cSrcweir OStreamPipe::OStreamPipe(const OStreamPipe& pipe) :
295cdf0e10cSrcweir OPipe(), IStream()
296cdf0e10cSrcweir {
297cdf0e10cSrcweir 	VOS_ASSERT(pipe.m_pPipeRef != 0);
298cdf0e10cSrcweir 
299cdf0e10cSrcweir 	m_pPipeRef= pipe.m_pPipeRef;
300cdf0e10cSrcweir 
301cdf0e10cSrcweir 	m_pPipeRef->acquire();
302cdf0e10cSrcweir }
303cdf0e10cSrcweir 
304cdf0e10cSrcweir /*****************************************************************************/
305cdf0e10cSrcweir // ~OStreamPipe
306cdf0e10cSrcweir /*****************************************************************************/
~OStreamPipe()307cdf0e10cSrcweir OStreamPipe::~OStreamPipe()
308cdf0e10cSrcweir {
309cdf0e10cSrcweir }
310cdf0e10cSrcweir 
311cdf0e10cSrcweir /*****************************************************************************/
312cdf0e10cSrcweir // operator=(oslPipe)
313cdf0e10cSrcweir /*****************************************************************************/
operator =(oslPipe Pipe)314cdf0e10cSrcweir OStreamPipe& OStreamPipe::operator=(oslPipe Pipe)
315cdf0e10cSrcweir {
316cdf0e10cSrcweir 
317cdf0e10cSrcweir 	// if this was a valid pipe, decrease reference
318cdf0e10cSrcweir 	if (m_pPipeRef && (m_pPipeRef->release() == 0))
319cdf0e10cSrcweir 	{
320cdf0e10cSrcweir 		osl_releasePipe((*m_pPipeRef)());
321cdf0e10cSrcweir 		delete m_pPipeRef;
322cdf0e10cSrcweir 		m_pPipeRef= 0;
323cdf0e10cSrcweir 	}
324cdf0e10cSrcweir 
325cdf0e10cSrcweir 	m_pPipeRef= new PipeRef(Pipe);
326cdf0e10cSrcweir 
327cdf0e10cSrcweir 	VOS_POSTCOND(m_pPipeRef != 0, "OPipe(): new failed.\n");
328cdf0e10cSrcweir 
329cdf0e10cSrcweir 	return *this;
330cdf0e10cSrcweir }
331cdf0e10cSrcweir 
332cdf0e10cSrcweir /*****************************************************************************/
333cdf0e10cSrcweir // operator=OPipe
334cdf0e10cSrcweir /*****************************************************************************/
335cdf0e10cSrcweir 
operator =(const OPipe & pipe)336cdf0e10cSrcweir OStreamPipe& OStreamPipe::operator= (const OPipe& pipe)
337cdf0e10cSrcweir {
338cdf0e10cSrcweir 	OPipe::operator= ( pipe );
339cdf0e10cSrcweir 	return *this;
340cdf0e10cSrcweir }
341cdf0e10cSrcweir 
342cdf0e10cSrcweir /*****************************************************************************/
343cdf0e10cSrcweir // read
344cdf0e10cSrcweir /*****************************************************************************/
read(void * pBuffer,sal_uInt32 n) const345cdf0e10cSrcweir sal_Int32 OStreamPipe::read(void* pBuffer, sal_uInt32 n) const
346cdf0e10cSrcweir {
347cdf0e10cSrcweir 	VOS_ASSERT(m_pPipeRef && (*m_pPipeRef)());
348cdf0e10cSrcweir 
349cdf0e10cSrcweir 	/* loop until all desired bytes were read or an error occured */
350cdf0e10cSrcweir 	sal_Int32 BytesRead= 0;
351cdf0e10cSrcweir 	sal_Int32 BytesToRead= n;
352cdf0e10cSrcweir 	while (BytesToRead > 0)
353cdf0e10cSrcweir 	{
354cdf0e10cSrcweir 		sal_Int32 RetVal;
355cdf0e10cSrcweir 		RetVal= osl_receivePipe((*m_pPipeRef)(),
356cdf0e10cSrcweir 						 	    pBuffer,
357cdf0e10cSrcweir 								BytesToRead);
358cdf0e10cSrcweir 
359cdf0e10cSrcweir 		/* error occured? */
360cdf0e10cSrcweir 		if(RetVal <= 0)
361cdf0e10cSrcweir 		{
362cdf0e10cSrcweir 			break;
363cdf0e10cSrcweir 		}
364cdf0e10cSrcweir 
365cdf0e10cSrcweir 		BytesToRead -= RetVal;
366cdf0e10cSrcweir 		BytesRead += RetVal;
367cdf0e10cSrcweir 		pBuffer= (sal_Char*)pBuffer + RetVal;
368cdf0e10cSrcweir 	}
369cdf0e10cSrcweir 
370cdf0e10cSrcweir 	return BytesRead;
371cdf0e10cSrcweir }
372cdf0e10cSrcweir 
373cdf0e10cSrcweir /*****************************************************************************/
374cdf0e10cSrcweir // write
375cdf0e10cSrcweir /*****************************************************************************/
write(const void * pBuffer,sal_uInt32 n)376cdf0e10cSrcweir sal_Int32 OStreamPipe::write(const void* pBuffer, sal_uInt32 n)
377cdf0e10cSrcweir {
378cdf0e10cSrcweir 	VOS_ASSERT(m_pPipeRef && (*m_pPipeRef)());
379cdf0e10cSrcweir 
380cdf0e10cSrcweir 	/* loop until all desired bytes were send or an error occured */
381cdf0e10cSrcweir 	sal_Int32 BytesSend= 0;
382cdf0e10cSrcweir 	sal_Int32 BytesToSend= n;
383cdf0e10cSrcweir 	while (BytesToSend > 0)
384cdf0e10cSrcweir 	{
385cdf0e10cSrcweir 		sal_Int32 RetVal;
386cdf0e10cSrcweir 
387cdf0e10cSrcweir 		RetVal= osl_sendPipe((*m_pPipeRef)(),
388cdf0e10cSrcweir 								pBuffer,
389cdf0e10cSrcweir 								BytesToSend);
390cdf0e10cSrcweir 
391cdf0e10cSrcweir 		/* error occured? */
392cdf0e10cSrcweir 		if(RetVal <= 0)
393cdf0e10cSrcweir 		{
394cdf0e10cSrcweir 			break;
395cdf0e10cSrcweir 		}
396cdf0e10cSrcweir 
397cdf0e10cSrcweir 		BytesToSend -= RetVal;
398cdf0e10cSrcweir 		BytesSend += RetVal;
399cdf0e10cSrcweir 		pBuffer= (sal_Char*)pBuffer + RetVal;
400cdf0e10cSrcweir 	}
401cdf0e10cSrcweir 
402cdf0e10cSrcweir 	return BytesSend;
403cdf0e10cSrcweir }
404cdf0e10cSrcweir 
isEof() const405cdf0e10cSrcweir sal_Bool OStreamPipe::isEof() const
406cdf0e10cSrcweir {
407cdf0e10cSrcweir 	return isValid();
408cdf0e10cSrcweir }
409cdf0e10cSrcweir 
410cdf0e10cSrcweir 
411cdf0e10cSrcweir 
412cdf0e10cSrcweir 
413