1e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent/* 2e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. 3e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * 4e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * Use of this source code is governed by a BSD-style license 5e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * that can be found in the LICENSE file in the root of the source 6e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * tree. An additional intellectual property rights grant can be found 7e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * in the file PATENTS. All contributing project authors may 8e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent * be found in the AUTHORS file in the root of the source tree. 9e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent */ 10e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 11e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#include "file_impl.h" 12e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 13c55a96383497a772a307b346368133960b02ad03Eric Laurent#include <assert.h> 14e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 15e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#ifdef _WIN32 16c55a96383497a772a307b346368133960b02ad03Eric Laurent#include <Windows.h> 17e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#else 18c55a96383497a772a307b346368133960b02ad03Eric Laurent#include <stdarg.h> 19c55a96383497a772a307b346368133960b02ad03Eric Laurent#include <string.h> 20e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#endif 21e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 22e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentnamespace webrtc { 23c55a96383497a772a307b346368133960b02ad03Eric Laurent 24e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentFileWrapper* FileWrapper::Create() 25e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 26e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return new FileWrapperImpl(); 27e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 28e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 29e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentFileWrapperImpl::FileWrapperImpl() 30e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent : _id(NULL), 31e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent _open(false), 32e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent _looping(false), 33e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent _readOnly(false), 34c55a96383497a772a307b346368133960b02ad03Eric Laurent _maxSizeInBytes(0), 35e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent _sizeInBytes(0) 36e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 37e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent memset(_fileNameUTF8, 0, kMaxFileNameSize); 38e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 39e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 40e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric LaurentFileWrapperImpl::~FileWrapperImpl() 41e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 42e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (_id != NULL) 43e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 44e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent fclose(_id); 45e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 46e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 47e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 48c55a96383497a772a307b346368133960b02ad03Eric Laurentint FileWrapperImpl::CloseFile() 49e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 50e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (_id != NULL) 51e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 52e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent fclose(_id); 53e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent _id = NULL; 54e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 55e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent memset(_fileNameUTF8, 0, kMaxFileNameSize); 56e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent _open = false; 57e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return 0; 58e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 59e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 60e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurentint FileWrapperImpl::Rewind() 61e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 62e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if(_looping || !_readOnly) 63e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 64e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (_id != NULL) 65e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 66e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent _sizeInBytes = 0; 67e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return fseek(_id, 0, SEEK_SET); 68e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 69e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 70e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return -1; 71e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 72e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 73c55a96383497a772a307b346368133960b02ad03Eric Laurentint FileWrapperImpl::SetMaxFileSize(size_t bytes) 74e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 75e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent _maxSizeInBytes = bytes; 76e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return 0; 77e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 78e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 79c55a96383497a772a307b346368133960b02ad03Eric Laurentint FileWrapperImpl::Flush() 80e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 81e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (_id != NULL) 82e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 83e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return fflush(_id); 84e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 85e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return -1; 86e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 87e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 88c55a96383497a772a307b346368133960b02ad03Eric Laurentint FileWrapperImpl::FileName(char* fileNameUTF8, 89c55a96383497a772a307b346368133960b02ad03Eric Laurent size_t size) const 90e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 91c55a96383497a772a307b346368133960b02ad03Eric Laurent size_t length = strlen(_fileNameUTF8); 92c55a96383497a772a307b346368133960b02ad03Eric Laurent if(length > kMaxFileNameSize) 93e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 94e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent assert(false); 95e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return -1; 96e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 97c55a96383497a772a307b346368133960b02ad03Eric Laurent if(length < 1) 98e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 99e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return -1; 100e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 101c55a96383497a772a307b346368133960b02ad03Eric Laurent 102e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent // Make sure to NULL terminate 103c55a96383497a772a307b346368133960b02ad03Eric Laurent if(size < length) 104e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 105c55a96383497a772a307b346368133960b02ad03Eric Laurent length = size - 1; 106e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 107c55a96383497a772a307b346368133960b02ad03Eric Laurent memcpy(fileNameUTF8, _fileNameUTF8, length); 108c55a96383497a772a307b346368133960b02ad03Eric Laurent fileNameUTF8[length] = 0; 109e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return 0; 110e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 111e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 112c55a96383497a772a307b346368133960b02ad03Eric Laurentbool FileWrapperImpl::Open() const 113e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 114e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return _open; 115e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 116e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 117c55a96383497a772a307b346368133960b02ad03Eric Laurentint FileWrapperImpl::OpenFile(const char *fileNameUTF8, bool readOnly, 118c55a96383497a772a307b346368133960b02ad03Eric Laurent bool loop, bool text) 119e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 120c55a96383497a772a307b346368133960b02ad03Eric Laurent size_t length = strlen(fileNameUTF8); 121e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (length > kMaxFileNameSize) 122e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 123e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return -1; 124e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 125e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 126e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent _readOnly = readOnly; 127e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 128e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent FILE *tmpId = NULL; 129e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#if defined _WIN32 130e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent wchar_t wideFileName[kMaxFileNameSize]; 131e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent wideFileName[0] = 0; 132e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 133e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent MultiByteToWideChar(CP_UTF8, 134e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 0 /*UTF8 flag*/, 135e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent fileNameUTF8, 136e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent -1 /*Null terminated string*/, 137e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent wideFileName, 138e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent kMaxFileNameSize); 139e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if(text) 140e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 141e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if(readOnly) 142e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 143e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent tmpId = _wfopen(wideFileName, L"rt"); 144e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } else { 145e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent tmpId = _wfopen(wideFileName, L"wt"); 146e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 147e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } else { 148e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if(readOnly) 149e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 150e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent tmpId = _wfopen(wideFileName, L"rb"); 151e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } else { 152e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent tmpId = _wfopen(wideFileName, L"wb"); 153e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 154e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 155e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#else 156e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if(text) 157e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 158e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if(readOnly) 159e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 160e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent tmpId = fopen(fileNameUTF8, "rt"); 161e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } else { 162e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent tmpId = fopen(fileNameUTF8, "wt"); 163e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 164e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } else { 165e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if(readOnly) 166e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 167e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent tmpId = fopen(fileNameUTF8, "rb"); 168e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } else { 169e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent tmpId = fopen(fileNameUTF8, "wb"); 170e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 171e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 172e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent#endif 173e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 174e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (tmpId != NULL) 175e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 176c55a96383497a772a307b346368133960b02ad03Eric Laurent // +1 comes from copying the NULL termination character. 177e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent memcpy(_fileNameUTF8, fileNameUTF8, length + 1); 178e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (_id != NULL) 179e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 180e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent fclose(_id); 181e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 182e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent _id = tmpId; 183e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent _looping = loop; 184e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent _open = true; 185e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return 0; 186e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 187e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return -1; 188e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 189e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 190c55a96383497a772a307b346368133960b02ad03Eric Laurentint FileWrapperImpl::Read(void* buf, int length) 191e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 192c55a96383497a772a307b346368133960b02ad03Eric Laurent if (length < 0) 193c55a96383497a772a307b346368133960b02ad03Eric Laurent return -1; 194c55a96383497a772a307b346368133960b02ad03Eric Laurent 195c55a96383497a772a307b346368133960b02ad03Eric Laurent if (_id == NULL) 196c55a96383497a772a307b346368133960b02ad03Eric Laurent return -1; 197c55a96383497a772a307b346368133960b02ad03Eric Laurent 198c55a96383497a772a307b346368133960b02ad03Eric Laurent int bytes_read = static_cast<int>(fread(buf, 1, length, _id)); 199c55a96383497a772a307b346368133960b02ad03Eric Laurent if (bytes_read != length && !_looping) 200e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 201c55a96383497a772a307b346368133960b02ad03Eric Laurent CloseFile(); 202e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 203c55a96383497a772a307b346368133960b02ad03Eric Laurent return bytes_read; 204e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 205e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 206c55a96383497a772a307b346368133960b02ad03Eric Laurentint FileWrapperImpl::WriteText(const char* format, ...) 207e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 208c55a96383497a772a307b346368133960b02ad03Eric Laurent if (format == NULL) 209c55a96383497a772a307b346368133960b02ad03Eric Laurent return -1; 210c55a96383497a772a307b346368133960b02ad03Eric Laurent 211c55a96383497a772a307b346368133960b02ad03Eric Laurent if (_readOnly) 212c55a96383497a772a307b346368133960b02ad03Eric Laurent return -1; 213e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 214e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent if (_id == NULL) 215e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return -1; 216e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 217c55a96383497a772a307b346368133960b02ad03Eric Laurent va_list args; 218c55a96383497a772a307b346368133960b02ad03Eric Laurent va_start(args, format); 219c55a96383497a772a307b346368133960b02ad03Eric Laurent int num_chars = vfprintf(_id, format, args); 220c55a96383497a772a307b346368133960b02ad03Eric Laurent va_end(args); 221c55a96383497a772a307b346368133960b02ad03Eric Laurent 222c55a96383497a772a307b346368133960b02ad03Eric Laurent if (num_chars >= 0) 223c55a96383497a772a307b346368133960b02ad03Eric Laurent { 224c55a96383497a772a307b346368133960b02ad03Eric Laurent return num_chars; 225c55a96383497a772a307b346368133960b02ad03Eric Laurent } 226c55a96383497a772a307b346368133960b02ad03Eric Laurent else 227e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 228e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent CloseFile(); 229c55a96383497a772a307b346368133960b02ad03Eric Laurent return -1; 230e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 231e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 232e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 233c55a96383497a772a307b346368133960b02ad03Eric Laurentbool FileWrapperImpl::Write(const void* buf, int length) 234e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent{ 235c55a96383497a772a307b346368133960b02ad03Eric Laurent if (buf == NULL) 236c55a96383497a772a307b346368133960b02ad03Eric Laurent return false; 237c55a96383497a772a307b346368133960b02ad03Eric Laurent 238c55a96383497a772a307b346368133960b02ad03Eric Laurent if (length < 0) 239c55a96383497a772a307b346368133960b02ad03Eric Laurent return false; 240c55a96383497a772a307b346368133960b02ad03Eric Laurent 241c55a96383497a772a307b346368133960b02ad03Eric Laurent if (_readOnly) 242c55a96383497a772a307b346368133960b02ad03Eric Laurent return false; 243c55a96383497a772a307b346368133960b02ad03Eric Laurent 244c55a96383497a772a307b346368133960b02ad03Eric Laurent if (_id == NULL) 245c55a96383497a772a307b346368133960b02ad03Eric Laurent return false; 246c55a96383497a772a307b346368133960b02ad03Eric Laurent 247c55a96383497a772a307b346368133960b02ad03Eric Laurent // Check if it's time to stop writing. 248c55a96383497a772a307b346368133960b02ad03Eric Laurent if (_maxSizeInBytes > 0 && (_sizeInBytes + length) > _maxSizeInBytes) 249e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent { 250c55a96383497a772a307b346368133960b02ad03Eric Laurent Flush(); 251c55a96383497a772a307b346368133960b02ad03Eric Laurent return false; 252c55a96383497a772a307b346368133960b02ad03Eric Laurent } 253e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent 254c55a96383497a772a307b346368133960b02ad03Eric Laurent size_t num_bytes = fwrite(buf, 1, length, _id); 255c55a96383497a772a307b346368133960b02ad03Eric Laurent if (num_bytes > 0) 256c55a96383497a772a307b346368133960b02ad03Eric Laurent { 257c55a96383497a772a307b346368133960b02ad03Eric Laurent _sizeInBytes += num_bytes; 258c55a96383497a772a307b346368133960b02ad03Eric Laurent return true; 259e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent } 260c55a96383497a772a307b346368133960b02ad03Eric Laurent 261c55a96383497a772a307b346368133960b02ad03Eric Laurent CloseFile(); 262e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent return false; 263e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} 264c55a96383497a772a307b346368133960b02ad03Eric Laurent 265e48d5845c8b35de2ab73ea055c18a61fa3a9f0beEric Laurent} // namespace webrtc 266