Files
compute-runtime/shared/source/helpers/file_io_load.cpp
Marcel Skierkowski 5d01677454 refactor: Mock file system in ULTs
Functions: fileExists and loadDataToFile
use IO functions from namespace IoFunctions

Now tests that use these functions
are mocked by default,
but some still require access to real files
and have been restored the ability to read files.
They will be mocked in next PRs.

Related-To: NEO-7006
Signed-off-by: Marcel Skierkowski <marcel.skierkowski@intel.com>
2025-04-09 19:51:46 +02:00

62 lines
1.7 KiB
C++

/*
* Copyright (C) 2022-2025 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/helpers/debug_helpers.h"
#include "shared/source/helpers/stdio.h"
#include "shared/source/utilities/io_functions.h"
#include "file_io.h"
#include <cstring>
#include <new>
std::unique_ptr<char[]> loadDataFromFile(
const char *filename,
size_t &retSize) {
FILE *fp = nullptr;
size_t nsize = 0;
std::unique_ptr<char[]> ret;
DEBUG_BREAK_IF(nullptr == filename);
// Open the file
fp = NEO::IoFunctions::fopenPtr(filename, "rb");
if (fp) {
// Allocate a buffer for the file contents
NEO::IoFunctions::fseekPtr(fp, 0, SEEK_END);
nsize = static_cast<size_t>(NEO::IoFunctions::ftellPtr(fp));
UNRECOVERABLE_IF(nsize == static_cast<size_t>(-1));
NEO::IoFunctions::fseekPtr(fp, 0, SEEK_SET);
ret.reset(new (std::nothrow) char[nsize + 1]);
if (ret) {
// we initialize to all zeroes before reading in data
memset(ret.get(), 0x00, nsize + 1);
[[maybe_unused]] auto read = NEO::IoFunctions::freadPtr(ret.get(), sizeof(unsigned char), nsize, fp);
DEBUG_BREAK_IF(read != nsize);
} else {
nsize = 0;
}
NEO::IoFunctions::fclosePtr(fp);
}
retSize = nsize;
return ret;
}
void dumpFileIncrement(const char *data, size_t dataSize, const std::string &filename, const std::string &extension) {
auto filenameWithExt = filename + extension;
int suffix = 0;
while (fileExists(filenameWithExt)) {
filenameWithExt = filename + "_" + std::to_string(suffix) + extension;
suffix++;
}
writeDataToFile(filenameWithExt.c_str(), data, dataSize);
}