mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-09 12:28:13 -04:00
fix: always use delayed loading for WinFsp DLL
This commit is contained in:
parent
4e60bbb807
commit
b5cbc02110
@ -617,11 +617,16 @@ list(APPEND MAIN_TARGETS mkdwarfs_main dwarfsck_main dwarfsbench_main
|
||||
if(FUSE3_FOUND OR WINFSP OR APPLE)
|
||||
add_library(dwarfs_main src/dwarfs_main.cpp)
|
||||
target_compile_definitions(dwarfs_main PRIVATE _FILE_OFFSET_BITS=64)
|
||||
add_executable(dwarfs-bin src/dwarfs.cpp)
|
||||
target_link_libraries(dwarfs-bin dwarfs_main)
|
||||
set_target_properties(dwarfs-bin PROPERTIES OUTPUT_NAME dwarfs)
|
||||
if(WINFSP)
|
||||
target_compile_definitions(dwarfs_main PRIVATE FUSE_USE_VERSION=32
|
||||
DWARFS_FUSE_LOWLEVEL=0)
|
||||
target_include_directories(dwarfs_main SYSTEM PRIVATE "${WINFSP_PATH}/inc")
|
||||
target_link_libraries(dwarfs_main ${WINFSP})
|
||||
target_link_libraries(dwarfs-bin delayimp.lib)
|
||||
target_link_options(dwarfs-bin PRIVATE /DELAYLOAD:winfsp-x64.dll)
|
||||
if(WITH_UNIVERSAL_BINARY)
|
||||
target_link_libraries(dwarfsuniversal delayimp.lib)
|
||||
target_link_options(dwarfsuniversal PRIVATE /DELAYLOAD:winfsp-x64.dll)
|
||||
@ -633,9 +638,6 @@ if(FUSE3_FOUND OR WINFSP OR APPLE)
|
||||
target_compile_definitions(dwarfs_main PRIVATE FUSE_USE_VERSION=35)
|
||||
target_link_libraries(dwarfs_main PkgConfig::FUSE3)
|
||||
endif()
|
||||
add_executable(dwarfs-bin src/dwarfs.cpp)
|
||||
target_link_libraries(dwarfs-bin dwarfs_main)
|
||||
set_target_properties(dwarfs-bin PROPERTIES OUTPUT_NAME dwarfs)
|
||||
if(WITH_UNIVERSAL_BINARY)
|
||||
target_link_libraries(dwarfsuniversal dwarfs_main)
|
||||
endif()
|
||||
|
@ -72,6 +72,7 @@
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <delayimp.h>
|
||||
#include <fuse3/winfsp_fuse.h>
|
||||
#define st_atime st_atim.tv_sec
|
||||
#define st_ctime st_ctim.tv_sec
|
||||
@ -97,6 +98,7 @@
|
||||
#include "dwarfs_tool_main.h"
|
||||
|
||||
namespace {
|
||||
|
||||
#ifdef DWARFS_FSP_COMPAT
|
||||
using native_stat = struct ::fuse_stat;
|
||||
using native_statvfs = struct ::fuse_statvfs;
|
||||
@ -106,8 +108,32 @@ using native_stat = struct ::stat;
|
||||
using native_statvfs = struct ::statvfs;
|
||||
using native_off_t = ::off_t;
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
FARPROC WINAPI delay_hook(unsigned dliNotify, PDelayLoadInfo pdli) {
|
||||
switch (dliNotify) {
|
||||
case dliFailLoadLib:
|
||||
std::cerr << "failed to load " << pdli->szDll << "\n";
|
||||
break;
|
||||
|
||||
case dliFailGetProc:
|
||||
std::cerr << "failed to load symbol from " << pdli->szDll << "\n";
|
||||
break;
|
||||
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
::exit(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
} // namespace
|
||||
|
||||
#ifdef _WIN32
|
||||
extern "C" const PfnDliHook __pfnDliFailureHook2 = delay_hook;
|
||||
#endif
|
||||
|
||||
namespace dwarfs {
|
||||
|
||||
namespace {
|
||||
|
@ -31,10 +31,6 @@
|
||||
#include <folly/gen/String.h>
|
||||
#include <folly/portability/Windows.h>
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <delayimp.h>
|
||||
#endif
|
||||
|
||||
#include "dwarfs/safe_main.h"
|
||||
#include "dwarfs/tool.h"
|
||||
#include "dwarfs/util.h"
|
||||
@ -44,25 +40,6 @@ namespace {
|
||||
|
||||
using namespace dwarfs;
|
||||
|
||||
#ifdef _WIN32
|
||||
FARPROC WINAPI delay_hook(unsigned dliNotify, PDelayLoadInfo pdli) {
|
||||
switch (dliNotify) {
|
||||
case dliFailLoadLib:
|
||||
std::cerr << "failed to load " << pdli->szDll << "\n";
|
||||
break;
|
||||
|
||||
case dliFailGetProc:
|
||||
std::cerr << "failed to load symbol from " << pdli->szDll << "\n";
|
||||
break;
|
||||
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
::exit(1);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef _WIN32
|
||||
#define EXE_EXT ".exe"
|
||||
#else
|
||||
@ -79,10 +56,6 @@ std::map<std::string_view, int (*)(int, sys_char**)> const functions{
|
||||
|
||||
} // namespace
|
||||
|
||||
#ifdef _WIN32
|
||||
extern "C" const PfnDliHook __pfnDliFailureHook2 = delay_hook;
|
||||
#endif
|
||||
|
||||
int SYS_MAIN(int argc, sys_char** argv) {
|
||||
auto path = std::filesystem::path(argv[0]);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user