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; }
daoint DaoStream_ReadBytes( DaoStream *self, void *output, daoint count ) { daoint sum = 0; if( count < 0 ) return -1; if( self->Read == NULL ) return -1; while( sum < count ){ DString buffer = DString_WrapBytes( (char*) output, count ); daoint num = count - sum; if( num > 0x7fffffff ) num = 0x7fffffff; num = self->Read( self, & buffer, num ); if( num < 0 ) return -1; if( num == 0 ) break; sum += num; } return sum; }
DString DString_WrapChars( const char *bytes ) { return DString_WrapBytes( bytes, bytes ? strlen( bytes ) : 0 ); }
int DaoStream_WriteStderr( DaoStream *self, const void *data, int count ) { DString bytes = DString_WrapBytes( (char*) data, count ); DaoFile_WriteString( stderr, & bytes ); return count; }