diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2005-01-09 23:29:00 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2005-01-09 23:29:00 +0000 |
commit | bccc8abc79338d1cfdd5ea20f7288452ddf75b84 (patch) | |
tree | c7009daa6a24f65cb6addfee22bc6bc8f40b0d4b /lib/System/Unix/MappedFile.cpp | |
parent | 5cdcc58d51c792d329202bab97c34aefbc043b15 (diff) |
Rename Unix/*.cpp and Win32/*.cpp to have a *.inc suffix so that the silly
gdb debugger doesn't get confused on which file it is reading (the one in
lib/System or the one in lib/System/{Win32,Unix})
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19426 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/System/Unix/MappedFile.cpp')
-rw-r--r-- | lib/System/Unix/MappedFile.cpp | 154 |
1 files changed, 0 insertions, 154 deletions
diff --git a/lib/System/Unix/MappedFile.cpp b/lib/System/Unix/MappedFile.cpp deleted file mode 100644 index 07683c1439..0000000000 --- a/lib/System/Unix/MappedFile.cpp +++ /dev/null @@ -1,154 +0,0 @@ -//===- Unix/MappedFile.cpp - Unix MappedFile Implementation -----*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file was developed by Reid Spencer and is distributed under the -// University of Illinois Open Source License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file provides the generic Unix implementation of the MappedFile concept. -// -//===----------------------------------------------------------------------===// - -//===----------------------------------------------------------------------===// -//=== WARNING: Implementation here must contain only generic UNIX code that -//=== is guaranteed to work on *all* UNIX variants. -//===----------------------------------------------------------------------===// - -#include "Unix.h" -#include "llvm/System/Process.h" - -#ifdef HAVE_FCNTL_H -#include <fcntl.h> -#endif - -#ifdef HAVE_SYS_MMAN_H -#include <sys/mman.h> -#endif - -#ifdef HAVE_SYS_STAT_H -#include <sys/stat.h> -#endif - -namespace llvm { -using namespace sys; - -struct sys::MappedFileInfo { - int fd_; - struct stat sbuf_; -}; - -void MappedFile::initialize() { - if (path_.exists()) { - info_ = new MappedFileInfo; - int mode = 0; - if (options_&READ_ACCESS) - if (options_&WRITE_ACCESS) - mode = O_RDWR; - else - mode = O_RDONLY; - else if (options_&WRITE_ACCESS) - mode = O_WRONLY; - info_->fd_ = ::open(path_.c_str(),mode); - if (info_->fd_ < 0) { - delete info_; - info_ = 0; - ThrowErrno(std::string("Can't open file: ") + path_.toString()); - } - struct stat sbuf; - if(::fstat(info_->fd_, &info_->sbuf_) < 0) { - ::close(info_->fd_); - delete info_; - info_ = 0; - ThrowErrno(std::string("Can't stat file: ") + path_.toString()); - } - } else { - throw std::string("Can't open file: ") + path_.toString(); - } -} - -void MappedFile::terminate() { - assert(info_ && "MappedFile not initialized"); - if (info_->fd_ >= 0) - ::close(info_->fd_); - delete info_; - info_ = 0; -} - -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); - } -} - -void* MappedFile::map() { - assert(info_ && "MappedFile not initialized"); - if (!isMapped()) { - int prot = PROT_NONE; - int flags = 0; -#ifdef MAP_FILE - flags |= MAP_FILE; -#endif - if (options_ == 0) { - prot = PROT_READ; - flags = MAP_PRIVATE; - } else { - if (options_ & READ_ACCESS) - prot |= PROT_READ; - if (options_ & WRITE_ACCESS) - prot |= PROT_WRITE; - if (options_ & EXEC_ACCESS) - prot |= PROT_EXEC; - if (options_ & SHARED_MAPPING) - flags |= MAP_SHARED; - else - flags |= MAP_PRIVATE; - } - size_t map_size = ((info_->sbuf_.st_size / Process::GetPageSize())+1) * - Process::GetPageSize(); - - base_ = ::mmap(0, map_size, prot, flags, info_->fd_, 0); - if (base_ == MAP_FAILED) - ThrowErrno(std::string("Can't map file:") + path_.toString()); - } - return base_; -} - -size_t MappedFile::size() const { - assert(info_ && "MappedFile not initialized"); - return info_->sbuf_.st_size; -} - -void MappedFile::size(size_t new_size) { - assert(info_ && "MappedFile not initialized"); - - // Take the mapping out of memory - this->unmap(); - - // Adjust the current size to a page boundary - size_t cur_size = ((info_->sbuf_.st_size / Process::GetPageSize())+1) * - Process::GetPageSize(); - - // Adjust the new_size to a page boundary - new_size = ((new_size / Process::GetPageSize())+1) * - Process::GetPageSize(); - - // If the file needs to be extended - 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); - } - - // Seek to current end of file. - this->map(); -} - -} - -// vim: sw=2 smartindent smarttab tw=80 autoindent expandtab |