Creates memory stream as copy of another stream.
| 2960 | } |
| 2961 | /// Creates memory stream as copy of another stream. |
| 2962 | lverror_t CreateCopy( LVStreamRef srcStream, lvopen_mode_t mode ) |
| 2963 | { |
| 2964 | Close(); |
| 2965 | if ( mode!=LVOM_READ || srcStream.isNull() ) |
| 2966 | return LVERR_FAIL; |
| 2967 | lvsize_t sz = srcStream->GetSize(); |
| 2968 | if ( (int)sz <= 0 || sz > 0x200000 ) |
| 2969 | return LVERR_FAIL; |
| 2970 | m_bufsize = sz; |
| 2971 | m_size = 0; |
| 2972 | m_pos = 0; |
| 2973 | m_pBuffer = (lUInt8*)malloc((int)m_bufsize); |
| 2974 | if (m_pBuffer) { |
| 2975 | lvsize_t bytesRead = 0; |
| 2976 | srcStream->Read( m_pBuffer, m_bufsize, &bytesRead ); |
| 2977 | if ( bytesRead!=m_bufsize ) { |
| 2978 | free(m_pBuffer); |
| 2979 | m_pBuffer = 0; |
| 2980 | m_size = 0; |
| 2981 | m_pos = 0; |
| 2982 | m_bufsize = 0; |
| 2983 | return LVERR_FAIL; |
| 2984 | } |
| 2985 | } |
| 2986 | m_size = sz; |
| 2987 | m_own_buffer = true; |
| 2988 | m_mode = mode; |
| 2989 | return LVERR_OK; |
| 2990 | } |
| 2991 | |
| 2992 | |
| 2993 | lverror_t CreateCopy( const lUInt8 * pBuf, lvsize_t size, lvopen_mode_t mode ) |
no test coverage detected