Fixed addin tables and casts.
This commit is contained in:
parent
9fd3974817
commit
9713b63c26
@ -28,23 +28,26 @@ if(CHANNEL_STATIC_CLIENT_ENTRIES)
|
|||||||
list(REMOVE_DUPLICATES CHANNEL_STATIC_CLIENT_ENTRIES)
|
list(REMOVE_DUPLICATES CHANNEL_STATIC_CLIENT_ENTRIES)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(CLIENT_STATIC_TYPEDEFS "typedef UINT (*static_entry_fkt)();\n")
|
||||||
|
set(CLIENT_STATIC_TYPEDEFS "${CLIENT_STATIC_TYPEDEFS}typedef UINT (*static_addin_fkt)();\n")
|
||||||
|
|
||||||
foreach(STATIC_ENTRY ${CHANNEL_STATIC_CLIENT_ENTRIES})
|
foreach(STATIC_ENTRY ${CHANNEL_STATIC_CLIENT_ENTRIES})
|
||||||
foreach(STATIC_MODULE ${CHANNEL_STATIC_CLIENT_MODULES})
|
foreach(STATIC_MODULE ${CHANNEL_STATIC_CLIENT_MODULES})
|
||||||
if(${${STATIC_MODULE}_CLIENT_ENTRY} STREQUAL ${STATIC_ENTRY})
|
if(${${STATIC_MODULE}_CLIENT_ENTRY} STREQUAL ${STATIC_ENTRY})
|
||||||
set(STATIC_MODULE_NAME ${${STATIC_MODULE}_CLIENT_NAME})
|
set(STATIC_MODULE_NAME ${${STATIC_MODULE}_CLIENT_NAME})
|
||||||
set(STATIC_MODULE_CHANNEL ${${STATIC_MODULE}_CLIENT_CHANNEL})
|
set(STATIC_MODULE_CHANNEL ${${STATIC_MODULE}_CLIENT_CHANNEL})
|
||||||
set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${STATIC_MODULE_NAME})
|
set(${MODULE_PREFIX}_LIBS ${${MODULE_PREFIX}_LIBS} ${STATIC_MODULE_NAME})
|
||||||
|
|
||||||
set(ENTRY_POINT_NAME "${STATIC_MODULE_CHANNEL}_${${STATIC_MODULE}_CLIENT_ENTRY}")
|
set(ENTRY_POINT_NAME "${STATIC_MODULE_CHANNEL}_${${STATIC_MODULE}_CLIENT_ENTRY}")
|
||||||
if(${${STATIC_MODULE}_CLIENT_ENTRY} STREQUAL "VirtualChannelEntry")
|
if(${${STATIC_MODULE}_CLIENT_ENTRY} STREQUAL "VirtualChannelEntry")
|
||||||
set(ENTRY_POINT_IMPORT "extern BOOL VCAPITYPE ${ENTRY_POINT_NAME}(PCHANNEL_ENTRY_POINTS);")
|
set(ENTRY_POINT_IMPORT "extern BOOL VCAPITYPE ${ENTRY_POINT_NAME}(PCHANNEL_ENTRY_POINTS);")
|
||||||
elseif(${${STATIC_MODULE}_CLIENT_ENTRY} STREQUAL "VirtualChannelEntryEx")
|
elseif(${${STATIC_MODULE}_CLIENT_ENTRY} STREQUAL "VirtualChannelEntryEx")
|
||||||
set(ENTRY_POINT_IMPORT "extern BOOL VCAPITYPE ${ENTRY_POINT_NAME}(PCHANNEL_ENTRY_POINTS,PVOID);")
|
set(ENTRY_POINT_IMPORT "extern BOOL VCAPITYPE ${ENTRY_POINT_NAME}(PCHANNEL_ENTRY_POINTS,PVOID);")
|
||||||
else()
|
else()
|
||||||
set(ENTRY_POINT_IMPORT "extern UINT ${ENTRY_POINT_NAME}();")
|
set(ENTRY_POINT_IMPORT "extern UINT ${ENTRY_POINT_NAME}(void);")
|
||||||
endif()
|
endif()
|
||||||
set(${STATIC_ENTRY}_IMPORTS "${${STATIC_ENTRY}_IMPORTS}\n${ENTRY_POINT_IMPORT}")
|
set(${STATIC_ENTRY}_IMPORTS "${${STATIC_ENTRY}_IMPORTS}\n${ENTRY_POINT_IMPORT}")
|
||||||
set(${STATIC_ENTRY}_TABLE "${${STATIC_ENTRY}_TABLE}\n\t{ \"${STATIC_MODULE_CHANNEL}\", ${ENTRY_POINT_NAME} },")
|
set(${STATIC_ENTRY}_TABLE "${${STATIC_ENTRY}_TABLE}\n\t{ \"${STATIC_MODULE_CHANNEL}\", (static_entry_fkt)${ENTRY_POINT_NAME} },")
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
endforeach()
|
endforeach()
|
||||||
@ -88,13 +91,13 @@ foreach(STATIC_MODULE ${CHANNEL_STATIC_CLIENT_MODULES})
|
|||||||
set(STATIC_SUBSYSTEM_ENTRY "${STATIC_SUBSYSTEM_NAME}_freerdp_${STATIC_MODULE_CHANNEL}_client_subsystem_entry")
|
set(STATIC_SUBSYSTEM_ENTRY "${STATIC_SUBSYSTEM_NAME}_freerdp_${STATIC_MODULE_CHANNEL}_client_subsystem_entry")
|
||||||
endif()
|
endif()
|
||||||
set(SUBSYSTEM_TABLE "${SUBSYSTEM_TABLE}\n\t{ \"${STATIC_SUBSYSTEM_NAME}\", \"${STATIC_SUBSYSTEM_TYPE}\", ${STATIC_SUBSYSTEM_ENTRY} },")
|
set(SUBSYSTEM_TABLE "${SUBSYSTEM_TABLE}\n\t{ \"${STATIC_SUBSYSTEM_NAME}\", \"${STATIC_SUBSYSTEM_TYPE}\", ${STATIC_SUBSYSTEM_ENTRY} },")
|
||||||
set(SUBSYSTEM_IMPORT "extern void ${STATIC_SUBSYSTEM_ENTRY}();")
|
set(SUBSYSTEM_IMPORT "extern void ${STATIC_SUBSYSTEM_ENTRY}(void);")
|
||||||
set(CLIENT_STATIC_SUBSYSTEM_IMPORTS "${CLIENT_STATIC_SUBSYSTEM_IMPORTS}\n${SUBSYSTEM_IMPORT}")
|
set(CLIENT_STATIC_SUBSYSTEM_IMPORTS "${CLIENT_STATIC_SUBSYSTEM_IMPORTS}\n${SUBSYSTEM_IMPORT}")
|
||||||
endforeach()
|
endforeach()
|
||||||
set(SUBSYSTEM_TABLE "${SUBSYSTEM_TABLE}\n\t{ NULL, NULL, NULL }\n};")
|
set(SUBSYSTEM_TABLE "${SUBSYSTEM_TABLE}\n\t{ NULL, NULL, NULL }\n};")
|
||||||
set(CLIENT_STATIC_SUBSYSTEM_TABLES "${CLIENT_STATIC_SUBSYSTEM_TABLES}\n${SUBSYSTEM_TABLE}")
|
set(CLIENT_STATIC_SUBSYSTEM_TABLES "${CLIENT_STATIC_SUBSYSTEM_TABLES}\n${SUBSYSTEM_TABLE}")
|
||||||
set(ENTRY_POINT_NAME "${STATIC_MODULE_CHANNEL}_${${STATIC_MODULE}_CLIENT_ENTRY}")
|
set(ENTRY_POINT_NAME "${STATIC_MODULE_CHANNEL}_${${STATIC_MODULE}_CLIENT_ENTRY}")
|
||||||
set(CLIENT_STATIC_ADDIN_TABLE "${CLIENT_STATIC_ADDIN_TABLE}\n\t{ \"${STATIC_MODULE_CHANNEL}\", ${ENTRY_POINT_NAME}, ${SUBSYSTEM_TABLE_NAME} },")
|
set(CLIENT_STATIC_ADDIN_TABLE "${CLIENT_STATIC_ADDIN_TABLE}\n\t{ \"${STATIC_MODULE_CHANNEL}\", (static_addin_fkt)${ENTRY_POINT_NAME}, ${SUBSYSTEM_TABLE_NAME} },")
|
||||||
endforeach()
|
endforeach()
|
||||||
set(CLIENT_STATIC_ADDIN_TABLE "${CLIENT_STATIC_ADDIN_TABLE}\n\t{ NULL, NULL, NULL }\n};")
|
set(CLIENT_STATIC_ADDIN_TABLE "${CLIENT_STATIC_ADDIN_TABLE}\n\t{ NULL, NULL, NULL }\n};")
|
||||||
|
|
||||||
|
@ -21,15 +21,11 @@
|
|||||||
|
|
||||||
#include "tables.h"
|
#include "tables.h"
|
||||||
|
|
||||||
|
${CLIENT_STATIC_TYPEDEFS}
|
||||||
${CLIENT_STATIC_ENTRY_IMPORTS}
|
${CLIENT_STATIC_ENTRY_IMPORTS}
|
||||||
|
|
||||||
${CLIENT_STATIC_ENTRY_TABLES}
|
${CLIENT_STATIC_ENTRY_TABLES}
|
||||||
|
|
||||||
${CLIENT_STATIC_ENTRY_TABLES_LIST}
|
${CLIENT_STATIC_ENTRY_TABLES_LIST}
|
||||||
|
|
||||||
${CLIENT_STATIC_SUBSYSTEM_IMPORTS}
|
${CLIENT_STATIC_SUBSYSTEM_IMPORTS}
|
||||||
|
|
||||||
${CLIENT_STATIC_SUBSYSTEM_TABLES}
|
${CLIENT_STATIC_SUBSYSTEM_TABLES}
|
||||||
|
|
||||||
${CLIENT_STATIC_ADDIN_TABLE}
|
${CLIENT_STATIC_ADDIN_TABLE}
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
struct _STATIC_ENTRY
|
struct _STATIC_ENTRY
|
||||||
{
|
{
|
||||||
const char* name;
|
const char* name;
|
||||||
const void* entry;
|
UINT(*entry)();
|
||||||
};
|
};
|
||||||
typedef struct _STATIC_ENTRY STATIC_ENTRY;
|
typedef struct _STATIC_ENTRY STATIC_ENTRY;
|
||||||
|
|
||||||
@ -37,14 +37,14 @@ struct _STATIC_SUBSYSTEM_ENTRY
|
|||||||
{
|
{
|
||||||
const char* name;
|
const char* name;
|
||||||
const char* type;
|
const char* type;
|
||||||
const void* entry;
|
void (*entry)(void);
|
||||||
};
|
};
|
||||||
typedef struct _STATIC_SUBSYSTEM_ENTRY STATIC_SUBSYSTEM_ENTRY;
|
typedef struct _STATIC_SUBSYSTEM_ENTRY STATIC_SUBSYSTEM_ENTRY;
|
||||||
|
|
||||||
struct _STATIC_ADDIN_TABLE
|
struct _STATIC_ADDIN_TABLE
|
||||||
{
|
{
|
||||||
const char* name;
|
const char* name;
|
||||||
const void* entry;
|
UINT(*entry)();
|
||||||
const STATIC_SUBSYSTEM_ENTRY* table;
|
const STATIC_SUBSYSTEM_ENTRY* table;
|
||||||
};
|
};
|
||||||
typedef struct _STATIC_ADDIN_TABLE STATIC_ADDIN_TABLE;
|
typedef struct _STATIC_ADDIN_TABLE STATIC_ADDIN_TABLE;
|
||||||
|
@ -39,8 +39,10 @@ static INLINE BOOL is_path_required(LPCSTR path, size_t len)
|
|||||||
{
|
{
|
||||||
if (!path || (len <= 1))
|
if (!path || (len <= 1))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (strcmp(path, ".") == 0)
|
if (strcmp(path, ".") == 0)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -56,7 +58,6 @@ LPSTR freerdp_get_library_install_path(void)
|
|||||||
cchLibraryPath = strlen(pszLibraryPath) + 1;
|
cchLibraryPath = strlen(pszLibraryPath) + 1;
|
||||||
cchInstallPrefix = strlen(pszInstallPrefix) + 1;
|
cchInstallPrefix = strlen(pszInstallPrefix) + 1;
|
||||||
cchPath = cchInstallPrefix + cchLibraryPath;
|
cchPath = cchInstallPrefix + cchLibraryPath;
|
||||||
|
|
||||||
needInstallPath = is_path_required(pszInstallPrefix, cchInstallPrefix);
|
needInstallPath = is_path_required(pszInstallPrefix, cchInstallPrefix);
|
||||||
needLibPath = is_path_required(pszLibraryPath, cchLibraryPath);
|
needLibPath = is_path_required(pszLibraryPath, cchLibraryPath);
|
||||||
|
|
||||||
@ -98,7 +99,6 @@ LPSTR freerdp_get_dynamic_addin_install_path(void)
|
|||||||
cchAddinPath = strlen(pszAddinPath) + 1;
|
cchAddinPath = strlen(pszAddinPath) + 1;
|
||||||
cchInstallPrefix = strlen(pszInstallPrefix) + 1;
|
cchInstallPrefix = strlen(pszInstallPrefix) + 1;
|
||||||
cchPath = cchInstallPrefix + cchAddinPath;
|
cchPath = cchInstallPrefix + cchAddinPath;
|
||||||
|
|
||||||
needInstallPath = is_path_required(pszInstallPrefix, cchInstallPrefix);
|
needInstallPath = is_path_required(pszInstallPrefix, cchInstallPrefix);
|
||||||
needLibPath = is_path_required(pszAddinPath, cchAddinPath);
|
needLibPath = is_path_required(pszAddinPath, cchAddinPath);
|
||||||
|
|
||||||
@ -176,6 +176,7 @@ PVIRTUALCHANNELENTRY freerdp_load_dynamic_addin(LPCSTR pszFileName,
|
|||||||
sprintf_s(pszAddinFile, cchAddinFile, FREERDP_SHARED_LIBRARY_PREFIX"%s%s",
|
sprintf_s(pszAddinFile, cchAddinFile, FREERDP_SHARED_LIBRARY_PREFIX"%s%s",
|
||||||
pszFileName, pszExt);
|
pszFileName, pszExt);
|
||||||
}
|
}
|
||||||
|
|
||||||
cchAddinFile = strlen(pszAddinFile);
|
cchAddinFile = strlen(pszAddinFile);
|
||||||
|
|
||||||
/* If a path is provided prefix the library name with it. */
|
/* If a path is provided prefix the library name with it. */
|
||||||
@ -183,8 +184,10 @@ PVIRTUALCHANNELENTRY freerdp_load_dynamic_addin(LPCSTR pszFileName,
|
|||||||
{
|
{
|
||||||
size_t relPathLen = strlen(pszPath) + cchAddinFile + 1;
|
size_t relPathLen = strlen(pszPath) + cchAddinFile + 1;
|
||||||
pszRelativeFilePath = calloc(relPathLen, sizeof(CHAR));
|
pszRelativeFilePath = calloc(relPathLen, sizeof(CHAR));
|
||||||
|
|
||||||
if (!pszRelativeFilePath)
|
if (!pszRelativeFilePath)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
sprintf_s(pszRelativeFilePath, relPathLen, "%s", pszRelativeFilePath);
|
sprintf_s(pszRelativeFilePath, relPathLen, "%s", pszRelativeFilePath);
|
||||||
NativePathCchAppendA(pszRelativeFilePath, relPathLen, pszAddinFile);
|
NativePathCchAppendA(pszRelativeFilePath, relPathLen, pszAddinFile);
|
||||||
}
|
}
|
||||||
@ -217,14 +220,15 @@ PVIRTUALCHANNELENTRY freerdp_load_dynamic_addin(LPCSTR pszFileName,
|
|||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
entry = (PVIRTUALCHANNELENTRY)GetProcAddress(library, pszEntryName);
|
entry = (PVIRTUALCHANNELENTRY)GetProcAddress(library, pszEntryName);
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
free(pszRelativeFilePath);
|
free(pszRelativeFilePath);
|
||||||
free(pszAddinFile);
|
free(pszAddinFile);
|
||||||
free(pszFilePath);
|
free(pszFilePath);
|
||||||
free(pszAddinInstallPath);
|
free(pszAddinInstallPath);
|
||||||
|
|
||||||
if (!entry && library)
|
if (!entry && library)
|
||||||
FreeLibrary(library);
|
FreeLibrary(library);
|
||||||
|
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user