@@ -162,6 +162,54 @@ bool ffDBusGetUint(FFDBusData* dbus, DBusMessageIter* iter, uint32_t* result)
162162 return ffDBusGetUint (dbus , & subIter , result );
163163}
164164
165+ bool ffDBusGetInt (FFDBusData * dbus , DBusMessageIter * iter , int32_t * result )
166+ {
167+ int argType = dbus -> lib -> ffdbus_message_iter_get_arg_type (iter );
168+
169+ if (argType == DBUS_TYPE_INT16 )
170+ {
171+ int16_t value = 0 ;
172+ dbus -> lib -> ffdbus_message_iter_get_basic (iter , & value );
173+ * result = value ;
174+ return true;
175+ }
176+
177+ if (argType == DBUS_TYPE_INT32 )
178+ {
179+ dbus -> lib -> ffdbus_message_iter_get_basic (iter , result );
180+ return true;
181+ }
182+
183+ if (argType == DBUS_TYPE_BYTE )
184+ {
185+ uint8_t value = 0 ;
186+ dbus -> lib -> ffdbus_message_iter_get_basic (iter , & value );
187+ * result = value ;
188+ return true;
189+ }
190+
191+ if (argType == DBUS_TYPE_UINT16 )
192+ {
193+ uint16_t value = 0 ;
194+ dbus -> lib -> ffdbus_message_iter_get_basic (iter , & value );
195+ * result = (int16_t ) value ;
196+ return true;
197+ }
198+
199+ if (argType == DBUS_TYPE_UINT32 )
200+ {
201+ dbus -> lib -> ffdbus_message_iter_get_basic (iter , result );
202+ return true;
203+ }
204+
205+ if (argType != DBUS_TYPE_VARIANT )
206+ return false;
207+
208+ DBusMessageIter subIter ;
209+ dbus -> lib -> ffdbus_message_iter_recurse (iter , & subIter );
210+ return ffDBusGetInt (dbus , & subIter , result );
211+ }
212+
165213DBusMessage * ffDBusGetMethodReply (FFDBusData * dbus , const char * busName , const char * objectPath , const char * interface , const char * method , const char * arg1 , const char * arg2 )
166214{
167215 DBusMessage * message = dbus -> lib -> ffdbus_message_new_method_call (busName , objectPath , interface , method );
0 commit comments