2014-02-14 23:21:05 +00:00
|
|
|
// Copyright 2014 Google Inc. All rights reserved.
|
|
|
|
//
|
|
|
|
// Use of this source code is governed by a BSD-style
|
|
|
|
// license that can be found in the LICENSE file or at
|
|
|
|
// https://developers.google.com/open-source/licenses/bsd
|
2013-10-11 21:44:55 +00:00
|
|
|
|
|
|
|
#include "media/file/local_file.h"
|
|
|
|
|
|
|
|
#include "base/file_util.h"
|
|
|
|
#include "base/logging.h"
|
|
|
|
|
2014-09-19 20:41:13 +00:00
|
|
|
namespace edash_packager {
|
2013-10-11 21:44:55 +00:00
|
|
|
namespace media {
|
|
|
|
|
2014-01-24 00:26:00 +00:00
|
|
|
LocalFile::LocalFile(const char* file_name, const char* mode)
|
|
|
|
: File(file_name), file_mode_(mode), internal_file_(NULL) {}
|
2013-10-11 21:44:55 +00:00
|
|
|
|
|
|
|
bool LocalFile::Close() {
|
|
|
|
bool result = true;
|
|
|
|
if (internal_file_) {
|
2014-02-26 23:55:01 +00:00
|
|
|
result = base::CloseFile(internal_file_);
|
2013-10-11 21:44:55 +00:00
|
|
|
internal_file_ = NULL;
|
|
|
|
}
|
|
|
|
delete this;
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
int64 LocalFile::Read(void* buffer, uint64 length) {
|
|
|
|
DCHECK(buffer != NULL);
|
|
|
|
DCHECK(internal_file_ != NULL);
|
|
|
|
return fread(buffer, sizeof(char), length, internal_file_);
|
|
|
|
}
|
|
|
|
|
|
|
|
int64 LocalFile::Write(const void* buffer, uint64 length) {
|
|
|
|
DCHECK(buffer != NULL);
|
|
|
|
DCHECK(internal_file_ != NULL);
|
|
|
|
return fwrite(buffer, sizeof(char), length, internal_file_);
|
|
|
|
}
|
|
|
|
|
|
|
|
int64 LocalFile::Size() {
|
|
|
|
DCHECK(internal_file_ != NULL);
|
|
|
|
|
|
|
|
// Flush any buffered data, so we get the true file size.
|
|
|
|
if (!Flush()) {
|
|
|
|
LOG(ERROR) << "Cannot flush file.";
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
int64 file_size;
|
2014-02-26 23:55:01 +00:00
|
|
|
if (!base::GetFileSize(base::FilePath(file_name()), &file_size)) {
|
2013-10-11 21:44:55 +00:00
|
|
|
LOG(ERROR) << "Cannot get file size.";
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
return file_size;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool LocalFile::Flush() {
|
|
|
|
DCHECK(internal_file_ != NULL);
|
|
|
|
return ((fflush(internal_file_) == 0) && !ferror(internal_file_));
|
|
|
|
}
|
|
|
|
|
|
|
|
bool LocalFile::Eof() {
|
|
|
|
DCHECK(internal_file_ != NULL);
|
|
|
|
return static_cast<bool>(feof(internal_file_));
|
|
|
|
}
|
|
|
|
|
2014-01-24 00:26:00 +00:00
|
|
|
LocalFile::~LocalFile() {}
|
|
|
|
|
|
|
|
bool LocalFile::Open() {
|
|
|
|
internal_file_ =
|
|
|
|
base::OpenFile(base::FilePath(file_name()), file_mode_.c_str());
|
|
|
|
return (internal_file_ != NULL);
|
|
|
|
}
|
|
|
|
|
2013-10-11 21:44:55 +00:00
|
|
|
} // namespace media
|
2014-09-19 20:41:13 +00:00
|
|
|
} // namespace edash_packager
|