mirror of
https://github.com/LongSoft/UEFITool.git
synced 2024-11-21 23:48:22 +08:00
Provide separate filesystem.cpp
This commit is contained in:
parent
91fb7cdc83
commit
031bd4f734
@ -12,6 +12,7 @@ SET(PROJECT_SOURCES
|
|||||||
uefidump.cpp
|
uefidump.cpp
|
||||||
../common/guiddatabase.cpp
|
../common/guiddatabase.cpp
|
||||||
../common/types.cpp
|
../common/types.cpp
|
||||||
|
../common/filesystem.cpp
|
||||||
../common/descriptor.cpp
|
../common/descriptor.cpp
|
||||||
../common/ffs.cpp
|
../common/ffs.cpp
|
||||||
../common/nvram.cpp
|
../common/nvram.cpp
|
||||||
@ -61,7 +62,12 @@ SET(PROJECT_SOURCES
|
|||||||
../common/zlib/zutil.c
|
../common/zlib/zutil.c
|
||||||
)
|
)
|
||||||
|
|
||||||
ADD_DEFINITIONS(-DU_ENABLE_NVRAM_PARSING_SUPPORT -DU_ENABLE_ME_PARSING_SUPPORT -DU_ENABLE_FIT_PARSING_SUPPORT -DU_ENABLE_GUID_DATABASE_SUPPORT)
|
ADD_DEFINITIONS(
|
||||||
|
-DU_ENABLE_NVRAM_PARSING_SUPPORT
|
||||||
|
-DU_ENABLE_ME_PARSING_SUPPORT
|
||||||
|
-DU_ENABLE_FIT_PARSING_SUPPORT
|
||||||
|
-DU_ENABLE_GUID_DATABASE_SUPPORT
|
||||||
|
)
|
||||||
|
|
||||||
ADD_EXECUTABLE(UEFIExtract ${PROJECT_SOURCES})
|
ADD_EXECUTABLE(UEFIExtract ${PROJECT_SOURCES})
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ SET(PROJECT_SOURCES
|
|||||||
uefifind.cpp
|
uefifind.cpp
|
||||||
../common/guiddatabase.cpp
|
../common/guiddatabase.cpp
|
||||||
../common/types.cpp
|
../common/types.cpp
|
||||||
|
../common/filesystem.cpp
|
||||||
../common/descriptor.cpp
|
../common/descriptor.cpp
|
||||||
../common/ffs.cpp
|
../common/ffs.cpp
|
||||||
../common/nvram.cpp
|
../common/nvram.cpp
|
||||||
|
@ -32,8 +32,6 @@ int main(int argc, char *argv[])
|
|||||||
UEFIFind w;
|
UEFIFind w;
|
||||||
USTATUS result;
|
USTATUS result;
|
||||||
|
|
||||||
initGuidDatabase("guids.csv");
|
|
||||||
|
|
||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
print_usage();
|
print_usage();
|
||||||
return U_SUCCESS;
|
return U_SUCCESS;
|
||||||
|
92
common/filesystem.cpp
Normal file
92
common/filesystem.cpp
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
/* filesystem.c
|
||||||
|
|
||||||
|
Copyright (c) 2023, Nikolaj Schlej. All rights reserved.
|
||||||
|
This program and the accompanying materials
|
||||||
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
|
http://opensource.org/licenses/bsd-license.php
|
||||||
|
|
||||||
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "filesystem.h"
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
USTATUS readFileIntoBuffer(const UString& inPath, UByteArray& buf) {
|
||||||
|
if (!isExistOnFs(inPath))
|
||||||
|
return U_FILE_OPEN;
|
||||||
|
|
||||||
|
std::ifstream inputFile(inPath.toLocal8Bit(), std::ios::in | std::ios::binary);
|
||||||
|
if (!inputFile)
|
||||||
|
return U_FILE_OPEN;
|
||||||
|
std::vector<char> buffer(std::istreambuf_iterator<char>(inputFile),
|
||||||
|
(std::istreambuf_iterator<char>()));
|
||||||
|
inputFile.close();
|
||||||
|
|
||||||
|
buf = buffer;
|
||||||
|
|
||||||
|
return U_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(_WIN32) || defined(__MINGW32__)
|
||||||
|
#include <direct.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
bool isExistOnFs(const UString & path) {
|
||||||
|
struct _stat buf;
|
||||||
|
return (_stat(path.toLocal8Bit(), &buf) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool makeDirectory(const UString & dir) {
|
||||||
|
return (_mkdir(dir.toLocal8Bit()) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool changeDirectory(const UString & dir) {
|
||||||
|
return (_chdir(dir.toLocal8Bit()) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void removeDirectory(const UString & dir) {
|
||||||
|
int r = _rmdir(dir.toLocal8Bit());
|
||||||
|
// Hack: unlike *nix, Windows does not permit deleting current directories.
|
||||||
|
if (r < 0 && errno == EACCES && changeDirectory(dir + UString("/../"))) {
|
||||||
|
(void)_rmdir(dir.toLocal8Bit());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UString getAbsPath(const UString & path) {
|
||||||
|
char abs[_MAX_PATH] = {};
|
||||||
|
if (_fullpath(abs, path.toLocal8Bit(), sizeof(abs)))
|
||||||
|
return UString(abs);
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
bool isExistOnFs(const UString & path) {
|
||||||
|
struct stat buf;
|
||||||
|
return (stat(path.toLocal8Bit(), &buf) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool makeDirectory(const UString & dir) {
|
||||||
|
return (mkdir(dir.toLocal8Bit(), ACCESSPERMS) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void removeDirectory(const UString & dir) {
|
||||||
|
rmdir(dir.toLocal8Bit());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool changeDirectory(const UString & dir) {
|
||||||
|
return (chdir(dir.toLocal8Bit()) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
UString getAbsPath(const UString & path) {
|
||||||
|
char abs[PATH_MAX] = {};
|
||||||
|
// Last is a non-standard extension for non-existent files.
|
||||||
|
if (realpath(path.toLocal8Bit(), abs) || abs[0] != '\0')
|
||||||
|
return UString(abs);
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
#endif
|
@ -1,6 +1,6 @@
|
|||||||
/* filesystem.h
|
/* filesystem.h
|
||||||
|
|
||||||
Copyright (c) 2015, Nikolaj Schlej. All rights reserved.
|
Copyright (c) 2023, Nikolaj Schlej. All rights reserved.
|
||||||
This program and the accompanying materials
|
This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
are licensed and made available under the terms and conditions of the BSD License
|
||||||
which accompanies this distribution. The full text of the license may be found at
|
which accompanies this distribution. The full text of the license may be found at
|
||||||
@ -17,82 +17,12 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||||||
#include "basetypes.h"
|
#include "basetypes.h"
|
||||||
#include "ustring.h"
|
#include "ustring.h"
|
||||||
#include "ubytearray.h"
|
#include "ubytearray.h"
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fstream>
|
|
||||||
|
|
||||||
#if defined(_WIN32) || defined(__MINGW32__)
|
bool isExistOnFs(const UString& path);
|
||||||
#include <direct.h>
|
bool makeDirectory(const UString& dir);
|
||||||
#include <stdlib.h>
|
bool changeDirectory(const UString& dir);
|
||||||
static inline bool isExistOnFs(const UString & path) {
|
void removeDirectory(const UString& dir);
|
||||||
struct _stat buf;
|
UString getAbsPath(const UString& path);
|
||||||
return (_stat(path.toLocal8Bit(), &buf) == 0);
|
USTATUS readFileIntoBuffer(const UString& inPath, UByteArray& buf);
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool makeDirectory(const UString & dir) {
|
|
||||||
return (_mkdir(dir.toLocal8Bit()) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool changeDirectory(const UString & dir) {
|
|
||||||
return (_chdir(dir.toLocal8Bit()) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void removeDirectory(const UString & dir) {
|
|
||||||
int r = _rmdir(dir.toLocal8Bit());
|
|
||||||
// Hack: unlike *nix, Windows does not permit deleting current directories.
|
|
||||||
if (r < 0 && errno == EACCES && changeDirectory(dir + UString("/../"))) {
|
|
||||||
_rmdir(dir.toLocal8Bit());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline UString getAbsPath(const UString & path) {
|
|
||||||
char abs[_MAX_PATH] = {};
|
|
||||||
if (_fullpath(abs, path.toLocal8Bit(), sizeof(abs)))
|
|
||||||
return UString(abs);
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
static inline bool isExistOnFs(const UString & path) {
|
|
||||||
struct stat buf;
|
|
||||||
return (stat(path.toLocal8Bit(), &buf) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool makeDirectory(const UString & dir) {
|
|
||||||
return (mkdir(dir.toLocal8Bit(), ACCESSPERMS) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void removeDirectory(const UString & dir) {
|
|
||||||
rmdir(dir.toLocal8Bit());
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline bool changeDirectory(const UString & dir) {
|
|
||||||
return (chdir(dir.toLocal8Bit()) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline UString getAbsPath(const UString & path) {
|
|
||||||
char abs[PATH_MAX] = {};
|
|
||||||
// Last is a non-standard extension for non-existent files.
|
|
||||||
if (realpath(path.toLocal8Bit(), abs) || abs[0] != '\0')
|
|
||||||
return UString(abs);
|
|
||||||
return path;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static inline USTATUS readFileIntoBuffer(const UString & inPath, UByteArray &buf) {
|
|
||||||
if (!isExistOnFs(inPath))
|
|
||||||
return U_FILE_OPEN;
|
|
||||||
|
|
||||||
std::ifstream inputFile(inPath.toLocal8Bit(), std::ios::in | std::ios::binary);
|
|
||||||
if (!inputFile)
|
|
||||||
return U_FILE_OPEN;
|
|
||||||
std::vector<char> buffer(std::istreambuf_iterator<char>(inputFile),
|
|
||||||
(std::istreambuf_iterator<char>()));
|
|
||||||
inputFile.close();
|
|
||||||
|
|
||||||
buf = buffer;
|
|
||||||
|
|
||||||
return U_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -19,6 +19,7 @@ uefitoolcommon = static_library('uefitoolcommon',
|
|||||||
'guiddatabase.cpp',
|
'guiddatabase.cpp',
|
||||||
'types.cpp',
|
'types.cpp',
|
||||||
'descriptor.cpp',
|
'descriptor.cpp',
|
||||||
|
'filesystem.cpp',
|
||||||
'ffs.cpp',
|
'ffs.cpp',
|
||||||
'nvram.cpp',
|
'nvram.cpp',
|
||||||
'nvramparser.cpp',
|
'nvramparser.cpp',
|
||||||
|
Loading…
Reference in New Issue
Block a user