Fix memory leaks in parser
- Add defer and errdefer to free comment allocations in parseStructField - Add defer to free comment allocation in parseMultiFieldLine - Add manual free calls on all early return paths - Ensure all allocated comments are properly freed even on error or null returns
This commit is contained in:
parent
4440566657
commit
818375b78e
|
|
@ -666,6 +666,8 @@ pub const Scanner = struct {
|
|||
|
||||
// Extract inline comment
|
||||
var comment: ?[]const u8 = null;
|
||||
errdefer if (comment) |c| self.allocator.free(c);
|
||||
|
||||
var field_part = no_semi;
|
||||
if (std.mem.indexOf(u8, no_semi, "/**<")) |comment_start| {
|
||||
field_part = std.mem.trimRight(u8, no_semi[0..comment_start], "; \t");
|
||||
|
|
@ -688,6 +690,7 @@ pub const Scanner = struct {
|
|||
// This is a multi-field declaration like "int x, y"
|
||||
// We'll return just the first field and rely on a helper to get the rest
|
||||
// For now, return null and let the caller handle it with parseMultiFieldLine
|
||||
if (comment) |c| self.allocator.free(c);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -710,13 +713,19 @@ pub const Scanner = struct {
|
|||
var parts_count: usize = 0;
|
||||
while (tokens.next()) |token| {
|
||||
if (token.len > 0 and !std.mem.eql(u8, token, "const")) {
|
||||
if (parts_count >= 8) return null;
|
||||
if (parts_count >= 8) {
|
||||
if (comment) |c| self.allocator.free(c);
|
||||
return null;
|
||||
}
|
||||
parts_list[parts_count] = token;
|
||||
parts_count += 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (parts_count < 2) return null; // Need at least type and name
|
||||
if (parts_count < 2) {
|
||||
if (comment) |c| self.allocator.free(c);
|
||||
return null; // Need at least type and name
|
||||
}
|
||||
|
||||
const name = parts_list[parts_count - 1];
|
||||
const type_parts = parts_list[0..parts_count - 1];
|
||||
|
|
@ -726,10 +735,19 @@ pub const Scanner = struct {
|
|||
var fbs = std.io.fixedBufferStream(&type_buf);
|
||||
const writer = fbs.writer();
|
||||
for (type_parts, 0..) |part, i| {
|
||||
if (i > 0) writer.writeByte(' ') catch return null;
|
||||
writer.writeAll(part) catch return null;
|
||||
if (i > 0) writer.writeByte(' ') catch {
|
||||
if (comment) |c| self.allocator.free(c);
|
||||
return null;
|
||||
};
|
||||
writer.writeAll(part) catch {
|
||||
if (comment) |c| self.allocator.free(c);
|
||||
return null;
|
||||
};
|
||||
}
|
||||
writer.writeAll(bracket_part) catch return null;
|
||||
writer.writeAll(bracket_part) catch {
|
||||
if (comment) |c| self.allocator.free(c);
|
||||
return null;
|
||||
};
|
||||
|
||||
const type_str = fbs.getWritten();
|
||||
|
||||
|
|
@ -784,6 +802,7 @@ pub const Scanner = struct {
|
|||
}
|
||||
}
|
||||
|
||||
if (comment) |c| self.allocator.free(c);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -809,6 +828,7 @@ pub const Scanner = struct {
|
|||
comment = try self.allocator.dupe(u8, std.mem.trim(u8, comment_text, " \t"));
|
||||
}
|
||||
}
|
||||
defer if (comment) |c| self.allocator.free(c);
|
||||
|
||||
const field_trimmed = std.mem.trim(u8, field_part, " \t");
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,81 @@
|
|||
{
|
||||
"header": "SDL_audio.h",
|
||||
"opaque_types": [
|
||||
{"name": "SDL_AudioStream"}
|
||||
],
|
||||
"typedefs": [
|
||||
{"name": "SDL_AudioDeviceID", "underlying_type": "Uint32"}
|
||||
],
|
||||
"function_pointers": [
|
||||
{"name": "SDL_AudioStreamCallback", "return_type": "void", "parameters": [{"name": "userdata", "type": "void *"}, {"name": "stream", "type": "SDL_AudioStream *"}, {"name": "additional_amount", "type": "int"}, {"name": "total_amount", "type": "int"}]},
|
||||
{"name": "SDL_AudioPostmixCallback", "return_type": "void", "parameters": [{"name": "userdata", "type": "void *"}, {"name": "spec", "type": "const SDL_AudioSpec *"}, {"name": "buffer", "type": "float *"}, {"name": "buflen", "type": "int"}]}
|
||||
],
|
||||
"enums": [
|
||||
{"name": "SDL_AudioFormat", "values": [{"name": "SDL_AUDIO_S16", "value": "SDL_AUDIO_S16LE"}, {"name": "SDL_AUDIO_S32", "value": "SDL_AUDIO_S32LE"}, {"name": "SDL_AUDIO_F32", "value": "SDL_AUDIO_F32LE"}]}
|
||||
],
|
||||
"structs": [
|
||||
{"name": "SDL_AudioSpec", "fields": [{"name": "format", "type": "SDL_AudioFormat", "comment": "Audio data format"}, {"name": "channels", "type": "int", "comment": "Number of channels: 1 mono, 2 stereo, etc"}, {"name": "freq", "type": "int", "comment": "sample rate: sample frames per second"}]}
|
||||
],
|
||||
"unions": [
|
||||
],
|
||||
"flags": [
|
||||
],
|
||||
"functions": [
|
||||
{"name": "SDL_GetNumAudioDrivers", "return_type": "int", "parameters": []},
|
||||
{"name": "SDL_GetAudioDriver", "return_type": "const char *", "parameters": [{"name": "index", "type": "int"}]},
|
||||
{"name": "SDL_GetCurrentAudioDriver", "return_type": "const char *", "parameters": []},
|
||||
{"name": "SDL_GetAudioPlaybackDevices", "return_type": "SDL_AudioDeviceID *", "parameters": [{"name": "count", "type": "int *"}]},
|
||||
{"name": "SDL_GetAudioRecordingDevices", "return_type": "SDL_AudioDeviceID *", "parameters": [{"name": "count", "type": "int *"}]},
|
||||
{"name": "SDL_GetAudioDeviceName", "return_type": "const char *", "parameters": [{"name": "devid", "type": "SDL_AudioDeviceID"}]},
|
||||
{"name": "SDL_GetAudioDeviceFormat", "return_type": "bool", "parameters": [{"name": "devid", "type": "SDL_AudioDeviceID"}, {"name": "spec", "type": "SDL_AudioSpec *"}, {"name": "sample_frames", "type": "int *"}]},
|
||||
{"name": "SDL_GetAudioDeviceChannelMap", "return_type": "int *", "parameters": [{"name": "devid", "type": "SDL_AudioDeviceID"}, {"name": "count", "type": "int *"}]},
|
||||
{"name": "SDL_OpenAudioDevice", "return_type": "SDL_AudioDeviceID", "parameters": [{"name": "devid", "type": "SDL_AudioDeviceID"}, {"name": "spec", "type": "const SDL_AudioSpec *"}]},
|
||||
{"name": "SDL_IsAudioDevicePhysical", "return_type": "bool", "parameters": [{"name": "devid", "type": "SDL_AudioDeviceID"}]},
|
||||
{"name": "SDL_IsAudioDevicePlayback", "return_type": "bool", "parameters": [{"name": "devid", "type": "SDL_AudioDeviceID"}]},
|
||||
{"name": "SDL_PauseAudioDevice", "return_type": "bool", "parameters": [{"name": "devid", "type": "SDL_AudioDeviceID"}]},
|
||||
{"name": "SDL_ResumeAudioDevice", "return_type": "bool", "parameters": [{"name": "devid", "type": "SDL_AudioDeviceID"}]},
|
||||
{"name": "SDL_AudioDevicePaused", "return_type": "bool", "parameters": [{"name": "devid", "type": "SDL_AudioDeviceID"}]},
|
||||
{"name": "SDL_GetAudioDeviceGain", "return_type": "float", "parameters": [{"name": "devid", "type": "SDL_AudioDeviceID"}]},
|
||||
{"name": "SDL_SetAudioDeviceGain", "return_type": "bool", "parameters": [{"name": "devid", "type": "SDL_AudioDeviceID"}, {"name": "gain", "type": "float"}]},
|
||||
{"name": "SDL_CloseAudioDevice", "return_type": "void", "parameters": [{"name": "devid", "type": "SDL_AudioDeviceID"}]},
|
||||
{"name": "SDL_BindAudioStreams", "return_type": "bool", "parameters": [{"name": "devid", "type": "SDL_AudioDeviceID"}, {"name": "streams", "type": "SDL_AudioStream * const *"}, {"name": "num_streams", "type": "int"}]},
|
||||
{"name": "SDL_BindAudioStream", "return_type": "bool", "parameters": [{"name": "devid", "type": "SDL_AudioDeviceID"}, {"name": "stream", "type": "SDL_AudioStream *"}]},
|
||||
{"name": "SDL_UnbindAudioStreams", "return_type": "void", "parameters": [{"name": "streams", "type": "SDL_AudioStream * const *"}, {"name": "num_streams", "type": "int"}]},
|
||||
{"name": "SDL_UnbindAudioStream", "return_type": "void", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}]},
|
||||
{"name": "SDL_GetAudioStreamDevice", "return_type": "SDL_AudioDeviceID", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}]},
|
||||
{"name": "SDL_CreateAudioStream", "return_type": "SDL_AudioStream *", "parameters": [{"name": "src_spec", "type": "const SDL_AudioSpec *"}, {"name": "dst_spec", "type": "const SDL_AudioSpec *"}]},
|
||||
{"name": "SDL_GetAudioStreamProperties", "return_type": "SDL_PropertiesID", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}]},
|
||||
{"name": "SDL_GetAudioStreamFormat", "return_type": "bool", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}, {"name": "src_spec", "type": "SDL_AudioSpec *"}, {"name": "dst_spec", "type": "SDL_AudioSpec *"}]},
|
||||
{"name": "SDL_SetAudioStreamFormat", "return_type": "bool", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}, {"name": "src_spec", "type": "const SDL_AudioSpec *"}, {"name": "dst_spec", "type": "const SDL_AudioSpec *"}]},
|
||||
{"name": "SDL_GetAudioStreamFrequencyRatio", "return_type": "float", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}]},
|
||||
{"name": "SDL_SetAudioStreamFrequencyRatio", "return_type": "bool", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}, {"name": "ratio", "type": "float"}]},
|
||||
{"name": "SDL_GetAudioStreamGain", "return_type": "float", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}]},
|
||||
{"name": "SDL_SetAudioStreamGain", "return_type": "bool", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}, {"name": "gain", "type": "float"}]},
|
||||
{"name": "SDL_GetAudioStreamInputChannelMap", "return_type": "int *", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}, {"name": "count", "type": "int *"}]},
|
||||
{"name": "SDL_GetAudioStreamOutputChannelMap", "return_type": "int *", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}, {"name": "count", "type": "int *"}]},
|
||||
{"name": "SDL_SetAudioStreamInputChannelMap", "return_type": "bool", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}, {"name": "chmap", "type": "const int *"}, {"name": "count", "type": "int"}]},
|
||||
{"name": "SDL_SetAudioStreamOutputChannelMap", "return_type": "bool", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}, {"name": "chmap", "type": "const int *"}, {"name": "count", "type": "int"}]},
|
||||
{"name": "SDL_PutAudioStreamData", "return_type": "bool", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}, {"name": "buf", "type": "const void *"}, {"name": "len", "type": "int"}]},
|
||||
{"name": "SDL_GetAudioStreamData", "return_type": "int", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}, {"name": "buf", "type": "void *"}, {"name": "len", "type": "int"}]},
|
||||
{"name": "SDL_GetAudioStreamAvailable", "return_type": "int", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}]},
|
||||
{"name": "SDL_GetAudioStreamQueued", "return_type": "int", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}]},
|
||||
{"name": "SDL_FlushAudioStream", "return_type": "bool", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}]},
|
||||
{"name": "SDL_ClearAudioStream", "return_type": "bool", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}]},
|
||||
{"name": "SDL_PauseAudioStreamDevice", "return_type": "bool", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}]},
|
||||
{"name": "SDL_ResumeAudioStreamDevice", "return_type": "bool", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}]},
|
||||
{"name": "SDL_AudioStreamDevicePaused", "return_type": "bool", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}]},
|
||||
{"name": "SDL_LockAudioStream", "return_type": "bool", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}]},
|
||||
{"name": "SDL_UnlockAudioStream", "return_type": "bool", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}]},
|
||||
{"name": "SDL_SetAudioStreamGetCallback", "return_type": "bool", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}, {"name": "callback", "type": "SDL_AudioStreamCallback"}, {"name": "userdata", "type": "void *"}]},
|
||||
{"name": "SDL_SetAudioStreamPutCallback", "return_type": "bool", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}, {"name": "callback", "type": "SDL_AudioStreamCallback"}, {"name": "userdata", "type": "void *"}]},
|
||||
{"name": "SDL_DestroyAudioStream", "return_type": "void", "parameters": [{"name": "stream", "type": "SDL_AudioStream *"}]},
|
||||
{"name": "SDL_OpenAudioDeviceStream", "return_type": "SDL_AudioStream *", "parameters": [{"name": "devid", "type": "SDL_AudioDeviceID"}, {"name": "spec", "type": "const SDL_AudioSpec *"}, {"name": "callback", "type": "SDL_AudioStreamCallback"}, {"name": "userdata", "type": "void *"}]},
|
||||
{"name": "SDL_SetAudioPostmixCallback", "return_type": "bool", "parameters": [{"name": "devid", "type": "SDL_AudioDeviceID"}, {"name": "callback", "type": "SDL_AudioPostmixCallback"}, {"name": "userdata", "type": "void *"}]},
|
||||
{"name": "SDL_LoadWAV_IO", "return_type": "bool", "parameters": [{"name": "src", "type": "SDL_IOStream *"}, {"name": "closeio", "type": "bool"}, {"name": "spec", "type": "SDL_AudioSpec *"}, {"name": "audio_buf", "type": "Uint8 **"}, {"name": "audio_len", "type": "Uint32 *"}]},
|
||||
{"name": "SDL_LoadWAV", "return_type": "bool", "parameters": [{"name": "path", "type": "const char *"}, {"name": "spec", "type": "SDL_AudioSpec *"}, {"name": "audio_buf", "type": "Uint8 **"}, {"name": "audio_len", "type": "Uint32 *"}]},
|
||||
{"name": "SDL_MixAudio", "return_type": "bool", "parameters": [{"name": "dst", "type": "Uint8 *"}, {"name": "src", "type": "const Uint8 *"}, {"name": "format", "type": "SDL_AudioFormat"}, {"name": "len", "type": "Uint32"}, {"name": "volume", "type": "float"}]},
|
||||
{"name": "SDL_ConvertAudioSamples", "return_type": "bool", "parameters": [{"name": "src_spec", "type": "const SDL_AudioSpec *"}, {"name": "src_data", "type": "const Uint8 *"}, {"name": "src_len", "type": "int"}, {"name": "dst_spec", "type": "const SDL_AudioSpec *"}, {"name": "dst_data", "type": "Uint8 **"}, {"name": "dst_len", "type": "int *"}]},
|
||||
{"name": "SDL_GetAudioFormatName", "return_type": "const char *", "parameters": [{"name": "format", "type": "SDL_AudioFormat"}]},
|
||||
{"name": "SDL_GetSilenceValueForFormat", "return_type": "int", "parameters": [{"name": "format", "type": "SDL_AudioFormat"}]}
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,46 @@
|
|||
{
|
||||
"header": "SDL_keyboard.h",
|
||||
"opaque_types": [
|
||||
],
|
||||
"typedefs": [
|
||||
{"name": "SDL_KeyboardID", "underlying_type": "Uint32"}
|
||||
],
|
||||
"function_pointers": [
|
||||
],
|
||||
"enums": [
|
||||
{"name": "SDL_TextInputType", "values": []},
|
||||
{"name": "SDL_Capitalization", "values": []}
|
||||
],
|
||||
"structs": [
|
||||
],
|
||||
"unions": [
|
||||
],
|
||||
"flags": [
|
||||
],
|
||||
"functions": [
|
||||
{"name": "SDL_HasKeyboard", "return_type": "bool", "parameters": []},
|
||||
{"name": "SDL_GetKeyboards", "return_type": "SDL_KeyboardID *", "parameters": [{"name": "count", "type": "int *"}]},
|
||||
{"name": "SDL_GetKeyboardNameForID", "return_type": "const char *", "parameters": [{"name": "instance_id", "type": "SDL_KeyboardID"}]},
|
||||
{"name": "SDL_GetKeyboardFocus", "return_type": "SDL_Window *", "parameters": []},
|
||||
{"name": "SDL_GetKeyboardState", "return_type": "const bool *", "parameters": [{"name": "numkeys", "type": "int *"}]},
|
||||
{"name": "SDL_ResetKeyboard", "return_type": "void", "parameters": []},
|
||||
{"name": "SDL_GetModState", "return_type": "SDL_Keymod", "parameters": []},
|
||||
{"name": "SDL_SetModState", "return_type": "void", "parameters": [{"name": "modstate", "type": "SDL_Keymod"}]},
|
||||
{"name": "SDL_GetKeyFromScancode", "return_type": "SDL_Keycode", "parameters": [{"name": "scancode", "type": "SDL_Scancode"}, {"name": "modstate", "type": "SDL_Keymod"}, {"name": "key_event", "type": "bool"}]},
|
||||
{"name": "SDL_GetScancodeFromKey", "return_type": "SDL_Scancode", "parameters": [{"name": "key", "type": "SDL_Keycode"}, {"name": "modstate", "type": "SDL_Keymod *"}]},
|
||||
{"name": "SDL_SetScancodeName", "return_type": "bool", "parameters": [{"name": "scancode", "type": "SDL_Scancode"}, {"name": "name", "type": "const char *"}]},
|
||||
{"name": "SDL_GetScancodeName", "return_type": "const char *", "parameters": [{"name": "scancode", "type": "SDL_Scancode"}]},
|
||||
{"name": "SDL_GetScancodeFromName", "return_type": "SDL_Scancode", "parameters": [{"name": "name", "type": "const char *"}]},
|
||||
{"name": "SDL_GetKeyName", "return_type": "const char *", "parameters": [{"name": "key", "type": "SDL_Keycode"}]},
|
||||
{"name": "SDL_GetKeyFromName", "return_type": "SDL_Keycode", "parameters": [{"name": "name", "type": "const char *"}]},
|
||||
{"name": "SDL_StartTextInput", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_StartTextInputWithProperties", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "props", "type": "SDL_PropertiesID"}]},
|
||||
{"name": "SDL_TextInputActive", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_StopTextInput", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_ClearComposition", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_SetTextInputArea", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "rect", "type": "const SDL_Rect *"}, {"name": "cursor", "type": "int"}]},
|
||||
{"name": "SDL_GetTextInputArea", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "rect", "type": "SDL_Rect *"}, {"name": "cursor", "type": "int *"}]},
|
||||
{"name": "SDL_HasScreenKeyboardSupport", "return_type": "bool", "parameters": []},
|
||||
{"name": "SDL_ScreenKeyboardShown", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,143 @@
|
|||
{
|
||||
"header": "SDL_video.h",
|
||||
"opaque_types": [
|
||||
{"name": "SDL_DisplayModeData"},
|
||||
{"name": "SDL_Window"}
|
||||
],
|
||||
"typedefs": [
|
||||
{"name": "SDL_DisplayID", "underlying_type": "Uint32"},
|
||||
{"name": "SDL_WindowID", "underlying_type": "Uint32"},
|
||||
{"name": "SDL_GLProfile", "underlying_type": "Uint32"},
|
||||
{"name": "SDL_GLContextFlag", "underlying_type": "Uint32"},
|
||||
{"name": "SDL_GLContextReleaseFlag", "underlying_type": "Uint32"},
|
||||
{"name": "SDL_GLContextResetNotification", "underlying_type": "Uint32"}
|
||||
],
|
||||
"function_pointers": [
|
||||
],
|
||||
"enums": [
|
||||
{"name": "SDL_SystemTheme", "values": []},
|
||||
{"name": "SDL_DisplayOrientation", "values": []},
|
||||
{"name": "SDL_FlashOperation", "values": []},
|
||||
{"name": "SDL_HitTestResult", "values": []}
|
||||
],
|
||||
"structs": [
|
||||
{"name": "SDL_DisplayMode", "fields": [{"name": "displayID", "type": "SDL_DisplayID", "comment": "the display this mode is associated with"}, {"name": "format", "type": "SDL_PixelFormat", "comment": "pixel format"}, {"name": "w", "type": "int", "comment": "width"}, {"name": "h", "type": "int", "comment": "height"}, {"name": "pixel_density", "type": "float", "comment": "scale converting size to pixels (e.g. a 1920x1080 mode with 2.0 scale would have 3840x2160 pixels)"}, {"name": "refresh_rate", "type": "float", "comment": "refresh rate (or 0.0f for unspecified)"}, {"name": "refresh_rate_numerator", "type": "int", "comment": "precise refresh rate numerator (or 0 for unspecified)"}, {"name": "refresh_rate_denominator", "type": "int", "comment": "precise refresh rate denominator"}, {"name": "internal", "type": "SDL_DisplayModeData *", "comment": "Private"}]},
|
||||
{"name": "SDL_GLContextState", "fields": []}
|
||||
],
|
||||
"unions": [
|
||||
],
|
||||
"flags": [
|
||||
{"name": "SDL_WindowFlags", "underlying_type": "Uint64", "values": [{"name": "SDL_WINDOW_FULLSCREEN", "value": "SDL_UINT64_C(0x0000000000000001)", "comment": "window is in fullscreen mode"}, {"name": "SDL_WINDOW_OPENGL", "value": "SDL_UINT64_C(0x0000000000000002)", "comment": "window usable with OpenGL context"}, {"name": "SDL_WINDOW_OCCLUDED", "value": "SDL_UINT64_C(0x0000000000000004)", "comment": "window is occluded"}, {"name": "SDL_WINDOW_HIDDEN", "value": "SDL_UINT64_C(0x0000000000000008)", "comment": "window is neither mapped onto the desktop nor shown in the taskbar/dock/window list; SDL_ShowWindow() is required for it to become visible"}, {"name": "SDL_WINDOW_BORDERLESS", "value": "SDL_UINT64_C(0x0000000000000010)", "comment": "no window decoration"}, {"name": "SDL_WINDOW_RESIZABLE", "value": "SDL_UINT64_C(0x0000000000000020)", "comment": "window can be resized"}, {"name": "SDL_WINDOW_MINIMIZED", "value": "SDL_UINT64_C(0x0000000000000040)", "comment": "window is minimized"}, {"name": "SDL_WINDOW_MAXIMIZED", "value": "SDL_UINT64_C(0x0000000000000080)", "comment": "window is maximized"}, {"name": "SDL_WINDOW_MOUSE_GRABBED", "value": "SDL_UINT64_C(0x0000000000000100)", "comment": "window has grabbed mouse input"}, {"name": "SDL_WINDOW_INPUT_FOCUS", "value": "SDL_UINT64_C(0x0000000000000200)", "comment": "window has input focus"}, {"name": "SDL_WINDOW_MOUSE_FOCUS", "value": "SDL_UINT64_C(0x0000000000000400)", "comment": "window has mouse focus"}, {"name": "SDL_WINDOW_EXTERNAL", "value": "SDL_UINT64_C(0x0000000000000800)", "comment": "window not created by SDL"}, {"name": "SDL_WINDOW_MODAL", "value": "SDL_UINT64_C(0x0000000000001000)", "comment": "window is modal"}, {"name": "SDL_WINDOW_HIGH_PIXEL_DENSITY", "value": "SDL_UINT64_C(0x0000000000002000)", "comment": "window uses high pixel density back buffer if possible"}, {"name": "SDL_WINDOW_MOUSE_CAPTURE", "value": "SDL_UINT64_C(0x0000000000004000)", "comment": "window has mouse captured (unrelated to MOUSE_GRABBED)"}, {"name": "SDL_WINDOW_MOUSE_RELATIVE_MODE", "value": "SDL_UINT64_C(0x0000000000008000)", "comment": "window has relative mode enabled"}, {"name": "SDL_WINDOW_ALWAYS_ON_TOP", "value": "SDL_UINT64_C(0x0000000000010000)", "comment": "window should always be above others"}, {"name": "SDL_WINDOW_UTILITY", "value": "SDL_UINT64_C(0x0000000000020000)", "comment": "window should be treated as a utility window, not showing in the task bar and window list"}, {"name": "SDL_WINDOW_TOOLTIP", "value": "SDL_UINT64_C(0x0000000000040000)", "comment": "window should be treated as a tooltip and does not get mouse or keyboard focus, requires a parent window"}, {"name": "SDL_WINDOW_POPUP_MENU", "value": "SDL_UINT64_C(0x0000000000080000)", "comment": "window should be treated as a popup menu, requires a parent window"}, {"name": "SDL_WINDOW_KEYBOARD_GRABBED", "value": "SDL_UINT64_C(0x0000000000100000)", "comment": "window has grabbed keyboard input"}, {"name": "SDL_WINDOW_VULKAN", "value": "SDL_UINT64_C(0x0000000010000000)", "comment": "window usable for Vulkan surface"}, {"name": "SDL_WINDOW_METAL", "value": "SDL_UINT64_C(0x0000000020000000)", "comment": "window usable for Metal view"}, {"name": "SDL_WINDOW_TRANSPARENT", "value": "SDL_UINT64_C(0x0000000040000000)", "comment": "window with transparent buffer"}, {"name": "SDL_WINDOW_NOT_FOCUSABLE", "value": "SDL_UINT64_C(0x0000000080000000)", "comment": "window should not be focusable"}]}
|
||||
],
|
||||
"functions": [
|
||||
{"name": "SDL_GetNumVideoDrivers", "return_type": "int", "parameters": []},
|
||||
{"name": "SDL_GetVideoDriver", "return_type": "const char *", "parameters": [{"name": "index", "type": "int"}]},
|
||||
{"name": "SDL_GetCurrentVideoDriver", "return_type": "const char *", "parameters": []},
|
||||
{"name": "SDL_GetSystemTheme", "return_type": "SDL_SystemTheme", "parameters": []},
|
||||
{"name": "SDL_GetDisplays", "return_type": "SDL_DisplayID *", "parameters": [{"name": "count", "type": "int *"}]},
|
||||
{"name": "SDL_GetPrimaryDisplay", "return_type": "SDL_DisplayID", "parameters": []},
|
||||
{"name": "SDL_GetDisplayProperties", "return_type": "SDL_PropertiesID", "parameters": [{"name": "displayID", "type": "SDL_DisplayID"}]},
|
||||
{"name": "SDL_GetDisplayName", "return_type": "const char *", "parameters": [{"name": "displayID", "type": "SDL_DisplayID"}]},
|
||||
{"name": "SDL_GetDisplayBounds", "return_type": "bool", "parameters": [{"name": "displayID", "type": "SDL_DisplayID"}, {"name": "rect", "type": "SDL_Rect *"}]},
|
||||
{"name": "SDL_GetDisplayUsableBounds", "return_type": "bool", "parameters": [{"name": "displayID", "type": "SDL_DisplayID"}, {"name": "rect", "type": "SDL_Rect *"}]},
|
||||
{"name": "SDL_GetNaturalDisplayOrientation", "return_type": "SDL_DisplayOrientation", "parameters": [{"name": "displayID", "type": "SDL_DisplayID"}]},
|
||||
{"name": "SDL_GetCurrentDisplayOrientation", "return_type": "SDL_DisplayOrientation", "parameters": [{"name": "displayID", "type": "SDL_DisplayID"}]},
|
||||
{"name": "SDL_GetDisplayContentScale", "return_type": "float", "parameters": [{"name": "displayID", "type": "SDL_DisplayID"}]},
|
||||
{"name": "SDL_GetFullscreenDisplayModes", "return_type": "SDL_DisplayMode **", "parameters": [{"name": "displayID", "type": "SDL_DisplayID"}, {"name": "count", "type": "int *"}]},
|
||||
{"name": "SDL_GetClosestFullscreenDisplayMode", "return_type": "bool", "parameters": [{"name": "displayID", "type": "SDL_DisplayID"}, {"name": "w", "type": "int"}, {"name": "h", "type": "int"}, {"name": "refresh_rate", "type": "float"}, {"name": "include_high_density_modes", "type": "bool"}, {"name": "closest", "type": "SDL_DisplayMode *"}]},
|
||||
{"name": "SDL_GetDesktopDisplayMode", "return_type": "const SDL_DisplayMode *", "parameters": [{"name": "displayID", "type": "SDL_DisplayID"}]},
|
||||
{"name": "SDL_GetCurrentDisplayMode", "return_type": "const SDL_DisplayMode *", "parameters": [{"name": "displayID", "type": "SDL_DisplayID"}]},
|
||||
{"name": "SDL_GetDisplayForPoint", "return_type": "SDL_DisplayID", "parameters": [{"name": "point", "type": "const SDL_Point *"}]},
|
||||
{"name": "SDL_GetDisplayForRect", "return_type": "SDL_DisplayID", "parameters": [{"name": "rect", "type": "const SDL_Rect *"}]},
|
||||
{"name": "SDL_GetDisplayForWindow", "return_type": "SDL_DisplayID", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_GetWindowPixelDensity", "return_type": "float", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_GetWindowDisplayScale", "return_type": "float", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_SetWindowFullscreenMode", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "mode", "type": "const SDL_DisplayMode *"}]},
|
||||
{"name": "SDL_GetWindowFullscreenMode", "return_type": "const SDL_DisplayMode *", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_GetWindowICCProfile", "return_type": "void *", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "size", "type": "size_t *"}]},
|
||||
{"name": "SDL_GetWindowPixelFormat", "return_type": "SDL_PixelFormat", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_GetWindows", "return_type": "SDL_Window **", "parameters": [{"name": "count", "type": "int *"}]},
|
||||
{"name": "SDL_CreateWindow", "return_type": "SDL_Window *", "parameters": [{"name": "title", "type": "const char *"}, {"name": "w", "type": "int"}, {"name": "h", "type": "int"}, {"name": "flags", "type": "SDL_WindowFlags"}]},
|
||||
{"name": "SDL_CreatePopupWindow", "return_type": "SDL_Window *", "parameters": [{"name": "parent", "type": "SDL_Window *"}, {"name": "offset_x", "type": "int"}, {"name": "offset_y", "type": "int"}, {"name": "w", "type": "int"}, {"name": "h", "type": "int"}, {"name": "flags", "type": "SDL_WindowFlags"}]},
|
||||
{"name": "SDL_CreateWindowWithProperties", "return_type": "SDL_Window *", "parameters": [{"name": "props", "type": "SDL_PropertiesID"}]},
|
||||
{"name": "SDL_GetWindowID", "return_type": "SDL_WindowID", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_GetWindowFromID", "return_type": "SDL_Window *", "parameters": [{"name": "id", "type": "SDL_WindowID"}]},
|
||||
{"name": "SDL_GetWindowParent", "return_type": "SDL_Window *", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_GetWindowProperties", "return_type": "SDL_PropertiesID", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_GetWindowFlags", "return_type": "SDL_WindowFlags", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_SetWindowTitle", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "title", "type": "const char *"}]},
|
||||
{"name": "SDL_GetWindowTitle", "return_type": "const char *", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_SetWindowIcon", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "icon", "type": "SDL_Surface *"}]},
|
||||
{"name": "SDL_SetWindowPosition", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "x", "type": "int"}, {"name": "y", "type": "int"}]},
|
||||
{"name": "SDL_GetWindowPosition", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "x", "type": "int *"}, {"name": "y", "type": "int *"}]},
|
||||
{"name": "SDL_SetWindowSize", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "w", "type": "int"}, {"name": "h", "type": "int"}]},
|
||||
{"name": "SDL_GetWindowSize", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "w", "type": "int *"}, {"name": "h", "type": "int *"}]},
|
||||
{"name": "SDL_GetWindowSafeArea", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "rect", "type": "SDL_Rect *"}]},
|
||||
{"name": "SDL_SetWindowAspectRatio", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "min_aspect", "type": "float"}, {"name": "max_aspect", "type": "float"}]},
|
||||
{"name": "SDL_GetWindowAspectRatio", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "min_aspect", "type": "float *"}, {"name": "max_aspect", "type": "float *"}]},
|
||||
{"name": "SDL_GetWindowBordersSize", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "top", "type": "int *"}, {"name": "left", "type": "int *"}, {"name": "bottom", "type": "int *"}, {"name": "right", "type": "int *"}]},
|
||||
{"name": "SDL_GetWindowSizeInPixels", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "w", "type": "int *"}, {"name": "h", "type": "int *"}]},
|
||||
{"name": "SDL_SetWindowMinimumSize", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "min_w", "type": "int"}, {"name": "min_h", "type": "int"}]},
|
||||
{"name": "SDL_GetWindowMinimumSize", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "w", "type": "int *"}, {"name": "h", "type": "int *"}]},
|
||||
{"name": "SDL_SetWindowMaximumSize", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "max_w", "type": "int"}, {"name": "max_h", "type": "int"}]},
|
||||
{"name": "SDL_GetWindowMaximumSize", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "w", "type": "int *"}, {"name": "h", "type": "int *"}]},
|
||||
{"name": "SDL_SetWindowBordered", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "bordered", "type": "bool"}]},
|
||||
{"name": "SDL_SetWindowResizable", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "resizable", "type": "bool"}]},
|
||||
{"name": "SDL_SetWindowAlwaysOnTop", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "on_top", "type": "bool"}]},
|
||||
{"name": "SDL_ShowWindow", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_HideWindow", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_RaiseWindow", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_MaximizeWindow", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_MinimizeWindow", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_RestoreWindow", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_SetWindowFullscreen", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "fullscreen", "type": "bool"}]},
|
||||
{"name": "SDL_SyncWindow", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_WindowHasSurface", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_GetWindowSurface", "return_type": "SDL_Surface *", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_SetWindowSurfaceVSync", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "vsync", "type": "int"}]},
|
||||
{"name": "SDL_GetWindowSurfaceVSync", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "vsync", "type": "int *"}]},
|
||||
{"name": "SDL_UpdateWindowSurface", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_UpdateWindowSurfaceRects", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "rects", "type": "const SDL_Rect *"}, {"name": "numrects", "type": "int"}]},
|
||||
{"name": "SDL_DestroyWindowSurface", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_SetWindowKeyboardGrab", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "grabbed", "type": "bool"}]},
|
||||
{"name": "SDL_SetWindowMouseGrab", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "grabbed", "type": "bool"}]},
|
||||
{"name": "SDL_GetWindowKeyboardGrab", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_GetWindowMouseGrab", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_GetGrabbedWindow", "return_type": "SDL_Window *", "parameters": []},
|
||||
{"name": "SDL_SetWindowMouseRect", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "rect", "type": "const SDL_Rect *"}]},
|
||||
{"name": "SDL_GetWindowMouseRect", "return_type": "const SDL_Rect *", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_SetWindowOpacity", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "opacity", "type": "float"}]},
|
||||
{"name": "SDL_GetWindowOpacity", "return_type": "float", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_SetWindowParent", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "parent", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_SetWindowModal", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "modal", "type": "bool"}]},
|
||||
{"name": "SDL_SetWindowFocusable", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "focusable", "type": "bool"}]},
|
||||
{"name": "SDL_ShowWindowSystemMenu", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "x", "type": "int"}, {"name": "y", "type": "int"}]},
|
||||
{"name": "SDL_SetWindowHitTest", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "callback", "type": "SDL_HitTest"}, {"name": "callback_data", "type": "void *"}]},
|
||||
{"name": "SDL_SetWindowShape", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "shape", "type": "SDL_Surface *"}]},
|
||||
{"name": "SDL_FlashWindow", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "operation", "type": "SDL_FlashOperation"}]},
|
||||
{"name": "SDL_DestroyWindow", "return_type": "void", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_ScreenSaverEnabled", "return_type": "bool", "parameters": []},
|
||||
{"name": "SDL_EnableScreenSaver", "return_type": "bool", "parameters": []},
|
||||
{"name": "SDL_DisableScreenSaver", "return_type": "bool", "parameters": []},
|
||||
{"name": "SDL_GL_LoadLibrary", "return_type": "bool", "parameters": [{"name": "path", "type": "const char *"}]},
|
||||
{"name": "SDL_GL_GetProcAddress", "return_type": "SDL_FunctionPointer", "parameters": [{"name": "proc", "type": "const char *"}]},
|
||||
{"name": "SDL_EGL_GetProcAddress", "return_type": "SDL_FunctionPointer", "parameters": [{"name": "proc", "type": "const char *"}]},
|
||||
{"name": "SDL_GL_UnloadLibrary", "return_type": "void", "parameters": []},
|
||||
{"name": "SDL_GL_ExtensionSupported", "return_type": "bool", "parameters": [{"name": "extension", "type": "const char *"}]},
|
||||
{"name": "SDL_GL_ResetAttributes", "return_type": "void", "parameters": []},
|
||||
{"name": "SDL_GL_SetAttribute", "return_type": "bool", "parameters": [{"name": "attr", "type": "SDL_GLAttr"}, {"name": "value", "type": "int"}]},
|
||||
{"name": "SDL_GL_GetAttribute", "return_type": "bool", "parameters": [{"name": "attr", "type": "SDL_GLAttr"}, {"name": "value", "type": "int *"}]},
|
||||
{"name": "SDL_GL_CreateContext", "return_type": "SDL_GLContext", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_GL_MakeCurrent", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}, {"name": "context", "type": "SDL_GLContext"}]},
|
||||
{"name": "SDL_GL_GetCurrentWindow", "return_type": "SDL_Window *", "parameters": []},
|
||||
{"name": "SDL_GL_GetCurrentContext", "return_type": "SDL_GLContext", "parameters": []},
|
||||
{"name": "SDL_EGL_GetCurrentDisplay", "return_type": "SDL_EGLDisplay", "parameters": []},
|
||||
{"name": "SDL_EGL_GetCurrentConfig", "return_type": "SDL_EGLConfig", "parameters": []},
|
||||
{"name": "SDL_EGL_GetWindowSurface", "return_type": "SDL_EGLSurface", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_EGL_SetAttributeCallbacks", "return_type": "void", "parameters": [{"name": "platformAttribCallback", "type": "SDL_EGLAttribArrayCallback"}, {"name": "surfaceAttribCallback", "type": "SDL_EGLIntArrayCallback"}, {"name": "contextAttribCallback", "type": "SDL_EGLIntArrayCallback"}, {"name": "userdata", "type": "void *"}]},
|
||||
{"name": "SDL_GL_SetSwapInterval", "return_type": "bool", "parameters": [{"name": "interval", "type": "int"}]},
|
||||
{"name": "SDL_GL_GetSwapInterval", "return_type": "bool", "parameters": [{"name": "interval", "type": "int *"}]},
|
||||
{"name": "SDL_GL_SwapWindow", "return_type": "bool", "parameters": [{"name": "window", "type": "SDL_Window *"}]},
|
||||
{"name": "SDL_GL_DestroyContext", "return_type": "bool", "parameters": [{"name": "context", "type": "SDL_GLContext"}]}
|
||||
]
|
||||
}
|
||||
Loading…
Reference in New Issue