2015-02-02 1 views
0

Мой трассировки стека выглядит следующим образомКак безопасно использовать g_variant_iter_loop с данными, полученными с помощью Dbus

/usr/lib/libglib-2.0.so.0(g_variant_iter_loop+0xb4) 
/usr/lib/libglib-2.0.so.0(g_variant_get_int32+0x1c) 
/usr/lib/libglib-2.0.so.0(g_variant_type_is_subtype_of+0x3c) 

и код для него, как:

while ((NULL != iterator) && (true == g_variant_iter_loop (iterator, "y", &extractedValue))) 
{ 
    // do something with extractedValue 
} 

Данные, полученные с помощью Dbus с использованием GVariant , Возможно, я неправильно использую API-интерфейс glib, но это не работает только в 1% случаев. Я делаю что-то не так, или я что-то упускаю?

+0

Я не знаю, какие ошибки вы получаете, но документация https://developer.gnome.org/glib/stable/glib -GVariant.html # g-variant-iter-loop рекомендует g_variant_iter_next для целых и строковых типов. – alvaropg

ответ

0

Когда ожидается только один элемент, лучше использовать

if(iter != NULL) { 
    g_variant_iter_next (iterator, "u", &value); 
}