Skip to content

Commit

Permalink
The only entry in the stat buf this code cares about is the size. Kee…
Browse files Browse the repository at this point in the history
…p just

the size, not the whole stat buffer.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29171 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
lattner committed Jul 18, 2006
1 parent cca68fa commit 0af7093
Showing 1 changed file with 14 additions and 14 deletions.
28 changes: 14 additions & 14 deletions lib/System/Unix/MappedFile.inc
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ namespace llvm {
using namespace sys;

struct sys::MappedFileInfo {
int fd_;
struct stat sbuf_;
int FD;
off_t Size;
};

void MappedFile::initialize() {
Expand All @@ -62,14 +62,14 @@ void MappedFile::initialize() {
ThrowErrno(std::string("Can't stat file: ") + path_.toString());
}
info_ = new MappedFileInfo;
info_->fd_ = FD;
info_->sbuf_ = sbuf;
info_->FD = FD;
info_->Size = sbuf.st_size;
}

void MappedFile::terminate() {
assert(info_ && "MappedFile not initialized");
if (info_->fd_ >= 0)
::close(info_->fd_);
if (info_->FD >= 0)
::close(info_->FD);
delete info_;
info_ = 0;
}
Expand All @@ -78,8 +78,8 @@ void MappedFile::unmap() {
assert(info_ && "MappedFile not initialized");
if (isMapped()) {
if (options_ & WRITE_ACCESS)
::msync(base_, info_->sbuf_.st_size, MS_SYNC);
::munmap(base_, info_->sbuf_.st_size);
::msync(base_, info_->Size, MS_SYNC);
::munmap(base_, info_->Size);
}
}

Expand All @@ -106,10 +106,10 @@ void* MappedFile::map() {
else
flags |= MAP_PRIVATE;
}
size_t map_size = ((info_->sbuf_.st_size / Process::GetPageSize())+1) *
size_t map_size = ((info_->Size / Process::GetPageSize())+1) *
Process::GetPageSize();

base_ = ::mmap(0, map_size, prot, flags, info_->fd_, 0);
base_ = ::mmap(0, map_size, prot, flags, info_->FD, 0);
if (base_ == MAP_FAILED)
ThrowErrno(std::string("Can't map file:") + path_.toString());
}
Expand All @@ -118,7 +118,7 @@ void* MappedFile::map() {

size_t MappedFile::size() const {
assert(info_ && "MappedFile not initialized");
return info_->sbuf_.st_size;
return info_->Size;
}

void MappedFile::size(size_t new_size) {
Expand All @@ -128,7 +128,7 @@ void MappedFile::size(size_t new_size) {
this->unmap();

// Adjust the current size to a page boundary
size_t cur_size = ((info_->sbuf_.st_size / Process::GetPageSize())+1) *
size_t cur_size = ((info_->Size / Process::GetPageSize())+1) *
Process::GetPageSize();

// Adjust the new_size to a page boundary
Expand All @@ -139,8 +139,8 @@ void MappedFile::size(size_t new_size) {
if (new_size > cur_size) {
// Ensure we can allocate at least the idodes necessary to handle the
// file size requested.
::lseek(info_->fd_, new_size, SEEK_SET);
::write(info_->fd_, "\0", 1);
::lseek(info_->FD, new_size, SEEK_SET);
::write(info_->FD, "\0", 1);
}

// Seek to current end of file.
Expand Down

0 comments on commit 0af7093

Please sign in to comment.