Author: lslezak Date: Wed Jul 16 10:00:38 2008 New Revision: 49140 URL: http://svn.opensuse.org/viewcvs/yast?rev=49140&view=rev Log: - pass a complete struct for nil value - SCR::Dir must return YCPList Modified: branches/tmp/lslezak/workshop/core/scr/src/DBusMsg.cc branches/tmp/lslezak/workshop/core/scr/src/DBusMsg.h branches/tmp/lslezak/workshop/core/scr/src/DBusServer.cc Modified: branches/tmp/lslezak/workshop/core/scr/src/DBusMsg.cc URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/lslezak/workshop/core/scr/src/DBusMsg.cc?rev=49140&r1=49139&r2=49140&view=diff ============================================================================== --- branches/tmp/lslezak/workshop/core/scr/src/DBusMsg.cc (original) +++ branches/tmp/lslezak/workshop/core/scr/src/DBusMsg.cc Wed Jul 16 10:00:38 2008 @@ -354,8 +354,9 @@ return true; } -bool DBusMsg::addYCPValue(const YCPValue &val, DBusMessageIter *i) +bool DBusMsg::addYCPValue(const YCPValue &v, DBusMessageIter *i) { + YCPValue val = v; // create sub iterator for STRUCT container DBusMessageIter sub; @@ -371,9 +372,9 @@ if (nil_flag) { - // FIXME: can we omit the other values?? - dbus_message_iter_close_container(i, &sub); - return true; + // insert dummy YCPBoolean(false) just to keep the content + // consistent with the signature, the value must be ignored + val = YCPBoolean(false); } // add variable type @@ -607,8 +608,6 @@ YCPValue DBusMsg::getYCPValue(DBusMessageIter *it) { - YCPValue ret; - int type = dbus_message_iter_get_arg_type(it); y2milestone("Found DBus type: %d (%c)", type, (char)type); @@ -622,6 +621,7 @@ dbus_message_iter_recurse(it, &struct_iter); type = dbus_message_iter_get_arg_type(&struct_iter); + bool received_nil = false; // read the nil flag at the beginning if (type == DBUS_TYPE_BOOLEAN) @@ -634,7 +634,7 @@ if (b) { y2milestone("HEADER: Received nil value"); - return YCPVoid(); + received_nil = true; } } else @@ -675,7 +675,9 @@ DBusMessageIter variant_iter; dbus_message_iter_recurse(&struct_iter, &variant_iter); - return getYCPValueRaw(&variant_iter, ycp_type); + YCPValue ret = getYCPValueRaw(&variant_iter, ycp_type); + + return (received_nil) ? YCPVoid() : ret; } YCPValue DBusMsg::getYCPValue(int index) Modified: branches/tmp/lslezak/workshop/core/scr/src/DBusMsg.h URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/lslezak/workshop/core/scr/src/DBusMsg.h?rev=49140&r1=49139&r2=49140&view=diff ============================================================================== --- branches/tmp/lslezak/workshop/core/scr/src/DBusMsg.h (original) +++ branches/tmp/lslezak/workshop/core/scr/src/DBusMsg.h Wed Jul 16 10:00:38 2008 @@ -62,7 +62,7 @@ bool addValue(int type, void* data); bool addValue(int type, void* data, DBusMessageIter *i); - bool addYCPValue(const YCPValue &val, DBusMessageIter *i); + bool addYCPValue(const YCPValue &v, DBusMessageIter *i); bool addYCPValueRaw(const YCPValue &val, DBusMessageIter *i); void release(); DBusMessage *msg; Modified: branches/tmp/lslezak/workshop/core/scr/src/DBusServer.cc URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/lslezak/workshop/core/scr/src/DBusServer.cc?rev=49140&r1=49139&r2=49140&view=diff ============================================================================== --- branches/tmp/lslezak/workshop/core/scr/src/DBusServer.cc (original) +++ branches/tmp/lslezak/workshop/core/scr/src/DBusServer.cc Wed Jul 16 10:00:38 2008 @@ -141,7 +141,11 @@ else if (method == "Execute") ret = sa->Execute(pth, arg, opt); else if (method == "Dir") + { ret = sa->Dir(pth); + if (ret.isNull()) + ret = YCPList(); + } else if (method == "Error") ret = sa->Error(pth); else if (method == "UnregisterAgent") @@ -164,6 +168,8 @@ y2milestone("Result: %s", ret->toString().c_str()); reply.addYCPValue(ret); } + else + reply.addYCPValue(YCPVoid()); } } } -- To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org For additional commands, e-mail: yast-commit+help@opensuse.org