dlsym(m_libXBMC_addon, "XBMC_get_localized_string");
if (XBMC_get_localized_string == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
+ XBMC_free_string = (void (*)(void* HANDLE, void* CB, char* str))
+ dlsym(m_libXBMC_addon, "XBMC_free_string");
+ if (XBMC_free_string == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
+
XBMC_get_dvd_menu_language = (char* (*)(void* HANDLE, void* CB))
dlsym(m_libXBMC_addon, "XBMC_get_dvd_menu_language");
if (XBMC_get_dvd_menu_language == NULL) { fprintf(stderr, "Unable to assign function %s\n", dlerror()); return false; }
/*!
* @brief Translate a string with an unknown encoding to UTF8.
* @param str The string to translate.
- * @return The string translated to UTF8. Must be freed when done.
+ * @return The string translated to UTF8. Must be freed by calling FreeString() when done.
*/
char* UnknownToUTF8(const char* str)
{
/*!
* @brief Get a localised message.
* @param dwCode The code of the message to get.
- * @return The message. Needs to be freed when done.
+ * @return The message. Must be freed by calling FreeString() when done.
*/
char* GetLocalizedString(int dwCode)
{
/*!
* @brief Get the DVD menu language.
- * @return The language. Needs to be freed when done.
+ * @return The language. Must be freed by calling FreeString() when done.
*/
char* GetDVDMenuLanguage()
{
}
/*!
+ * @brief Free the memory used by str
+ * @param str The string to free
+ */
+ void FreeString(char* str)
+ {
+ return XBMC_free_string(m_Handle, m_Callbacks, str);
+ }
+
+ /*!
* @brief Open the file with filename via XBMC's CFile. Needs to be closed by calling CloseFile() when done.
* @param strFileName The filename to open.
* @param flags The flags to pass. Documented in XBMC's File.h
char* (*XBMC_unknown_to_utf8)(void *HANDLE, void* CB, const char* str);
char* (*XBMC_get_localized_string)(void *HANDLE, void* CB, int dwCode);
char* (*XBMC_get_dvd_menu_language)(void *HANDLE, void* CB);
+ void (*XBMC_free_string)(void *HANDLE, void* CB, char* str);
void* (*XBMC_open_file)(void *HANDLE, void* CB, const char* strFileName, unsigned int flags);
void* (*XBMC_open_file_for_write)(void *HANDLE, void* CB, const char* strFileName, bool bOverWrite);
unsigned int (*XBMC_read_file)(void *HANDLE, void* CB, void* file, void* lpBuf, int64_t uiBufSize);
typedef char* (*AddOnUnknownToUTF8)(const char *sourceDest);
typedef char* (*AddOnGetLocalizedString)(const void* addonData, long dwCode);
typedef char* (*AddOnGetDVDMenuLanguage)(const void* addonData);
+typedef void (*AddOnFreeString)(const void* addonData, char* str);
typedef void* (*AddOnOpenFile)(const void* addonData, const char* strFileName, unsigned int flags);
typedef void* (*AddOnOpenFileForWrite)(const void* addonData, const char* strFileName, bool bOverWrite);
AddOnUnknownToUTF8 UnknownToUTF8;
AddOnGetLocalizedString GetLocalizedString;
AddOnGetDVDMenuLanguage GetDVDMenuLanguage;
+ AddOnFreeString FreeString;
AddOnOpenFile OpenFile;
AddOnOpenFileForWrite OpenFileForWrite;
m_callbacks->UnknownToUTF8 = UnknownToUTF8;
m_callbacks->GetLocalizedString = GetLocalizedString;
m_callbacks->GetDVDMenuLanguage = GetDVDMenuLanguage;
+ m_callbacks->FreeString = FreeString;
m_callbacks->OpenFile = OpenFile;
m_callbacks->OpenFileForWrite = OpenFileForWrite;
return buffer;
}
+void CAddonCallbacksAddon::FreeString(const void* addonData, char* str)
+{
+ delete[] str;
+}
+
void* CAddonCallbacksAddon::OpenFile(const void* addonData, const char* strFileName, unsigned int flags)
{
CAddonCallbacks* helper = (CAddonCallbacks*) addonData;