Ejemplo n.º 1
0
void DaoStream_WriteString( DaoStream *self, DString *val )
{
	int i;
	if( val->mbs ){
		const char *data = val->mbs;
		if( self->redirect && self->redirect->StdioWrite ){
			DString *mbs = DString_New(1);
			DString_SetDataMBS( mbs, data, val->size );
			self->redirect->StdioWrite( self->redirect, mbs );
			DString_Delete( mbs );
		}else if( self->file ){
			if( self->format ){
				fprintf( self->file, self->format, data );
			}else{
				DaoFile_WriteString( self->file, val );
			}
		}else if( self->attribs & DAO_IO_STRING ){
			DString_AppendDataMBS( self->streamString, data, val->size );
		}else{
			if( self->format ){
				printf( self->format, data );
			}else{
				DaoFile_WriteString( stdout, val );
			}
		}
	}else{
		const wchar_t *data = val->wcs;
		if( self->redirect && self->redirect->StdioWrite ){
			DString *mbs = DString_New(1);
			DString_SetWords( mbs, data, val->size );
			self->redirect->StdioWrite( self->redirect, mbs );
			DString_Delete( mbs );
		}else if( self->file ){
			if( self->format ){
				fprintf( self->file, self->format, data );
			}else{
				DaoFile_WriteString( self->file, val );
			}
		}else if( self->attribs & DAO_IO_STRING ){
			DString *wcs = self->streamString;
			int size = 0;
			DString_ToWCS( self->streamString );
			size = wcs->size;
			DString_Resize( self->streamString, wcs->size + val->size );
			memcpy( wcs->wcs + size, val->wcs, val->size * sizeof(wchar_t) );
		}else{
			if( self->format ){
				printf( self->format, data );
			}else{
				DaoFile_WriteString( stdout, val );
			}
		}
	}
}
Ejemplo n.º 2
0
static int DaoFileStream_Write( DaoStream *stream, const void *data, int count )
{
	DaoFileStream *self = (DaoFileStream*) stream;
	DString bytes = DString_WrapBytes( (char*) data, count );
	DaoFile_WriteString( self->file, & bytes );
	return count;
}
Ejemplo n.º 3
0
void DaoCGI_SendFile( DaoProcess *proc, DaoValue *p[], int N )
{
    DString *mbs;
    DString *file = DaoValue_TryGetString( p[0] );
    DString *mime = DaoValue_TryGetString( p[1] );
    DString *notfound = DaoValue_TryGetString( p[2] );
    char buf[IO_BUF_SIZE];
    FILE *fin = fopen( DString_GetData( file ), "r" );
    if( fin == NULL ) {
        printf( "%s", DString_GetData( notfound ) );
        return;
    }
    mbs = DString_New();
    printf( "Content-Type: %s\n\n", DString_GetData( mime ) );
    while(1) {
        size_t count = fread( buf, 1, IO_BUF_SIZE, fin );
        if( count ==0 ) break;
        DString_Reset( mbs, 0 );
        DString_AppendBytes( mbs, buf, count );
        DaoFile_WriteString( stdout, mbs );
    }
    fclose( fin );
    DString_Delete( mbs );
}
Ejemplo n.º 4
0
int DaoStream_WriteStderr( DaoStream *self, const void *data, int count )
{
	DString bytes = DString_WrapBytes( (char*) data, count );
	DaoFile_WriteString( stderr, & bytes );
	return count;
}