Blame samples/mmap-test.cpp

Packit 01d647
// ***************************************************************** -*- C++ -*-
Packit 01d647
// mmap-test.cpp
Packit 01d647
// Simple mmap tests
Packit 01d647
Packit 01d647
#include <exiv2/exiv2.hpp>
Packit 01d647
Packit 01d647
#include <iostream>
Packit 01d647
#include <cstring>
Packit 01d647
Packit 01d647
using namespace Exiv2;
Packit 01d647
Packit 01d647
int main(int argc, char* const argv[])
Packit 01d647
try {
Packit 01d647
    if (argc != 2) {
Packit 01d647
        std::cout << "Usage: " << argv[0] << " file\n";
Packit 01d647
        return 1;
Packit 01d647
    }
Packit 01d647
    const char* path = argv[1];
Packit 01d647
Packit 01d647
    FileIo file(path);
Packit 01d647
    // Open the file in read mode
Packit 01d647
    if (file.open("rb") != 0) {
Packit 01d647
        throw Error(kerFileOpenFailed, path, "rb", strError());
Packit 01d647
    }
Packit 01d647
    // Map it to memory
Packit 01d647
    const Exiv2::byte* pData = file.mmap();
Packit 01d647
    long size = (long)file.size();
Packit 01d647
    DataBuf buf(size);
Packit 01d647
    // Read from the memory mapped region
Packit 01d647
    memcpy(buf.pData_, pData, buf.size_);
Packit 01d647
    // Reopen file in write mode and write to it
Packit 01d647
    file.write(buf.pData_, buf.size_);
Packit 01d647
    // Read from the mapped region again
Packit 01d647
    memcpy(buf.pData_, pData, buf.size_);
Packit 01d647
    file.close();
Packit 01d647
Packit 01d647
    return 0;
Packit 01d647
}
Packit 01d647
catch (const AnyError& e) {
Packit 01d647
    std::cout << e << "\n";
Packit 01d647
}