diff --git a/src/core/RagePhoto.c b/src/core/RagePhoto.c index 13906f4..0bab048 100644 --- a/src/core/RagePhoto.c +++ b/src/core/RagePhoto.c @@ -38,6 +38,10 @@ #include #endif +/* RAGEPHOTO LIBRARY GLOBALS */ +int libraryflags = 0; +const char* nullchar = ""; + /* BEGIN OF STATIC LIBRARY FUNCTIONS */ inline size_t readBuffer(const char *input, void *output, size_t *pos, size_t outputLen, size_t inputLen) { @@ -677,7 +681,9 @@ const char* ragephoto_getphotojpeg(ragephoto_t instance_t) RagePhotoInstance *instance = (RagePhotoInstance*)instance_t; if (instance->data->jpeg) return instance->data->jpeg; - return ""; + if (libraryflags & RAGEPHOTO_FLAG_LEGACY_NULL_RETURN) + return NULL; + return nullchar; } uint64_t ragephotodata_getphotosignf(RagePhotoData *rp_data, uint32_t photoFormat) @@ -731,7 +737,9 @@ const char* ragephoto_getphotodesc(ragephoto_t instance_t) RagePhotoInstance *instance = (RagePhotoInstance*)instance_t; if (instance->data->description) return instance->data->description; - return ""; + if (libraryflags & RAGEPHOTO_FLAG_LEGACY_NULL_RETURN) + return NULL; + return nullchar; } const char* ragephoto_getphotojson(ragephoto_t instance_t) @@ -739,7 +747,9 @@ const char* ragephoto_getphotojson(ragephoto_t instance_t) RagePhotoInstance *instance = (RagePhotoInstance*)instance_t; if (instance->data->json) return instance->data->json; - return ""; + if (libraryflags & RAGEPHOTO_FLAG_LEGACY_NULL_RETURN) + return NULL; + return nullchar; } const char* ragephoto_getphotoheader(ragephoto_t instance_t) @@ -747,7 +757,9 @@ const char* ragephoto_getphotoheader(ragephoto_t instance_t) RagePhotoInstance *instance = (RagePhotoInstance*)instance_t; if (instance->data->header) return instance->data->header; - return ""; + if (libraryflags & RAGEPHOTO_FLAG_LEGACY_NULL_RETURN) + return NULL; + return nullchar; } const char* ragephoto_getphototitle(ragephoto_t instance_t) @@ -755,7 +767,9 @@ const char* ragephoto_getphototitle(ragephoto_t instance_t) RagePhotoInstance *instance = (RagePhotoInstance*)instance_t; if (instance->data->title) return instance->data->title; - return ""; + if (libraryflags & RAGEPHOTO_FLAG_LEGACY_NULL_RETURN) + return NULL; + return nullchar; } const char* ragephoto_version() @@ -1097,6 +1111,14 @@ void ragephoto_setbufferoffsets(ragephoto_t instance_t) ragephotodata_setbufferoffsets(instance->data); } +void ragephoto_setlibraryflag(RagePhotoLibraryFlag flag, bool state) +{ + if (state) + libraryflags |= flag; + else + libraryflags &= ~flag; +} + bool ragephoto_setphotodata(ragephoto_t instance_t, RagePhotoData *rp_data) { RagePhotoInstance *instance = (RagePhotoInstance*)instance_t; diff --git a/src/core/RagePhoto.cpp b/src/core/RagePhoto.cpp index be8731d..bc94be2 100644 --- a/src/core/RagePhoto.cpp +++ b/src/core/RagePhoto.cpp @@ -45,6 +45,10 @@ /* CLASSIC RAGEPHOTO TYPEDEF */ typedef ragephoto::photo RagePhoto; +/* RAGEPHOTO LIBRARY GLOBALS */ +int libraryflags = 0; +const char* nullchar = ""; + /* BEGIN OF STATIC LIBRARY FUNCTIONS */ inline size_t readBuffer(const char *input, void *output, size_t *pos, size_t outputLen, size_t inputLen) { @@ -639,7 +643,9 @@ const char* RagePhoto::jpegData() const { if (m_data->jpeg) return m_data->jpeg; - return ""; + if (libraryflags & RAGEPHOTO_FLAG_LEGACY_NULL_RETURN) + return nullptr; + return nullchar; } uint64_t RagePhoto::jpegSign(uint32_t photoFormat, RagePhotoData *rp_data) @@ -679,28 +685,36 @@ const char* RagePhoto::description() const { if (m_data->description) return m_data->description; - return ""; -} - -const char* RagePhoto::json() const -{ - if (m_data->json) - return m_data->json; - return ""; + if (libraryflags & RAGEPHOTO_FLAG_LEGACY_NULL_RETURN) + return nullptr; + return nullchar; } const char* RagePhoto::header() const { if (m_data->header) return m_data->header; - return ""; + if (libraryflags & RAGEPHOTO_FLAG_LEGACY_NULL_RETURN) + return nullptr; + return nullchar; +} + +const char* RagePhoto::json() const +{ + if (m_data->json) + return m_data->json; + if (libraryflags & RAGEPHOTO_FLAG_LEGACY_NULL_RETURN) + return nullptr; + return nullchar; } const char* RagePhoto::title() const { if (m_data->title) return m_data->title; - return ""; + if (libraryflags & RAGEPHOTO_FLAG_LEGACY_NULL_RETURN) + return nullptr; + return nullchar; } const char* RagePhoto::version() @@ -1151,6 +1165,17 @@ void RagePhoto::setFormat(uint32_t photoFormat) m_data->photoFormat = photoFormat; } +void RagePhoto::setHeader(const char *header, uint32_t headerSum, uint32_t headerSum2) +{ + if (!writeDataChar(header, &m_data->header)) { + m_data->error = Error::HeaderMallocError; // 4 + return; + } + m_data->headerSum = headerSum; + m_data->headerSum2 = headerSum2; + m_data->error = Error::NoError; // 255 +} + bool RagePhoto::setJpeg(const char *data, uint32_t size, uint32_t bufferSize) { if (m_data->jpeg) { @@ -1215,15 +1240,12 @@ void RagePhoto::setJson(const char *json, uint32_t bufferSize) m_data->error = Error::NoError; // 255 } -void RagePhoto::setHeader(const char *header, uint32_t headerSum, uint32_t headerSum2) +void RagePhoto::setLibraryFlag(RagePhotoLibraryFlag flag, bool state) { - if (!writeDataChar(header, &m_data->header)) { - m_data->error = Error::HeaderMallocError; // 4 - return; - } - m_data->headerSum = headerSum; - m_data->headerSum2 = headerSum2; - m_data->error = Error::NoError; // 255 + if (state) + libraryflags |= flag; + else + libraryflags &= ~flag; } void RagePhoto::setTitle(const char *title, uint32_t bufferSize) @@ -1476,6 +1498,11 @@ void ragephotodata_setbufferoffsets(RagePhotoData *rp_data) RagePhoto::setBufferOffsets(rp_data); } +void ragephoto_setlibraryflag(RagePhotoLibraryFlag flag, bool state) +{ + RagePhoto::setLibraryFlag(flag, state); +} + bool ragephoto_setphotodata(ragephoto_t instance, RagePhotoData *rp_data) { RagePhoto *ragePhoto = static_cast(instance); diff --git a/src/core/RagePhoto.h b/src/core/RagePhoto.h index 7f67297..03025b6 100644 --- a/src/core/RagePhoto.h +++ b/src/core/RagePhoto.h @@ -301,6 +301,13 @@ LIBRAGEPHOTO_C_PUBLIC void ragephoto_setbufferoffsets(ragephoto_t instance); */ LIBRAGEPHOTO_C_PUBLIC void ragephotodata_setbufferoffsets(RagePhotoData *rp_data); +/** Sets a library flag. +* \relates RagePhotoInstance +* \param flag Library flag +* \param state Flag state +*/ +LIBRAGEPHOTO_C_PUBLIC void ragephoto_setlibraryflag(RagePhotoLibraryFlag flag, bool state); + /** Sets the internal RagePhotoData object. * \memberof RagePhotoInstance * \param instance \p ragephoto_t instance diff --git a/src/core/RagePhotoTypedefs.h b/src/core/RagePhotoTypedefs.h index 23172ad..5a3cabb 100644 --- a/src/core/RagePhotoTypedefs.h +++ b/src/core/RagePhotoTypedefs.h @@ -78,6 +78,11 @@ typedef struct RagePhotoInstance { RagePhotoFormatParser *parser; /**< Pointer for internal format parser */ } RagePhotoInstance; +/** RagePhoto library flags. */ +typedef enum RagePhotoLibraryFlag { + RAGEPHOTO_FLAG_LEGACY_NULL_RETURN = 1 << 0 /**< Flag to enable legacy NULL return */ +} RagePhotoLibraryFlag; + /* RagePhoto default sizes */ #define RAGEPHOTO_DEFAULT_GTA5_PHOTOBUFFER UINT32_C(524288) /**< GTA V default Photo Buffer Size */ #define RAGEPHOTO_DEFAULT_RDR2_PHOTOBUFFER UINT32_C(1048576) /**< RDR 2 default Photo Buffer Size */ diff --git a/src/core/ragephoto_c.hpp b/src/core/ragephoto_c.hpp index 82b8be2..b836cb8 100644 --- a/src/core/ragephoto_c.hpp +++ b/src/core/ragephoto_c.hpp @@ -198,14 +198,14 @@ public: const char* description() const { return ragephoto_getphotodesc(instance); } - /** Returns the Photo JSON data. */ - const char* json() const { - return ragephoto_getphotojson(instance); - } /** Returns the Photo header. */ const char* header() const { return ragephoto_getphotoheader(instance); } + /** Returns the Photo JSON data. */ + const char* json() const { + return ragephoto_getphotojson(instance); + } /** Returns the Photo title. */ const char* title() const { return ragephoto_getphototitle(instance); @@ -314,6 +314,10 @@ public: void setFormat(uint32_t photoFormat) { ragephoto_setphotoformat(instance, photoFormat); } + /** Sets the Photo header. */ + void setHeader(const char *header, uint32_t headerSum, uint32_t headerSum2 = 0) { + ragephoto_setphotoheader2(instance, header, headerSum, headerSum2); + } /** Sets the Photo JPEG data. * \param data JPEG data * \param size JPEG data size @@ -333,9 +337,9 @@ public: void setJson(const char *json, uint32_t bufferSize = 0) { ragephoto_setphotojson(instance, json, bufferSize); } - /** Sets the Photo header. */ - void setHeader(const char *header, uint32_t headerSum, uint32_t headerSum2 = 0) { - ragephoto_setphotoheader2(instance, header, headerSum, headerSum2); + /** Sets a library flag. */ + static void setLibraryFlag(RagePhotoLibraryFlag flag, bool state = true) { + ragephoto_setlibraryflag(flag, state); } /** Sets the Photo title. */ void setTitle(const char *title, uint32_t bufferSize = 0) { diff --git a/src/core/ragephoto_cxx.hpp b/src/core/ragephoto_cxx.hpp index 9cb7176..d5f05d4 100644 --- a/src/core/ragephoto_cxx.hpp +++ b/src/core/ragephoto_cxx.hpp @@ -133,8 +133,8 @@ public: uint64_t jpegSign() const; /**< Returns the Photo JPEG sign. */ uint32_t jpegSize() const; /**< Returns the Photo JPEG data size. */ const char* description() const; /**< Returns the Photo description. */ - const char* json() const; /**< Returns the Photo JSON data. */ const char* header() const; /**< Returns the Photo header. */ + const char* json() const; /**< Returns the Photo JSON data. */ const char* title() const; /**< Returns the Photo title. */ static const char* version(); /**< Returns the library version. */ static bool save(char *data, uint32_t photoFormat, RagePhotoData *rp_data, RagePhotoFormatParser *rp_parser); /**< Saves a Photo to a char*. */ @@ -170,6 +170,7 @@ public: bool setData(RagePhotoData *rp_data, bool takeCopy = true); /**< Sets the internal RagePhotoData object. */ void setDescription(const char *description, uint32_t bufferSize = 0); /**< Sets the Photo description. */ void setFormat(uint32_t photoFormat); /**< Sets the Photo Format (GTA V or RDR 2). */ + void setHeader(const char *header, uint32_t headerSum, uint32_t headerSum2 = 0); /**< Sets the Photo header. */ /** Sets the Photo JPEG data. * \param data JPEG data * \param size JPEG data size @@ -182,7 +183,7 @@ public: */ bool setJpeg(const std::string &data, uint32_t bufferSize = 0); void setJson(const char *json, uint32_t bufferSize = 0); /**< Sets the Photo JSON data. */ - void setHeader(const char *header, uint32_t headerSum, uint32_t headerSum2 = 0); /**< Sets the Photo header. */ + static void setLibraryFlag(RagePhotoLibraryFlag flag, bool state = true); /**< Sets a library flag. */ void setTitle(const char *title, uint32_t bufferSize = 0); /**< Sets the Photo title. */ private: