diff --git a/include/libremidi/backends/coremidi/helpers.hpp b/include/libremidi/backends/coremidi/helpers.hpp index 08e62ff..ba35ec7 100644 --- a/include/libremidi/backends/coremidi/helpers.hpp +++ b/include/libremidi/backends/coremidi/helpers.hpp @@ -207,7 +207,8 @@ inline CFStringRef ConnectedEndpointName(MIDIEndpointRef endpoint) inline MIDIObjectRef locate_object(auto& self, const port_information& info, MIDIObjectType requested_type) { - auto uid = std::bit_cast((uint32_t)info.port); + std::int32_t uid; + std::memcpy(&uid, &(info.port), sizeof(uint32_t)); MIDIObjectRef object{}; MIDIObjectType type{}; auto ret = MIDIObjectFindByUniqueID(uid, &object, &type); diff --git a/include/libremidi/backends/coremidi/observer.hpp b/include/libremidi/backends/coremidi/observer.hpp index defe623..12a936a 100644 --- a/include/libremidi/backends/coremidi/observer.hpp +++ b/include/libremidi/backends/coremidi/observer.hpp @@ -78,13 +78,16 @@ public: if (!ok) return {}; - return std::conditional_t{ - {.client = (std::uintptr_t)this->client, - .port = std::bit_cast(get_int_property(obj, kMIDIPropertyUniqueID)), - .manufacturer = get_string_property(obj, kMIDIPropertyManufacturer), - .device_name = get_string_property(obj, kMIDIPropertyModel), - .port_name = get_string_property(obj, kMIDIPropertyName), - .display_name = get_string_property(obj, kMIDIPropertyDisplayName)}}; + std::conditional_t ret{ + {.client = (std::uintptr_t)this->client, + .port = 0, + .manufacturer = get_string_property(obj, kMIDIPropertyManufacturer), + .device_name = get_string_property(obj, kMIDIPropertyModel), + .port_name = get_string_property(obj, kMIDIPropertyName), + .display_name = get_string_property(obj, kMIDIPropertyDisplayName)}}; + auto prop = get_int_property(obj, kMIDIPropertyUniqueID); + std::memcpy(&ret.port, &(prop), sizeof(prop)); + return ret; } std::vector get_input_ports() const noexcept override