libragephoto: impl. support for NULL/nullptr to clear data values

This commit is contained in:
Syping 2025-11-05 11:58:45 +01:00
parent 32b8258af1
commit 4518ae5aa3
2 changed files with 112 additions and 95 deletions

View file

@ -124,22 +124,21 @@ static inline size_t zeroBuffer(char *output, size_t *pos, size_t outputLen, siz
static inline bool writeDataChar(const char *input, char **output) static inline bool writeDataChar(const char *input, char **output)
{ {
if (input) {
const size_t src_s = strlen(input) + 1; const size_t src_s = strlen(input) + 1;
if (*output) { if (*output) {
const size_t dst_s = strlen(*output) + 1; const size_t dst_s = strlen(*output) + 1;
if (dst_s > src_s) { if (dst_s > src_s) {
char *t_output = (char*)realloc(*output, src_s); char *t_output = (char*)realloc(*output, src_s);
if (!t_output) { if (!t_output)
return false; return false;
}
*output = t_output; *output = t_output;
memcpy(*output, input, src_s); memcpy(*output, input, src_s);
} }
else if (dst_s < src_s) { else if (dst_s < src_s) {
char *t_output = (char*)malloc(src_s); char *t_output = (char*)malloc(src_s);
if (!t_output) { if (!t_output)
return false; return false;
}
free(*output); free(*output);
*output = t_output; *output = t_output;
memcpy(*output, input, src_s); memcpy(*output, input, src_s);
@ -150,12 +149,16 @@ static inline bool writeDataChar(const char *input, char **output)
} }
else { else {
char *t_output = (char*)malloc(src_s); char *t_output = (char*)malloc(src_s);
if (!t_output) { if (!t_output)
return false; return false;
}
*output = t_output; *output = t_output;
memcpy(*output, input, src_s); memcpy(*output, input, src_s);
} }
}
else if (*output) {
free(*output);
*output = NULL;
}
return true; return true;
} }
@ -1024,7 +1027,7 @@ bool ragephoto_savefilef(ragephoto_t instance, const char *filename, uint32_t ph
const size_t writeSize = fwrite(data, sizeof(char), fileSize, file); const size_t writeSize = fwrite(data, sizeof(char), fileSize, file);
fclose(file); fclose(file);
free(data); free(data);
return (fileSize == writeSize); return fileSize == writeSize;
} }
bool ragephoto_savefile(ragephoto_t instance, const char *filename) bool ragephoto_savefile(ragephoto_t instance, const char *filename)
@ -1192,6 +1195,7 @@ void ragephoto_setphotoformat(ragephoto_t instance, uint32_t photoFormat)
bool ragephoto_setphotojpeg(ragephoto_t instance, const char *data, uint32_t size, uint32_t bufferSize) bool ragephoto_setphotojpeg(ragephoto_t instance, const char *data, uint32_t size, uint32_t bufferSize)
{ {
if (data && size) {
if (instance->data->jpeg) { if (instance->data->jpeg) {
if (instance->data->jpegSize > size) { if (instance->data->jpegSize > size) {
char *t_photoData = (char*)realloc(instance->data->jpeg, size); char *t_photoData = (char*)realloc(instance->data->jpeg, size);
@ -1226,6 +1230,11 @@ bool ragephoto_setphotojpeg(ragephoto_t instance, const char *data, uint32_t siz
memcpy(instance->data->jpeg, data, size); memcpy(instance->data->jpeg, data, size);
instance->data->jpegSize = size; instance->data->jpegSize = size;
} }
}
else if (instance->data->jpeg) {
free(instance->data->jpeg);
instance->data->jpeg = NULL;
}
if (bufferSize != 0) { if (bufferSize != 0) {
instance->data->jpegBuffer = bufferSize; instance->data->jpegBuffer = bufferSize;

View file

@ -118,22 +118,21 @@ inline size_t zeroBuffer(char *output, size_t *pos, size_t outputLen, size_t inp
inline bool writeDataChar(const char *input, char **output) inline bool writeDataChar(const char *input, char **output)
{ {
if (input) {
const size_t src_s = strlen(input) + 1; const size_t src_s = strlen(input) + 1;
if (*output) { if (*output) {
const size_t dst_s = strlen(*output) + 1; const size_t dst_s = strlen(*output) + 1;
if (dst_s > src_s) { if (dst_s > src_s) {
char *t_output = static_cast<char*>(realloc(*output, src_s)); char *t_output = static_cast<char*>(realloc(*output, src_s));
if (!t_output) { if (!t_output)
return false; return false;
}
*output = t_output; *output = t_output;
memcpy(*output, input, src_s); memcpy(*output, input, src_s);
} }
else if (dst_s < src_s) { else if (dst_s < src_s) {
char *t_output = static_cast<char*>(malloc(src_s)); char *t_output = static_cast<char*>(malloc(src_s));
if (!t_output) { if (!t_output)
return false; return false;
}
free(*output); free(*output);
*output = t_output; *output = t_output;
memcpy(*output, input, src_s); memcpy(*output, input, src_s);
@ -144,12 +143,16 @@ inline bool writeDataChar(const char *input, char **output)
} }
else { else {
char *t_output = static_cast<char*>(malloc(src_s)); char *t_output = static_cast<char*>(malloc(src_s));
if (!t_output) { if (!t_output)
return false; return false;
}
*output = t_output; *output = t_output;
memcpy(*output, input, src_s); memcpy(*output, input, src_s);
} }
}
else if (*output) {
free(*output);
*output = nullptr;
}
return true; return true;
} }
@ -1018,7 +1021,6 @@ bool RagePhoto::saveFile(const char *filename, uint32_t photoFormat)
ofs.close(); ofs.close();
return ok; return ok;
} }
else
return false; return false;
} }
@ -1189,6 +1191,7 @@ void RagePhoto::setHeader(const char *header, uint32_t headerSum, uint32_t heade
bool RagePhoto::setJpeg(const char *data, uint32_t size, uint32_t bufferSize) bool RagePhoto::setJpeg(const char *data, uint32_t size, uint32_t bufferSize)
{ {
if (data && size) {
if (m_data->jpeg) { if (m_data->jpeg) {
if (m_data->jpegSize > size) { if (m_data->jpegSize > size) {
char *t_photoData = static_cast<char*>(realloc(m_data->jpeg, size)); char *t_photoData = static_cast<char*>(realloc(m_data->jpeg, size));
@ -1223,6 +1226,11 @@ bool RagePhoto::setJpeg(const char *data, uint32_t size, uint32_t bufferSize)
memcpy(m_data->jpeg, data, size); memcpy(m_data->jpeg, data, size);
m_data->jpegSize = size; m_data->jpegSize = size;
} }
}
else if (m_data->jpeg) {
free(m_data->jpeg);
m_data->jpeg = nullptr;
}
if (bufferSize != 0) { if (bufferSize != 0) {
m_data->jpegBuffer = bufferSize; m_data->jpegBuffer = bufferSize;