Пример #1
0
int goc_memPipeReadChar(GOC_MemPipeStream* pipe)
{
	int c = -1;
	CHECK_NULL(pipe);
	// sprawdzenie, czy mamy strumien danych wejsciowych
	if ( pipe->istream )
	{
		c = goc_isReadChar(pipe->istream);
		// strumien danych wejsciowych jeszcze cos ma
		if ( c != -1 )
			return c;
		// strumien wejsciowy skonczyl sie - zamknij go
		goc_isClose(pipe->istream);
		pipe->istream = NULL;
	}
	// czy mamy nastepne dane do odczytu
	if ( !pipe->ostream )
		return -1;
	// zalozenie nowego strumienia wejsciowego z danych wyjsciowych
	pipe->istream = goc_memIStreamOpen(
		goc_memOStreamGet(pipe->ostream),
		goc_memOStreamSize(pipe->ostream));
	// zamknij strumien do zapisu
	goc_osClose(pipe->ostream);
	pipe->ostream = NULL;
	// wykonaj ponowny odczyt z pipe
	return goc_memPipeReadChar(pipe);
}
Пример #2
0
int main(int argc, char **argv)
{
	GOC_IStream *is = NULL;
	GOC_OStream *os = NULL;
	int c;
//	unsigned char *pBuff;
//	unsigned int nBuff;
	char *line;

	if ( argc < 2 )
	{
		GOC_ERROR("No input file name");
		return -1;
	}

	os = goc_memOStreamOpen();

	GOC_INFO("--- GOC_FileIStream test");
	is = goc_fileIStreamOpen(argv[1]);
//	nBuff = goc_isAvailable(is);
//	pBuff = malloc(nBuff);
	GOC_BINFO("Available: %d\n", goc_isAvailable(is));
//	nBuff = 0;
	while ( (c = goc_isReadChar(is)) > 0 )
	{
		goc_osWriteByte(os, (unsigned char)c);
//		pBuff[nBuff++] = c;
		putchar(c);
	}
	goc_isClose(is);

	GOC_INFO("--- GOC_MemIStream test\n");
	is = goc_memIStreamAttach(goc_memOStreamGet(os), goc_memOStreamSize(os));
//	nBuff = goc_isAvailable(is);
	GOC_BINFO("Available: %d\n", goc_isAvailable(is));
	while ( (c = goc_isReadChar(is)) > 0 )
		putchar(c);
	goc_isClose(is);

	GOC_INFO("--- GOC_FileIStream readLine test");
	is = goc_fileIStreamOpen(argv[1]);
	while ( (line = goc_isReadLine(is)) )
	{
		printf("%s\n", line);
	}
	goc_isClose(is);
	
	return 0;
}
Пример #3
0
int goc_memPipeReadArray(GOC_MemPipeStream *pipe, unsigned char *pBuffer, unsigned int nBuffer)
{
	int c;
	int cnt = -1;
	CHECK_NULL(pipe);
	CHECK_NULL(pBuffer);
	// sprawdzenie, czy mamy strumien danych wejsciowych
	if ( pipe->istream )
	{
		cnt = goc_isReadArray(pipe->istream, pBuffer, nBuffer);
		// strumien danych wejsciowych jeszcze cos ma
		if (( cnt != -1 ) && ( cnt == nBuffer ))
			return cnt;
		// strumien wejsciowy skonczyl sie - zamknij go
		goc_isClose(pipe->istream);
		pipe->istream = NULL;
	}
	// czy mamy nastepne dane do odczytu
	if ( !pipe->ostream )
		return cnt;
	if ( cnt == -1 )
		cnt ^= cnt;
	// zalozenie nowego strumienia wejsciowego z danych wyjsciowych
	pipe->istream = goc_memIStreamOpen(
		goc_memOStreamGet(pipe->ostream),
		goc_memOStreamSize(pipe->ostream));
	// zamknij strumien do zapisu
	goc_osClose(pipe->ostream);
	pipe->ostream = NULL;
	// wykonaj dalszy odczyt danych
	c = goc_isReadArray(pipe->istream, pBuffer + cnt, nBuffer);
	if ( c > 0 )
		cnt += c;
	if ( cnt < nBuffer )
	{
		goc_isClose(pipe->istream);
		pipe->istream = NULL;
	}
	return cnt;
}