Skip to content

Commit aa858db

Browse files
committed
remove UB
1 parent 325cd16 commit aa858db

File tree

3 files changed

+125
-121
lines changed

3 files changed

+125
-121
lines changed

src/sdl2/event.rs

+61-61
Original file line numberDiff line numberDiff line change
@@ -331,74 +331,74 @@ impl TryFrom<u32> for EventType {
331331
use self::EventType::*;
332332
use crate::sys::SDL_EventType::*;
333333

334-
Ok(match unsafe { transmute(n) } {
335-
SDL_FIRSTEVENT => First,
336-
337-
SDL_QUIT => Quit,
338-
SDL_APP_TERMINATING => AppTerminating,
339-
SDL_APP_LOWMEMORY => AppLowMemory,
340-
SDL_APP_WILLENTERBACKGROUND => AppWillEnterBackground,
341-
SDL_APP_DIDENTERBACKGROUND => AppDidEnterBackground,
342-
SDL_APP_WILLENTERFOREGROUND => AppWillEnterForeground,
343-
SDL_APP_DIDENTERFOREGROUND => AppDidEnterForeground,
344-
345-
SDL_DISPLAYEVENT => Display,
346-
SDL_WINDOWEVENT => Window,
347-
348-
SDL_KEYDOWN => KeyDown,
349-
SDL_KEYUP => KeyUp,
350-
SDL_TEXTEDITING => TextEditing,
351-
SDL_TEXTINPUT => TextInput,
352-
353-
SDL_MOUSEMOTION => MouseMotion,
354-
SDL_MOUSEBUTTONDOWN => MouseButtonDown,
355-
SDL_MOUSEBUTTONUP => MouseButtonUp,
356-
SDL_MOUSEWHEEL => MouseWheel,
357-
358-
SDL_JOYAXISMOTION => JoyAxisMotion,
359-
SDL_JOYBALLMOTION => JoyBallMotion,
360-
SDL_JOYHATMOTION => JoyHatMotion,
361-
SDL_JOYBUTTONDOWN => JoyButtonDown,
362-
SDL_JOYBUTTONUP => JoyButtonUp,
363-
SDL_JOYDEVICEADDED => JoyDeviceAdded,
364-
SDL_JOYDEVICEREMOVED => JoyDeviceRemoved,
365-
366-
SDL_CONTROLLERAXISMOTION => ControllerAxisMotion,
367-
SDL_CONTROLLERBUTTONDOWN => ControllerButtonDown,
368-
SDL_CONTROLLERBUTTONUP => ControllerButtonUp,
369-
SDL_CONTROLLERDEVICEADDED => ControllerDeviceAdded,
370-
SDL_CONTROLLERDEVICEREMOVED => ControllerDeviceRemoved,
371-
SDL_CONTROLLERDEVICEREMAPPED => ControllerDeviceRemapped,
372-
SDL_CONTROLLERTOUCHPADDOWN => ControllerTouchpadDown,
373-
SDL_CONTROLLERTOUCHPADMOTION => ControllerTouchpadMotion,
374-
SDL_CONTROLLERTOUCHPADUP => ControllerTouchpadUp,
334+
match n {
335+
x if x == SDL_FIRSTEVENT as u32 => Ok(First),
336+
337+
x if x == SDL_QUIT as u32 => Ok(Quit),
338+
x if x == SDL_APP_TERMINATING as u32 => Ok(AppTerminating),
339+
x if x == SDL_APP_LOWMEMORY as u32 => Ok(AppLowMemory),
340+
x if x == SDL_APP_WILLENTERBACKGROUND as u32 => Ok(AppWillEnterBackground),
341+
x if x == SDL_APP_DIDENTERBACKGROUND as u32 => Ok(AppDidEnterBackground),
342+
x if x == SDL_APP_WILLENTERFOREGROUND as u32 => Ok(AppWillEnterForeground),
343+
x if x == SDL_APP_DIDENTERFOREGROUND as u32 => Ok(AppDidEnterForeground),
344+
345+
x if x == SDL_DISPLAYEVENT as u32 => Ok(Display),
346+
x if x == SDL_WINDOWEVENT as u32 => Ok(Window),
347+
348+
x if x == SDL_KEYDOWN as u32 => Ok(KeyDown),
349+
x if x == SDL_KEYUP as u32 => Ok(KeyUp),
350+
x if x == SDL_TEXTEDITING as u32 => Ok(TextEditing),
351+
x if x == SDL_TEXTINPUT as u32 => Ok(TextInput),
352+
353+
x if x == SDL_MOUSEMOTION as u32 => Ok(MouseMotion),
354+
x if x == SDL_MOUSEBUTTONDOWN as u32 => Ok(MouseButtonDown),
355+
x if x == SDL_MOUSEBUTTONUP as u32 => Ok(MouseButtonUp),
356+
x if x == SDL_MOUSEWHEEL as u32 => Ok(MouseWheel),
357+
358+
x if x == SDL_JOYAXISMOTION as u32 => Ok(JoyAxisMotion),
359+
x if x == SDL_JOYBALLMOTION as u32 => Ok(JoyBallMotion),
360+
x if x == SDL_JOYHATMOTION as u32 => Ok(JoyHatMotion),
361+
x if x == SDL_JOYBUTTONDOWN as u32 => Ok(JoyButtonDown),
362+
x if x == SDL_JOYBUTTONUP as u32 => Ok(JoyButtonUp),
363+
x if x == SDL_JOYDEVICEADDED as u32 => Ok(JoyDeviceAdded),
364+
x if x == SDL_JOYDEVICEREMOVED as u32 => Ok(JoyDeviceRemoved),
365+
366+
x if x == SDL_CONTROLLERAXISMOTION as u32 => Ok(ControllerAxisMotion),
367+
x if x == SDL_CONTROLLERBUTTONDOWN as u32 => Ok(ControllerButtonDown),
368+
x if x == SDL_CONTROLLERBUTTONUP as u32 => Ok(ControllerButtonUp),
369+
x if x == SDL_CONTROLLERDEVICEADDED as u32 => Ok(ControllerDeviceAdded),
370+
x if x == SDL_CONTROLLERDEVICEREMOVED as u32 => Ok(ControllerDeviceRemoved),
371+
x if x == SDL_CONTROLLERDEVICEREMAPPED as u32 => Ok(ControllerDeviceRemapped),
372+
x if x == SDL_CONTROLLERTOUCHPADDOWN as u32 => Ok(ControllerTouchpadDown),
373+
x if x == SDL_CONTROLLERTOUCHPADMOTION as u32 => Ok(ControllerTouchpadMotion),
374+
x if x == SDL_CONTROLLERTOUCHPADUP as u32 => Ok(ControllerTouchpadUp),
375375
#[cfg(feature = "hidapi")]
376-
SDL_CONTROLLERSENSORUPDATE => ControllerSensorUpdated,
376+
x if x == SDL_CONTROLLERSENSORUPDATE as u32 => Ok(ControllerSensorUpdated),
377377

378-
SDL_FINGERDOWN => FingerDown,
379-
SDL_FINGERUP => FingerUp,
380-
SDL_FINGERMOTION => FingerMotion,
381-
SDL_DOLLARGESTURE => DollarGesture,
382-
SDL_DOLLARRECORD => DollarRecord,
383-
SDL_MULTIGESTURE => MultiGesture,
378+
x if x == SDL_FINGERDOWN as u32 => Ok(FingerDown),
379+
x if x == SDL_FINGERUP as u32 => Ok(FingerUp),
380+
x if x == SDL_FINGERMOTION as u32 => Ok(FingerMotion),
381+
x if x == SDL_DOLLARGESTURE as u32 => Ok(DollarGesture),
382+
x if x == SDL_DOLLARRECORD as u32 => Ok(DollarRecord),
383+
x if x == SDL_MULTIGESTURE as u32 => Ok(MultiGesture),
384384

385-
SDL_CLIPBOARDUPDATE => ClipboardUpdate,
386-
SDL_DROPFILE => DropFile,
387-
SDL_DROPTEXT => DropText,
388-
SDL_DROPBEGIN => DropBegin,
389-
SDL_DROPCOMPLETE => DropComplete,
385+
x if x == SDL_CLIPBOARDUPDATE as u32 => Ok(ClipboardUpdate),
386+
x if x == SDL_DROPFILE as u32 => Ok(DropFile),
387+
x if x == SDL_DROPTEXT as u32 => Ok(DropText),
388+
x if x == SDL_DROPBEGIN as u32 => Ok(DropBegin),
389+
x if x == SDL_DROPCOMPLETE as u32 => Ok(DropComplete),
390390

391-
SDL_AUDIODEVICEADDED => AudioDeviceAdded,
392-
SDL_AUDIODEVICEREMOVED => AudioDeviceRemoved,
391+
x if x == SDL_AUDIODEVICEADDED as u32 => Ok(AudioDeviceAdded),
392+
x if x == SDL_AUDIODEVICEREMOVED as u32 => Ok(AudioDeviceRemoved),
393393

394-
SDL_RENDER_TARGETS_RESET => RenderTargetsReset,
395-
SDL_RENDER_DEVICE_RESET => RenderDeviceReset,
394+
x if x == SDL_RENDER_TARGETS_RESET as u32 => Ok(RenderTargetsReset),
395+
x if x == SDL_RENDER_DEVICE_RESET as u32 => Ok(RenderDeviceReset),
396396

397-
SDL_USEREVENT => User,
398-
SDL_LASTEVENT => Last,
397+
x if x == SDL_USEREVENT as u32 => Ok(User),
398+
x if x == SDL_LASTEVENT as u32 => Ok(Last),
399399

400-
_ => return Err(()),
401-
})
400+
_ => Err(()),
401+
}
402402
}
403403
}
404404

src/sdl2/pixels.rs

+43-42
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use crate::sys;
22
use std::convert::TryFrom;
3-
use std::mem::transmute;
43

54
use crate::get_error;
65

@@ -453,47 +452,49 @@ impl TryFrom<u32> for PixelFormatEnum {
453452
fn try_from(n: u32) -> Result<Self, Self::Error> {
454453
use self::PixelFormatEnum::*;
455454

456-
Ok(match unsafe { transmute(n) } {
457-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_UNKNOWN => Unknown,
458-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX1LSB => Index1LSB,
459-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX1MSB => Index1MSB,
460-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX4LSB => Index4LSB,
461-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX4MSB => Index4MSB,
462-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX8 => Index8,
463-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB332 => RGB332,
464-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB444 => RGB444,
465-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB555 => RGB555,
466-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGR555 => BGR555,
467-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ARGB4444 => ARGB4444,
468-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGBA4444 => RGBA4444,
469-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ABGR4444 => ABGR4444,
470-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGRA4444 => BGRA4444,
471-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ARGB1555 => ARGB1555,
472-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGBA5551 => RGBA5551,
473-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ABGR1555 => ABGR1555,
474-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGRA5551 => BGRA5551,
475-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB565 => RGB565,
476-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGR565 => BGR565,
477-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB24 => RGB24,
478-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGR24 => BGR24,
479-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB888 => RGB888,
480-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGBX8888 => RGBX8888,
481-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGR888 => BGR888,
482-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGRX8888 => BGRX8888,
483-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ARGB8888 => ARGB8888,
484-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGBA8888 => RGBA8888,
485-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ABGR8888 => ABGR8888,
486-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGRA8888 => BGRA8888,
487-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ARGB2101010 => ARGB2101010,
488-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_YV12 => YV12,
489-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_IYUV => IYUV,
490-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_YUY2 => YUY2,
491-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_UYVY => UYVY,
492-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_YVYU => YVYU,
493-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_NV12 => NV12,
494-
sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_NV21 => NV21,
495-
_ => return Err(()),
496-
})
455+
match n {
456+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_UNKNOWN as u32 => Ok(Unknown),
457+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX1LSB as u32 => Ok(Index1LSB),
458+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX1MSB as u32 => Ok(Index1MSB),
459+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX4LSB as u32 => Ok(Index4LSB),
460+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX4MSB as u32 => Ok(Index4MSB),
461+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_INDEX8 as u32 => Ok(Index8),
462+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB332 as u32 => Ok(RGB332),
463+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB444 as u32 => Ok(RGB444),
464+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB555 as u32 => Ok(RGB555),
465+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGR555 as u32 => Ok(BGR555),
466+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ARGB4444 as u32 => Ok(ARGB4444),
467+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGBA4444 as u32 => Ok(RGBA4444),
468+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ABGR4444 as u32 => Ok(ABGR4444),
469+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGRA4444 as u32 => Ok(BGRA4444),
470+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ARGB1555 as u32 => Ok(ARGB1555),
471+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGBA5551 as u32 => Ok(RGBA5551),
472+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ABGR1555 as u32 => Ok(ABGR1555),
473+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGRA5551 as u32 => Ok(BGRA5551),
474+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB565 as u32 => Ok(RGB565),
475+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGR565 as u32 => Ok(BGR565),
476+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB24 as u32 => Ok(RGB24),
477+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGR24 as u32 => Ok(BGR24),
478+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGB888 as u32 => Ok(RGB888),
479+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGBX8888 as u32 => Ok(RGBX8888),
480+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGR888 as u32 => Ok(BGR888),
481+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGRX8888 as u32 => Ok(BGRX8888),
482+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ARGB8888 as u32 => Ok(ARGB8888),
483+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_RGBA8888 as u32 => Ok(RGBA8888),
484+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ABGR8888 as u32 => Ok(ABGR8888),
485+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_BGRA8888 as u32 => Ok(BGRA8888),
486+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_ARGB2101010 as u32 => {
487+
Ok(ARGB2101010)
488+
}
489+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_YV12 as u32 => Ok(YV12),
490+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_IYUV as u32 => Ok(IYUV),
491+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_YUY2 as u32 => Ok(YUY2),
492+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_UYVY as u32 => Ok(UYVY),
493+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_YVYU as u32 => Ok(YVYU),
494+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_NV12 as u32 => Ok(NV12),
495+
x if x == sys::SDL_PixelFormatEnum::SDL_PIXELFORMAT_NV21 as u32 => Ok(NV21),
496+
_ => Err(()),
497+
}
497498
}
498499
}
499500

src/sdl2/render.rs

+21-18
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,12 @@ impl TryFrom<u32> for TextureAccess {
111111
use self::TextureAccess::*;
112112
use crate::sys::SDL_TextureAccess::*;
113113

114-
Ok(match unsafe { transmute(n) } {
115-
SDL_TEXTUREACCESS_STATIC => Static,
116-
SDL_TEXTUREACCESS_STREAMING => Streaming,
117-
SDL_TEXTUREACCESS_TARGET => Target,
118-
})
114+
match n {
115+
x if x == SDL_TEXTUREACCESS_STATIC as u32 => Ok(Static),
116+
x if x == SDL_TEXTUREACCESS_STREAMING as u32 => Ok(Streaming),
117+
x if x == SDL_TEXTUREACCESS_TARGET as u32 => Ok(Target),
118+
_ => Err(()),
119+
}
119120
}
120121
}
121122

@@ -165,14 +166,15 @@ impl TryFrom<u32> for BlendMode {
165166
use self::BlendMode::*;
166167
use crate::sys::SDL_BlendMode::*;
167168

168-
Ok(match unsafe { transmute(n) } {
169-
SDL_BLENDMODE_NONE => None,
170-
SDL_BLENDMODE_BLEND => Blend,
171-
SDL_BLENDMODE_ADD => Add,
172-
SDL_BLENDMODE_MOD => Mod,
173-
SDL_BLENDMODE_MUL => Mul,
174-
SDL_BLENDMODE_INVALID => Invalid,
175-
})
169+
match n {
170+
x if x == SDL_BLENDMODE_NONE as u32 => Ok(None),
171+
x if x == SDL_BLENDMODE_BLEND as u32 => Ok(Blend),
172+
x if x == SDL_BLENDMODE_ADD as u32 => Ok(Add),
173+
x if x == SDL_BLENDMODE_MOD as u32 => Ok(Mod),
174+
x if x == SDL_BLENDMODE_MUL as u32 => Ok(Mul),
175+
x if x == SDL_BLENDMODE_INVALID as u32 => Ok(Invalid),
176+
_ => Err(()),
177+
}
176178
}
177179
}
178180

@@ -191,11 +193,12 @@ impl TryFrom<u32> for ScaleMode {
191193
type Error = ();
192194

193195
fn try_from(n: u32) -> Result<Self, Self::Error> {
194-
Ok(match unsafe { transmute(n) } {
195-
crate::sys::SDL_ScaleMode::SDL_ScaleModeNearest => self::ScaleMode::Nearest,
196-
crate::sys::SDL_ScaleMode::SDL_ScaleModeLinear => self::ScaleMode::Linear,
197-
crate::sys::SDL_ScaleMode::SDL_ScaleModeBest => self::ScaleMode::Best,
198-
})
196+
match n {
197+
x if x == crate::sys::SDL_ScaleMode::SDL_ScaleModeNearest as u32 => Ok(ScaleMode::Nearest),
198+
x if x == crate::sys::SDL_ScaleMode::SDL_ScaleModeLinear as u32 => Ok(ScaleMode::Linear),
199+
x if x == crate::sys::SDL_ScaleMode::SDL_ScaleModeBest as u32 => Ok(ScaleMode::Best),
200+
_ => Err(()),
201+
}
199202
}
200203
}
201204

0 commit comments

Comments
 (0)