X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=folly%2Fio%2FRecordIO.cpp;h=50c854ec01062bb23b0c0c1b6d216f14393f7724;hb=641ad8da9ecd87271bb3fcf05d06d9b7d85e5ff9;hp=a407505736b9b6a211e2afd3729661da28857cdb;hpb=982acaae2b98b489e407adc4db700530f98a52fb;p=folly.git diff --git a/folly/io/RecordIO.cpp b/folly/io/RecordIO.cpp index a4075057..50c854ec 100644 --- a/folly/io/RecordIO.cpp +++ b/folly/io/RecordIO.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2013 Facebook, Inc. + * Copyright 2017 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,17 +14,17 @@ * limitations under the License. */ -#include "folly/io/RecordIO.h" +#include #include -#include -#include "folly/Exception.h" -#include "folly/FileUtil.h" -#include "folly/Memory.h" -#include "folly/Portability.h" -#include "folly/ScopeGuard.h" -#include "folly/String.h" +#include +#include +#include +#include +#include +#include +#include namespace folly { @@ -54,9 +54,9 @@ void RecordIOWriter::write(std::unique_ptr buf) { DCHECK_EQ(buf->computeChainDataLength(), totalLength); // We're going to write. Reserve space for ourselves. - off_t pos = filePos_.fetch_add(totalLength); + off_t pos = filePos_.fetch_add(off_t(totalLength)); -#ifdef FOLLY_HAVE_PWRITEV +#if FOLLY_HAVE_PWRITEV auto iov = buf->getIov(); ssize_t bytes = pwritevFull(file_.fd(), iov.data(), iov.size(), pos); #else @@ -66,7 +66,7 @@ void RecordIOWriter::write(std::unique_ptr buf) { #endif checkUnixError(bytes, "pwrite() failed"); - DCHECK_EQ(bytes, totalLength); + DCHECK_EQ(size_t(bytes), totalLength); } RecordIOReader::RecordIOReader(File file, uint32_t fileId) @@ -78,12 +78,13 @@ RecordIOReader::Iterator::Iterator(ByteRange range, uint32_t fileId, off_t pos) : range_(range), fileId_(fileId), recordAndPos_(ByteRange(), 0) { - if (pos >= range_.size()) { + if (size_t(pos) >= range_.size()) { + // Note that this branch can execute if pos is negative as well. recordAndPos_.second = off_t(-1); range_.clear(); } else { recordAndPos_.second = pos; - range_.advance(pos); + range_.advance(size_t(pos)); advanceToValid(); } } @@ -94,12 +95,12 @@ void RecordIOReader::Iterator::advanceToValid() { recordAndPos_ = std::make_pair(ByteRange(), off_t(-1)); range_.clear(); // at end } else { - size_t skipped = record.begin() - range_.begin(); + size_t skipped = size_t(record.begin() - range_.begin()); DCHECK_GE(skipped, headerSize()); skipped -= headerSize(); range_.advance(skipped); recordAndPos_.first = record; - recordAndPos_.second += skipped; + recordAndPos_.second += off_t(skipped); } } @@ -164,7 +165,7 @@ size_t prependHeader(std::unique_ptr& buf, uint32_t fileId) { memset(header, 0, sizeof(Header)); header->magic = detail::Header::kMagic; header->fileId = fileId; - header->dataLength = lengthAndHash.first; + header->dataLength = uint32_t(lengthAndHash.first); header->dataHash = lengthAndHash.second; header->headerHash = headerHash(*header); @@ -173,7 +174,7 @@ size_t prependHeader(std::unique_ptr& buf, uint32_t fileId) { RecordInfo validateRecord(ByteRange range, uint32_t fileId) { if (range.size() <= headerSize()) { // records may not be empty - return {0}; + return {0, {}}; } const Header* header = reinterpret_cast(range.begin()); range.advance(sizeof(Header)); @@ -183,14 +184,14 @@ RecordInfo validateRecord(ByteRange range, uint32_t fileId) { header->flags != 0 || (fileId != 0 && header->fileId != fileId) || header->dataLength > range.size()) { - return {0}; + return {0, {}}; } if (headerHash(*header) != header->headerHash) { - return {0}; + return {0, {}}; } range.reset(range.begin(), header->dataLength); if (dataHash(range) != header->dataHash) { - return {0}; + return {0, {}}; } return {header->fileId, range}; } @@ -225,7 +226,7 @@ RecordInfo findRecord(ByteRange searchRange, start += sizeof(magic); } - return {0}; + return {0, {}}; } } // namespace