SDL_GetClipboardData() follows the SDL_GetStringRule

This commit is contained in:
Sam Lantinga
2024-07-19 11:08:03 -07:00
parent 61a7a0e579
commit c4eac60000
5 changed files with 22 additions and 31 deletions

View File

@@ -234,7 +234,7 @@ SDL_DYNAPI_PROC(SDL_CameraPosition,SDL_GetCameraPosition,(SDL_CameraID a),(a),re
SDL_DYNAPI_PROC(SDL_PropertiesID,SDL_GetCameraProperties,(SDL_Camera *a),(a),return)
SDL_DYNAPI_PROC(const SDL_CameraSpec* const*,SDL_GetCameraSupportedFormats,(SDL_CameraID a, int *b),(a,b),return)
SDL_DYNAPI_PROC(const SDL_CameraID*,SDL_GetCameras,(int *a),(a),return)
SDL_DYNAPI_PROC(void*,SDL_GetClipboardData,(const char *a, size_t *b),(a,b),return)
SDL_DYNAPI_PROC(const void*,SDL_GetClipboardData,(const char *a, size_t *b),(a,b),return)
SDL_DYNAPI_PROC(const char*,SDL_GetClipboardText,(void),(),return)
SDL_DYNAPI_PROC(const SDL_DisplayMode*,SDL_GetClosestFullscreenDisplayMode,(SDL_DisplayID a, int b, int c, float d, SDL_bool e),(a,b,c,d,e),return)
SDL_DYNAPI_PROC(const char*,SDL_GetCurrentAudioDriver,(void),(),return)

View File

@@ -1996,7 +1996,7 @@ static void SDLTest_PasteScreenShot(void)
for (i = 0; i < SDL_arraysize(image_formats); ++i) {
size_t size;
void *data = SDL_GetClipboardData(image_formats[i], &size);
const void *data = SDL_GetClipboardData(image_formats[i], &size);
if (data) {
char filename[16];
SDL_IOStream *file;
@@ -2008,7 +2008,6 @@ static void SDLTest_PasteScreenShot(void)
SDL_WriteIO(file, data, size);
SDL_CloseIO(file);
}
SDL_free(data);
return;
}
}

View File

@@ -162,7 +162,7 @@ void *SDL_GetInternalClipboardData(SDL_VideoDevice *_this, const char *mime_type
return data;
}
void *SDL_GetClipboardData(const char *mime_type, size_t *size)
const void *SDL_GetClipboardData(const char *mime_type, size_t *size)
{
SDL_VideoDevice *_this = SDL_GetVideoDevice();
@@ -184,16 +184,16 @@ void *SDL_GetClipboardData(const char *mime_type, size_t *size)
*size = 0;
if (_this->GetClipboardData) {
return _this->GetClipboardData(_this, mime_type, size);
return SDL_FreeLater(_this->GetClipboardData(_this, mime_type, size));
} else if (_this->GetClipboardText && SDL_IsTextMimeType(mime_type)) {
void *data = _this->GetClipboardText(_this);
if (data && *(char *)data == '\0') {
SDL_free(data);
data = NULL;
char *text = _this->GetClipboardText(_this);
if (text && *text == '\0') {
SDL_free(text);
text = NULL;
}
return data;
return SDL_FreeLater(text);
} else {
return SDL_GetInternalClipboardData(_this, mime_type, size);
return SDL_FreeLater(SDL_GetInternalClipboardData(_this, mime_type, size));
}
}
@@ -297,16 +297,15 @@ const char *SDL_GetClipboardText(void)
text_mime_types = SDL_GetTextMimeTypes(_this, &num_mime_types);
for (i = 0; i < num_mime_types; ++i) {
void *clipdata = SDL_GetClipboardData(text_mime_types[i], &length);
const void *clipdata = SDL_GetClipboardData(text_mime_types[i], &length);
if (clipdata) {
text = (const char *) clipdata;
SDL_FreeLater(clipdata); // returned string follows the SDL_GetStringRule.
text = (const char *)clipdata;
break;
}
}
if (!text) {
text = "";
text = SDL_CreateTemporaryString("");
}
return text;
}
@@ -349,7 +348,7 @@ int SDL_SetPrimarySelectionText(const char *text)
return -1;
}
} else {
SDL_FreeLater(_this->primary_selection_text); // SDL_GetPrimarySelectionText() returns this pointer.
SDL_free(_this->primary_selection_text);
_this->primary_selection_text = SDL_strdup(text);
}
@@ -367,13 +366,13 @@ const char *SDL_GetPrimarySelectionText(void)
}
if (_this->GetPrimarySelectionText) {
return SDL_FreeLater(_this->GetPrimarySelectionText(_this)); // returned pointer follows the SDL_GetStringRule
return SDL_FreeLater(_this->GetPrimarySelectionText(_this));
} else {
const char *text = _this->primary_selection_text;
if (!text) {
text = "";
}
return text;
return SDL_CreateTemporaryString(text);
}
}