mirror of
https://github.com/wiiu-env/WiiUPluginSystem.git
synced 2024-12-24 00:51:59 +01:00
[General] Moving the FS-wrapper into an own lib, no more macro madness
The library now needs to be build with "make" and installed with "make install". Make sure to include the -lwups into the plugin projecs. If you call "WUPS_InitFS(args);" in the INITIALIZE method, the plugin has full SD/USB access.
This commit is contained in:
parent
1cfa474ca9
commit
797e58f576
1
.gitignore
vendored
1
.gitignore
vendored
@ -8,6 +8,7 @@ plugins/*/bin/*
|
|||||||
plugins/*/build/*
|
plugins/*/build/*
|
||||||
loader/WiiUPluginLoader.cscope_file_list
|
loader/WiiUPluginLoader.cscope_file_list
|
||||||
loader/WiiUPluginLoader.layout
|
loader/WiiUPluginLoader.layout
|
||||||
|
release/*
|
||||||
|
|
||||||
*.mod
|
*.mod
|
||||||
*.cbp
|
*.cbp
|
||||||
|
@ -52,7 +52,7 @@ install:
|
|||||||
- (cd controller_patcher-master && make -j8 && make install)
|
- (cd controller_patcher-master && make -j8 && make install)
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- make
|
- make && make install
|
||||||
- (cd loader && make)
|
- (cd loader && make)
|
||||||
- (cd plugins && make)
|
- (cd plugins && make)
|
||||||
|
|
||||||
|
127
Makefile
127
Makefile
@ -1,15 +1,101 @@
|
|||||||
#---------------------------------------------------------------------------------
|
DO_LOGGING := 0
|
||||||
# Clear the implicit built in rules
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
.SUFFIXES:
|
.SUFFIXES:
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
ifeq ($(strip $(DEVKITPPC)),)
|
ifeq ($(strip $(DEVKITPPC)),)
|
||||||
$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPPC")
|
$(error "Please set DEVKITPPC in your environment. export DEVKITPPC=<path to>devkitPPC)
|
||||||
endif
|
endif
|
||||||
ifeq ($(strip $(DEVKITPRO)),)
|
|
||||||
$(error "Please set DEVKITPRO in your environment. export DEVKITPRO=<path to>devkitPRO")
|
include $(DEVKITPPC)/wii_rules
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# BUILD is the directory where object files & intermediate files will be placed
|
||||||
|
# SOURCES is a list of directories containing source code
|
||||||
|
# INCLUDES is a list of directories containing extra header files
|
||||||
|
# DATA is a list of directories containing binary files
|
||||||
|
# LIBDIR is where the built library will be placed
|
||||||
|
# all directories are relative to this makefile
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
BUILD ?= release
|
||||||
|
SOURCES := src
|
||||||
|
|
||||||
|
INCLUDES := src \
|
||||||
|
wups_include
|
||||||
|
DATA :=
|
||||||
|
LIB := lib
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# options for code generation
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
CFLAGS = -g -Os -Wall -D__wiiu__ -D_GNU_SOURCE $(MACHDEP) $(INCLUDE)
|
||||||
|
CXXFLAGS = $(CFLAGS)
|
||||||
|
|
||||||
|
ifeq ($(DO_LOGGING), 1)
|
||||||
|
CFLAGS += -D__LOGGING__
|
||||||
|
CXXFLAGS += -D__LOGGING__
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ASFLAGS := -mregnames
|
||||||
|
|
||||||
|
export WIIUBIN := $(LIB)/libwups.a
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# any extra libraries we wish to link with the project
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
LIBS :=
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# list of directories containing libraries, this must be the top level containing
|
||||||
|
# include and lib
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
LIBDIRS :=
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# no real need to edit anything past this point unless you need to add additional
|
||||||
|
# rules for different file extensions
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
ifneq ($(BUILD),$(notdir $(CURDIR)))
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
export TOPDIR ?= $(CURDIR)/..
|
||||||
|
export DEPSDIR := $(CURDIR)/$(BUILD)
|
||||||
|
|
||||||
|
export INCLUDEDIR := $(PORTLIBS)/include/libgui
|
||||||
|
|
||||||
|
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
|
||||||
|
$(foreach dir,$(DATA),$(CURDIR)/$(dir))
|
||||||
|
|
||||||
|
CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
|
||||||
|
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
|
||||||
|
sFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
|
||||||
|
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.S)))
|
||||||
|
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
|
||||||
|
|
||||||
|
|
||||||
|
export OFILES := $(addsuffix .o,$(BINFILES)) \
|
||||||
|
$(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) $(sFILES:.s=.o)
|
||||||
|
|
||||||
|
export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
||||||
|
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
||||||
|
$(foreach dir,$(LIBDIRS),-I$(dir)/include)
|
||||||
|
|
||||||
|
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
|
||||||
|
|
||||||
|
.PHONY: $(BUILD) clean
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
$(BUILD):
|
||||||
|
@[ -d $@ ] || mkdir -p $@
|
||||||
|
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
clean:
|
||||||
|
@echo clean ...
|
||||||
|
@rm -fr debug release $(LIB) include
|
||||||
|
|
||||||
|
all: $(WIIUBIN)
|
||||||
|
|
||||||
WUPSDIR := $(DEVKITPRO)/wups
|
WUPSDIR := $(DEVKITPRO)/wups
|
||||||
|
|
||||||
# Rule to install wups.
|
# Rule to install wups.
|
||||||
@ -17,11 +103,32 @@ PHONY += install
|
|||||||
install : wups.ld wups_elf.ld
|
install : wups.ld wups_elf.ld
|
||||||
$(addprefix $Qrm -rf ,$(wildcard $(WUPSDIR)))
|
$(addprefix $Qrm -rf ,$(wildcard $(WUPSDIR)))
|
||||||
$Qmkdir $(WUPSDIR)
|
$Qmkdir $(WUPSDIR)
|
||||||
|
$Qmkdir $(WUPSDIR)/lib/
|
||||||
$Qcp -r wups_include $(WUPSDIR)/include
|
$Qcp -r wups_include $(WUPSDIR)/include
|
||||||
$Qcp -r wups.ld $(WUPSDIR)
|
$Qcp -r wups.ld $(WUPSDIR)
|
||||||
$Qcp -r wups_elf.ld $(WUPSDIR)
|
$Qcp -r wups_elf.ld $(WUPSDIR)
|
||||||
|
@cp $(BUILD)/lib/libwups.a $(WUPSDIR)/lib/
|
||||||
# Rule to install wups.
|
|
||||||
PHONY += uninstall
|
#---------------------------------------------------------------------------------
|
||||||
uninstall :
|
else
|
||||||
$(addprefix $Qrm -rf ,$(wildcard $(WUPSDIR)))
|
|
||||||
|
DEPENDS := $(OFILES:.o=.d)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
# main targets
|
||||||
|
#---------------------------------------------------------------------------------
|
||||||
|
$(WIIUBIN) : $(OFILES) $(LIB)
|
||||||
|
@rm -f "$(WIIUBIN)"
|
||||||
|
@$(AR) rcs "$(WIIUBIN)" $(OFILES)
|
||||||
|
@echo built ... $(notdir $@)
|
||||||
|
|
||||||
|
|
||||||
|
$(LIB):
|
||||||
|
mkdir $(LIB)
|
||||||
|
|
||||||
|
-include $(DEPENDS)
|
||||||
|
|
||||||
|
#---------------------------------------------------------------------------------------
|
||||||
|
endif
|
||||||
|
#---------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -96,7 +96,7 @@ MAKEFLAGS += --no-print-directory
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# any extra libraries we wish to link with the project
|
# any extra libraries we wish to link with the project
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
LIBS := -lutils -ldynamiclibs
|
LIBS := -lwups -lutils -ldynamiclibs
|
||||||
#
|
#
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
@ -153,7 +153,8 @@ export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
|||||||
# build a list of library paths
|
# build a list of library paths
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \
|
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \
|
||||||
-L$(PORTLIBS)/lib
|
-L$(PORTLIBS)/lib \
|
||||||
|
-L$(WUPSDIR)/lib
|
||||||
|
|
||||||
export OUTPUT := $(CURDIR)/$(TARGET)
|
export OUTPUT := $(CURDIR)/$(TARGET)
|
||||||
.PHONY: $(BUILD) clean install
|
.PHONY: $(BUILD) clean install
|
||||||
|
@ -99,7 +99,7 @@ MAKEFLAGS += --no-print-directory
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# any extra libraries we wish to link with the project
|
# any extra libraries we wish to link with the project
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
LIBS := -lcontrollerpatcher -lutils -ldynamiclibs
|
LIBS := -lwups -lcontrollerpatcher -lutils -ldynamiclibs
|
||||||
#
|
#
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
@ -156,7 +156,8 @@ export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
|||||||
# build a list of library paths
|
# build a list of library paths
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \
|
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \
|
||||||
-L$(PORTLIBS)/lib
|
-L$(PORTLIBS)/lib \
|
||||||
|
-L$(WUPSDIR)/lib
|
||||||
|
|
||||||
export OUTPUT := $(CURDIR)/$(TARGET)
|
export OUTPUT := $(CURDIR)/$(TARGET)
|
||||||
.PHONY: $(BUILD) clean install
|
.PHONY: $(BUILD) clean install
|
||||||
|
@ -97,7 +97,7 @@ MAKEFLAGS += --no-print-directory
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# any extra libraries we wish to link with the project
|
# any extra libraries we wish to link with the project
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
LIBS := -lutils -ldynamiclibs
|
LIBS := -lwups -lutils -ldynamiclibs
|
||||||
#
|
#
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
@ -154,7 +154,8 @@ export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
|||||||
# build a list of library paths
|
# build a list of library paths
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \
|
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \
|
||||||
-L$(PORTLIBS)/lib
|
-L$(PORTLIBS)/lib \
|
||||||
|
-L$(WUPSDIR)/lib
|
||||||
|
|
||||||
export OUTPUT := $(CURDIR)/$(TARGET)
|
export OUTPUT := $(CURDIR)/$(TARGET)
|
||||||
.PHONY: $(BUILD) clean install
|
.PHONY: $(BUILD) clean install
|
||||||
|
@ -100,7 +100,7 @@ MAKEFLAGS += --no-print-directory
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# any extra libraries we wish to link with the project
|
# any extra libraries we wish to link with the project
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
LIBS := -liosuhax -lfswrapper -lutils -ldynamiclibs
|
LIBS := -lwups -liosuhax -lfswrapper -lutils -ldynamiclibs
|
||||||
#
|
#
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
@ -152,13 +152,14 @@ export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
|||||||
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
$(foreach dir,$(LIBDIRS),-I$(dir)/include) \
|
||||||
-I$(CURDIR)/$(BUILD) -I$(PORTLIBS)/include \
|
-I$(CURDIR)/$(BUILD) -I$(PORTLIBS)/include \
|
||||||
-I$(PORTLIBS)/include/libutils -I$(PORTLIBS)/include/libfswrapper \
|
-I$(PORTLIBS)/include/libutils -I$(PORTLIBS)/include/libfswrapper \
|
||||||
-I$(WUPSDIR)/include
|
-I$(WUPSDIR)/include
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# build a list of library paths
|
# build a list of library paths
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \
|
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \
|
||||||
-L$(PORTLIBS)/lib
|
-L$(PORTLIBS)/lib \
|
||||||
|
-L$(WUPSDIR)/lib
|
||||||
|
|
||||||
export OUTPUT := $(CURDIR)/$(TARGET)
|
export OUTPUT := $(CURDIR)/$(TARGET)
|
||||||
.PHONY: all $(BUILD) clean install
|
.PHONY: all $(BUILD) clean install
|
||||||
|
@ -20,6 +20,7 @@ WUPS_MODULE_AUTHOR("Maschell");
|
|||||||
WUPS_MODULE_LICENSE("GPL");
|
WUPS_MODULE_LICENSE("GPL");
|
||||||
|
|
||||||
INITIALIZE(args){
|
INITIALIZE(args){
|
||||||
|
WUPS_InitFS(args);
|
||||||
InitOSFunctionPointers();
|
InitOSFunctionPointers();
|
||||||
InitSocketFunctionPointers(); //For logging
|
InitSocketFunctionPointers(); //For logging
|
||||||
InitVPadFunctionPointers(); //For logging
|
InitVPadFunctionPointers(); //For logging
|
||||||
|
@ -99,7 +99,7 @@ MAKEFLAGS += --no-print-directory
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# any extra libraries we wish to link with the project
|
# any extra libraries we wish to link with the project
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
LIBS := -lutils -ldynamiclibs
|
LIBS := -lwups -lutils -ldynamiclibs
|
||||||
#
|
#
|
||||||
|
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
@ -156,7 +156,8 @@ export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
|
|||||||
# build a list of library paths
|
# build a list of library paths
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \
|
export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib) \
|
||||||
-L$(PORTLIBS)/lib
|
-L$(PORTLIBS)/lib \
|
||||||
|
-L$(WUPSDIR)/lib
|
||||||
|
|
||||||
export OUTPUT := $(CURDIR)/$(TARGET)
|
export OUTPUT := $(CURDIR)/$(TARGET)
|
||||||
.PHONY: $(BUILD) clean install
|
.PHONY: $(BUILD) clean install
|
||||||
|
92
src/fs_function_wrapper.c
Normal file
92
src/fs_function_wrapper.c
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <dirent.h>
|
||||||
|
#include <wups.h>
|
||||||
|
|
||||||
|
static void * new_open_ptr __attribute__((section(".data"))) = NULL;
|
||||||
|
static void * new_close_ptr __attribute__((section(".data"))) = NULL;
|
||||||
|
static void * new_write_ptr __attribute__((section(".data"))) = NULL;
|
||||||
|
static void * new_read_ptr __attribute__((section(".data"))) = NULL;
|
||||||
|
static void * new_lseek_ptr __attribute__((section(".data"))) = NULL;
|
||||||
|
static void * new_stat_ptr __attribute__((section(".data"))) = NULL;
|
||||||
|
static void * new_fstat_ptr __attribute__((section(".data"))) = NULL;
|
||||||
|
static void * new_opendir_ptr __attribute__((section(".data"))) = NULL;
|
||||||
|
static void * new_closedir_ptr __attribute__((section(".data"))) = NULL;
|
||||||
|
static void * new_readdir_ptr __attribute__((section(".data"))) = NULL;
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
void WUPS_InitFS(wups_loader_init_args_t* args){
|
||||||
|
if(args != NULL){
|
||||||
|
new_open_ptr = (void*) args->fs_wrapper.open_repl;
|
||||||
|
new_close_ptr = (void*) args->fs_wrapper.close_repl;
|
||||||
|
new_write_ptr = (void*) args->fs_wrapper.write_repl;
|
||||||
|
new_read_ptr = (void*) args->fs_wrapper.read_repl;
|
||||||
|
new_lseek_ptr = (void*) args->fs_wrapper.lseek_repl;
|
||||||
|
new_stat_ptr = (void*) args->fs_wrapper.stat_repl;
|
||||||
|
new_fstat_ptr = (void*) args->fs_wrapper.fstat_repl;
|
||||||
|
new_opendir_ptr = (void*) args->fs_wrapper.opendir_repl;
|
||||||
|
new_closedir_ptr = (void*) args->fs_wrapper.closedir_repl;
|
||||||
|
new_readdir_ptr = (void*) args->fs_wrapper.readdir_repl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int __real_open(const char *pathname, int flags);
|
||||||
|
int __wrap_open(const char *pathname, int flags){
|
||||||
|
if(new_open_ptr == NULL) return __real_open(pathname,flags);
|
||||||
|
return ( (int (*)(const char *,int))((unsigned int*)new_open_ptr) )(pathname,flags);
|
||||||
|
}
|
||||||
|
int __real_close(int fd);
|
||||||
|
int __wrap_close(int fd){
|
||||||
|
if(new_close_ptr == NULL) return __real_close(fd);
|
||||||
|
return ( (int (*)(int))((unsigned int*)new_close_ptr) )(fd);
|
||||||
|
}
|
||||||
|
ssize_t __real_write(int fd, const void *buf, size_t count);
|
||||||
|
ssize_t __wrap_write(int fd, const void *buf, size_t count){
|
||||||
|
if(new_write_ptr == NULL) return __real_write(fd,buf,count);
|
||||||
|
return ( (ssize_t (*)(int, const void *, size_t))((unsigned int*)new_write_ptr) )(fd,buf,count);
|
||||||
|
}
|
||||||
|
ssize_t __real_read(int fd, const void *buf, size_t count);
|
||||||
|
ssize_t __wrap_read(int fd, const void *buf, size_t count){
|
||||||
|
if(new_read_ptr == NULL) return __real_read(fd,buf,count);
|
||||||
|
return ( (ssize_t (*)(int, const void *, size_t))((unsigned int*)new_read_ptr) )(fd,buf,count);
|
||||||
|
}
|
||||||
|
off_t __real_lseek(int fd, off_t offset, int whence);
|
||||||
|
off_t __wrap_lseek(int fd, off_t offset, int whence){
|
||||||
|
if(new_lseek_ptr == NULL) return __real_lseek(fd, offset, whence);
|
||||||
|
return ( (off_t (*)(int, off_t, int))((unsigned int*)new_lseek_ptr) )(fd, offset, whence);
|
||||||
|
}
|
||||||
|
int __real_stat(const char *pathname, struct stat *statbuf);
|
||||||
|
int __wrap_stat(const char *pathname, struct stat *statbuf){
|
||||||
|
if(new_stat_ptr == NULL) return __real_stat(pathname,statbuf);
|
||||||
|
return ( (int (*)(const char *, struct stat *))((unsigned int*)new_stat_ptr) )(pathname,statbuf);
|
||||||
|
}
|
||||||
|
int __real_fstat(int fd, struct stat *statbuf);
|
||||||
|
int __wrap_fstat(int fd, struct stat *statbuf){
|
||||||
|
if(new_fstat_ptr == NULL) return __real_fstat(fd,statbuf);
|
||||||
|
return ( (int (*)(int, struct stat *))((unsigned int*)new_fstat_ptr) )(fd,statbuf);
|
||||||
|
}
|
||||||
|
DIR* __real_opendir(const char * arg);
|
||||||
|
DIR* __wrap_opendir(const char * arg){
|
||||||
|
if(new_opendir_ptr == NULL) return __real_opendir(arg);
|
||||||
|
return ( (DIR* (*)(const char *))((unsigned int*)new_opendir_ptr) )(arg);
|
||||||
|
}
|
||||||
|
int __real_closedir(DIR *dirp);
|
||||||
|
int __wrap_closedir(DIR *dirp){
|
||||||
|
if(new_closedir_ptr == NULL) return __real_closedir(dirp);
|
||||||
|
return ( (int (*)(DIR *))((unsigned int*)new_closedir_ptr) )(dirp);
|
||||||
|
}
|
||||||
|
struct dirent * __real_readdir(DIR *dirp);
|
||||||
|
struct dirent * __wrap_readdir(DIR *dirp){
|
||||||
|
if(new_readdir_ptr == NULL) return __real_readdir(dirp);
|
||||||
|
return ( (struct dirent * (*)(DIR *))((unsigned int*)new_readdir_ptr) )(dirp);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
@ -113,8 +113,6 @@ typedef enum wups_loader_library_type_t {
|
|||||||
WUPS_LOADER_LIBRARY_ZLIB125,
|
WUPS_LOADER_LIBRARY_ZLIB125,
|
||||||
} wups_loader_library_type_t;
|
} wups_loader_library_type_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef enum wups_loader_hook_type_t {
|
typedef enum wups_loader_hook_type_t {
|
||||||
WUPS_LOADER_HOOK_INIT_FUNCTION
|
WUPS_LOADER_HOOK_INIT_FUNCTION
|
||||||
} wups_loader_hook_type_t;
|
} wups_loader_hook_type_t;
|
||||||
@ -173,86 +171,11 @@ typedef struct wups_loader_init_args_t {
|
|||||||
void init(wups_loader_init_args_t*);\
|
void init(wups_loader_init_args_t*);\
|
||||||
void myInit(wups_loader_init_args_t*);\
|
void myInit(wups_loader_init_args_t*);\
|
||||||
WUPS_HOOK_INIT(init); \
|
WUPS_HOOK_INIT(init); \
|
||||||
static void * new_open_ptr __attribute__((section(".data"))) = NULL; \
|
|
||||||
static void * new_close_ptr __attribute__((section(".data"))) = NULL; \
|
|
||||||
static void * new_write_ptr __attribute__((section(".data"))) = NULL; \
|
|
||||||
static void * new_read_ptr __attribute__((section(".data"))) = NULL; \
|
|
||||||
static void * new_lseek_ptr __attribute__((section(".data"))) = NULL; \
|
|
||||||
static void * new_stat_ptr __attribute__((section(".data"))) = NULL; \
|
|
||||||
static void * new_fstat_ptr __attribute__((section(".data"))) = NULL; \
|
|
||||||
static void * new_opendir_ptr __attribute__((section(".data"))) = NULL; \
|
|
||||||
static void * new_closedir_ptr __attribute__((section(".data"))) = NULL; \
|
|
||||||
static void * new_readdir_ptr __attribute__((section(".data"))) = NULL; \
|
|
||||||
void init(wups_loader_init_args_t* args){ \
|
void init(wups_loader_init_args_t* args){ \
|
||||||
if(args != NULL){\
|
if(args != NULL){\
|
||||||
new_open_ptr = (void*) args->fs_wrapper.open_repl; \
|
|
||||||
new_close_ptr = (void*) args->fs_wrapper.close_repl; \
|
|
||||||
new_write_ptr = (void*) args->fs_wrapper.write_repl; \
|
|
||||||
new_read_ptr = (void*) args->fs_wrapper.read_repl; \
|
|
||||||
new_lseek_ptr = (void*) args->fs_wrapper.lseek_repl; \
|
|
||||||
new_stat_ptr = (void*) args->fs_wrapper.stat_repl; \
|
|
||||||
new_fstat_ptr = (void*) args->fs_wrapper.fstat_repl; \
|
|
||||||
new_opendir_ptr = (void*) args->fs_wrapper.opendir_repl; \
|
|
||||||
new_closedir_ptr = (void*) args->fs_wrapper.closedir_repl; \
|
|
||||||
new_readdir_ptr = (void*) args->fs_wrapper.readdir_repl; \
|
|
||||||
}\
|
}\
|
||||||
myInit(args);\
|
myInit(args);\
|
||||||
} \
|
} \
|
||||||
\
|
|
||||||
EXTERN_C_START \
|
|
||||||
\
|
|
||||||
int __real_open(const char *pathname, int flags);\
|
|
||||||
int __wrap_open(const char *pathname, int flags){\
|
|
||||||
if(new_open_ptr == NULL) return __real_open(pathname,flags); \
|
|
||||||
return ( (int (*)(const char *,int))((unsigned int*)new_open_ptr) )(pathname,flags);\
|
|
||||||
}\
|
|
||||||
int __real_close(int fd);\
|
|
||||||
int __wrap_close(int fd){\
|
|
||||||
if(new_close_ptr == NULL) return __real_close(fd); \
|
|
||||||
return ( (int (*)(int))((unsigned int*)new_close_ptr) )(fd);\
|
|
||||||
}\
|
|
||||||
ssize_t __real_write(int fd, const void *buf, size_t count);\
|
|
||||||
ssize_t __wrap_write(int fd, const void *buf, size_t count){\
|
|
||||||
if(new_write_ptr == NULL) return __real_write(fd,buf,count); \
|
|
||||||
return ( (ssize_t (*)(int, const void *, size_t))((unsigned int*)new_write_ptr) )(fd,buf,count);\
|
|
||||||
}\
|
|
||||||
ssize_t __real_read(int fd, const void *buf, size_t count);\
|
|
||||||
ssize_t __wrap_read(int fd, const void *buf, size_t count){\
|
|
||||||
if(new_read_ptr == NULL) return __real_read(fd,buf,count); \
|
|
||||||
return ( (ssize_t (*)(int, const void *, size_t))((unsigned int*)new_read_ptr) )(fd,buf,count);\
|
|
||||||
}\
|
|
||||||
off_t __real_lseek(int fd, off_t offset, int whence);\
|
|
||||||
off_t __wrap_lseek(int fd, off_t offset, int whence){\
|
|
||||||
if(new_lseek_ptr == NULL) return __real_lseek(fd, offset, whence); \
|
|
||||||
return ( (off_t (*)(int, off_t, int))((unsigned int*)new_lseek_ptr) )(fd, offset, whence);\
|
|
||||||
}\
|
|
||||||
int __real_stat(const char *pathname, struct stat *statbuf);\
|
|
||||||
int __wrap_stat(const char *pathname, struct stat *statbuf){\
|
|
||||||
if(new_stat_ptr == NULL) return __real_stat(pathname,statbuf); \
|
|
||||||
return ( (int (*)(const char *, struct stat *))((unsigned int*)new_stat_ptr) )(pathname,statbuf);\
|
|
||||||
}\
|
|
||||||
int __real_fstat(int fd, struct stat *statbuf);\
|
|
||||||
int __wrap_fstat(int fd, struct stat *statbuf){\
|
|
||||||
if(new_fstat_ptr == NULL) return __real_fstat(fd,statbuf); \
|
|
||||||
return ( (int (*)(int, struct stat *))((unsigned int*)new_fstat_ptr) )(fd,statbuf);\
|
|
||||||
}\
|
|
||||||
DIR* __real_opendir(const char * arg);\
|
|
||||||
DIR* __wrap_opendir(const char * arg){\
|
|
||||||
if(new_opendir_ptr == NULL) return __real_opendir(arg); \
|
|
||||||
return ( (DIR* (*)(const char *))((unsigned int*)new_opendir_ptr) )(arg);\
|
|
||||||
}\
|
|
||||||
int __real_closedir(DIR *dirp);\
|
|
||||||
int __wrap_closedir(DIR *dirp){\
|
|
||||||
if(new_closedir_ptr == NULL) return __real_closedir(dirp); \
|
|
||||||
return ( (int (*)(DIR *))((unsigned int*)new_closedir_ptr) )(dirp);\
|
|
||||||
}\
|
|
||||||
struct dirent * __real_readdir(DIR *dirp);\
|
|
||||||
struct dirent * __wrap_readdir(DIR *dirp){\
|
|
||||||
if(new_readdir_ptr == NULL) return __real_readdir(dirp); \
|
|
||||||
return ( (struct dirent * (*)(DIR *))((unsigned int*)new_readdir_ptr) )(dirp);\
|
|
||||||
}\
|
|
||||||
\
|
|
||||||
EXTERN_C_END\
|
|
||||||
void myInit(wups_loader_init_args_t* my_args)
|
void myInit(wups_loader_init_args_t* my_args)
|
||||||
|
|
||||||
typedef enum wups_loader_entry_type_t {
|
typedef enum wups_loader_entry_type_t {
|
||||||
@ -297,6 +220,8 @@ typedef struct wups_loader_entry_t {
|
|||||||
#define WUPS_MODULE_VERSION(x) WUPS_META(version, x)
|
#define WUPS_MODULE_VERSION(x) WUPS_META(version, x)
|
||||||
#define WUPS_MODULE_LICENSE(x) WUPS_META(license, x)
|
#define WUPS_MODULE_LICENSE(x) WUPS_META(license, x)
|
||||||
|
|
||||||
|
void WUPS_InitFS(wups_loader_init_args_t* args);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user