diff --git a/src/common/dbus.h b/src/common/dbus.h index 864040241..e0689c3fe 100644 --- a/src/common/dbus.h +++ b/src/common/dbus.h @@ -29,12 +29,12 @@ typedef struct FFDBusData { const char* ffDBusLoadData(DBusBusType busType, FFDBusData* data); // Returns an error message or NULL on success bool ffDBusGetString(FFDBusData* dbus, DBusMessageIter* iter, FFstrbuf* result); bool ffDBusGetBool(FFDBusData* dbus, DBusMessageIter* iter, bool* result); -bool ffDBusGetUint(FFDBusData* dbus, DBusMessageIter* iter, uint32_t* result); +bool ffDBusGetUint(FFDBusData* dbus, DBusMessageIter* iter, uint64_t* result); DBusMessage* ffDBusGetMethodReply(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface, const char* method, const char* arg1, const char* arg2); DBusMessage* ffDBusGetProperty(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface, const char* property); bool ffDBusGetPropertyString(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface, const char* property, FFstrbuf* result); -bool ffDBusGetInt(FFDBusData* dbus, DBusMessageIter* iter, int32_t* result); -bool ffDBusGetPropertyUint(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface, const char* property, uint32_t* result); +bool ffDBusGetInt(FFDBusData* dbus, DBusMessageIter* iter, int64_t* result); +bool ffDBusGetPropertyUint(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface, const char* property, uint64_t* result); void ffDBusDestroyData(FFDBusData* data); static inline DBusMessage* ffDBusGetAllProperties(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface) { diff --git a/src/common/impl/dbus.c b/src/common/impl/dbus.c index dfd8b87df..5b7ae7389 100644 --- a/src/common/impl/dbus.c +++ b/src/common/impl/dbus.c @@ -152,7 +152,7 @@ bool ffDBusGetBool(FFDBusData* dbus, DBusMessageIter* iter, bool* result) { return ffDBusGetBool(dbus, &subIter, result); } -bool ffDBusGetUint(FFDBusData* dbus, DBusMessageIter* iter, uint32_t* result) { +bool ffDBusGetUint(FFDBusData* dbus, DBusMessageIter* iter, uint64_t* result) { int argType = dbus->lib->ffdbus_message_iter_get_arg_type(iter); if (argType == DBUS_TYPE_BYTE) { @@ -170,6 +170,13 @@ bool ffDBusGetUint(FFDBusData* dbus, DBusMessageIter* iter, uint32_t* result) { } if (argType == DBUS_TYPE_UINT32) { + uint32_t value = 0; + dbus->lib->ffdbus_message_iter_get_basic(iter, &value); + *result = value; + return true; + } + + if (argType == DBUS_TYPE_UINT64) { dbus->lib->ffdbus_message_iter_get_basic(iter, result); return true; } @@ -183,7 +190,7 @@ bool ffDBusGetUint(FFDBusData* dbus, DBusMessageIter* iter, uint32_t* result) { return ffDBusGetUint(dbus, &subIter, result); } -bool ffDBusGetInt(FFDBusData* dbus, DBusMessageIter* iter, int32_t* result) { +bool ffDBusGetInt(FFDBusData* dbus, DBusMessageIter* iter, int64_t* result) { int argType = dbus->lib->ffdbus_message_iter_get_arg_type(iter); if (argType == DBUS_TYPE_INT16) { @@ -194,6 +201,13 @@ bool ffDBusGetInt(FFDBusData* dbus, DBusMessageIter* iter, int32_t* result) { } if (argType == DBUS_TYPE_INT32) { + int32_t value = 0; + dbus->lib->ffdbus_message_iter_get_basic(iter, &value); + *result = value; + return true; + } + + if (argType == DBUS_TYPE_INT64) { dbus->lib->ffdbus_message_iter_get_basic(iter, result); return true; } @@ -215,10 +229,17 @@ bool ffDBusGetInt(FFDBusData* dbus, DBusMessageIter* iter, int32_t* result) { if (argType == DBUS_TYPE_UINT32) { uint32_t value = 0; dbus->lib->ffdbus_message_iter_get_basic(iter, &value); - if (value > 0x7FFFFFFFu) { + *result = (int32_t) value; + return true; + } + + if (argType == DBUS_TYPE_UINT64) { + uint64_t value = 0; + dbus->lib->ffdbus_message_iter_get_basic(iter, &value); + if (value > INT64_MAX) { return false; } - *result = (int32_t) value; + *result = (int64_t) value; return true; } @@ -291,7 +312,7 @@ bool ffDBusGetPropertyString(FFDBusData* dbus, const char* busName, const char* return ret; } -bool ffDBusGetPropertyUint(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface, const char* property, uint32_t* result) { +bool ffDBusGetPropertyUint(FFDBusData* dbus, const char* busName, const char* objectPath, const char* interface, const char* property, uint64_t* result) { DBusMessage* reply = ffDBusGetProperty(dbus, busName, objectPath, interface, property); if (reply == NULL) { return false; diff --git a/src/common/impl/settings.c b/src/common/impl/settings.c index bd7da7424..a44a66fd3 100644 --- a/src/common/impl/settings.c +++ b/src/common/impl/settings.c @@ -220,10 +220,10 @@ FFvariant ffSettingsGetXFConf(const char* channelName, const char* propertyName, } if (type == FF_VARIANT_TYPE_INT) { - int32_t value; + int64_t value; if (ffDBusGetInt(&dbus, &rootIterator, &value)) { dbus.lib->ffdbus_message_unref(reply); - return (FFvariant) { .intValue = value }; + return (FFvariant) { .intValue = (int32_t) value }; } dbus.lib->ffdbus_message_unref(reply); return FF_VARIANT_NULL; @@ -295,10 +295,10 @@ FFvariant ffSettingsGetXFConfFirstMatch(const char* channelName, const char* pro dbus.lib->ffdbus_message_iter_next(&dictIterator); if (type == FF_VARIANT_TYPE_INT) { - int32_t value; + int64_t value; if (ffDBusGetInt(&dbus, &dictIterator, &value)) { dbus.lib->ffdbus_message_unref(reply); - return (FFvariant) { .intValue = value }; + return (FFvariant) { .intValue = (int32_t) value }; } dbus.lib->ffdbus_message_unref(reply); return FF_VARIANT_NULL; diff --git a/src/detection/bluetooth/bluetooth_linux.c b/src/detection/bluetooth/bluetooth_linux.c index a5adfcf70..8d0212755 100644 --- a/src/detection/bluetooth/bluetooth_linux.c +++ b/src/detection/bluetooth/bluetooth_linux.c @@ -69,7 +69,7 @@ static bool detectBluetoothValue(FFDBusData* dbus, DBusMessageIter* iter, FFBlue } else if (ffStrEquals(deviceProperty, "Icon")) { ffDBusGetString(dbus, &dictIter, &device->type); } else if (ffStrEquals(deviceProperty, "Percentage")) { - uint32_t percentage; + uint64_t percentage; if (ffDBusGetUint(dbus, &dictIter, &percentage)) { device->battery = (uint8_t) percentage; } diff --git a/src/detection/bluetoothradio/bluetoothradio_linux.c b/src/detection/bluetoothradio/bluetoothradio_linux.c index 0e545f0d4..5f5554a35 100644 --- a/src/detection/bluetoothradio/bluetoothradio_linux.c +++ b/src/detection/bluetoothradio/bluetoothradio_linux.c @@ -56,12 +56,15 @@ static const char* detectBluetoothProperty(FFBluetoothRadioResult* device, FFDBu } else if (ffStrEquals(deviceProperty, "Alias")) { ffDBusGetString(dbus, &dictIter, &device->name); } else if (ffStrEquals(deviceProperty, "Manufacturer")) { - uint32_t vendorId; + uint64_t vendorId; if (ffDBusGetUint(dbus, &dictIter, &vendorId)) { - ffStrbufSetStatic(&device->vendor, ffBluetoothRadioGetVendor(vendorId)); + ffStrbufSetStatic(&device->vendor, ffBluetoothRadioGetVendor((uint32_t) vendorId)); } } else if (ffStrEquals(deviceProperty, "Version")) { - ffDBusGetUint(dbus, &dictIter, (uint32_t*) &device->lmpVersion); + uint64_t version; + if (ffDBusGetUint(dbus, &dictIter, &version)) { + device->lmpVersion = (int32_t) version; + } } else if (ffStrEquals(deviceProperty, "Powered")) { ffDBusGetBool(dbus, &dictIter, &device->enabled); } else if (ffStrEquals(deviceProperty, "Discoverable")) {