Vignesh Venkatasubramanianthird_party/libwebm: pull from upstreamc33787712 years agoHistory
132 lines · 2.4 KB · C++
RawDownload
// Copyright (c) 2010 The WebM project authors. All Rights Reserved.//// Use of this source code is governed by a BSD-style license// that can be found in the LICENSE file in the root of the source// tree. An additional intellectual property rights grant can be found// in the file PATENTS.  All contributing project authors may// be found in the AUTHORS file in the root of the source tree. #include "mkvreader.hpp" #include <cassert> namespace mkvparser { MkvReader::MkvReader() : m_file(NULL), reader_owns_file_(true) {} MkvReader::MkvReader(FILE* fp) : m_file(fp), reader_owns_file_(false) {  GetFileSize();} MkvReader::~MkvReader() {  if (reader_owns_file_)    Close();  m_file = NULL;} int MkvReader::Open(const char* fileName) {  if (fileName == NULL)    return -1;   if (m_file)    return -1; #ifdef _MSC_VER  const errno_t e = fopen_s(&m_file, fileName, "rb");   if (e)    return -1;  // error#else  m_file = fopen(fileName, "rb");   if (m_file == NULL)    return -1;#endif  return !GetFileSize();} bool MkvReader::GetFileSize() {  if (m_file == NULL)    return false;#ifdef _MSC_VER  int status = _fseeki64(m_file, 0L, SEEK_END);   if (status)    return false;  // error   m_length = _ftelli64(m_file);#else  fseek(m_file, 0L, SEEK_END);  m_length = ftell(m_file);#endif  assert(m_length >= 0);   if (m_length < 0)    return false; #ifdef _MSC_VER  status = _fseeki64(m_file, 0L, SEEK_SET);   if (status)    return false;  // error#else  fseek(m_file, 0L, SEEK_SET);#endif   return true;} void MkvReader::Close() {  if (m_file != NULL) {    fclose(m_file);    m_file = NULL;  }} int MkvReader::Length(long long* total, long long* available) {  if (m_file == NULL)    return -1;   if (total)    *total = m_length;   if (available)    *available = m_length;   return 0;} int MkvReader::Read(long long offset, long len, unsigned char* buffer) {  if (m_file == NULL)    return -1;   if (offset < 0)    return -1;   if (len < 0)    return -1;   if (len == 0)    return 0;   if (offset >= m_length)    return -1; #ifdef _MSC_VER  const int status = _fseeki64(m_file, offset, SEEK_SET);   if (status)    return -1;  // error#else  fseek(m_file, offset, SEEK_SET);#endif   const size_t size = fread(buffer, 1, len, m_file);   if (size < size_t(len))    return -1;  // error   return 0;  // success} }  // end namespace mkvparser

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t