RASCSI/cpp/test/linux_os_stubs.cpp

67 lines
1.7 KiB
C++
Raw Normal View History

//---------------------------------------------------------------------------
//
// SCSI Target Emulator PiSCSI
// for Raspberry Pi
//
// Copyright (C) 2022 akuker
//
//---------------------------------------------------------------------------
#include "test/linux_os_stubs.h"
#include "test/test_shared.h"
#include <filesystem>
#include <map>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#ifdef __linux__
#include <sys/epoll.h>
#endif
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/time.h>
using namespace std;
using namespace filesystem;
extern "C" {
#ifdef __USE_LARGEFILE64
FILE *__wrap_fopen64(const char *__restrict __filename, const char *__restrict __modes)
#else
FILE *__wrap_fopen(const char *__restrict __filename, const char *__restrict __modes)
#endif
{
path new_filename;
auto in_filename = path(__filename);
bool create_directory = false;
// If we're trying to open up the device tree soc ranges,
// re-direct it to a temporary local file.
if ((string(__filename) == "/proc/device-tree/soc/ranges") ||
(string(__filename).find(".properties") != string::npos)) {
create_directory = true;
new_filename = test_data_temp_path;
if (!in_filename.has_parent_path()) {
new_filename += "/";
}
new_filename += in_filename;
} else {
new_filename = in_filename;
}
if (create_directory) {
create_directories(new_filename.parent_path());
}
#ifdef __USE_LARGEFILE64
return __real_fopen64(new_filename.c_str(), __modes);
#else
return __real_fopen(new_filename.c_str(), __modes);
#endif
}
} // end extern "C"