提交 2d8b59c0 编写于 作者: D Daniel P. Berrange

systemd: avoid string comparisons on dbus error messages

Add a virDBusErrorIsUnknownMethod helper so that callers
don't need todo string comparisons themselves to detect
standard error names.
上级 d13b586a
...@@ -1244,6 +1244,7 @@ virDBusCreateMethod; ...@@ -1244,6 +1244,7 @@ virDBusCreateMethod;
virDBusCreateMethodV; virDBusCreateMethodV;
virDBusCreateReply; virDBusCreateReply;
virDBusCreateReplyV; virDBusCreateReplyV;
virDBusErrorIsUnknownMethod;
virDBusGetSessionBus; virDBusGetSessionBus;
virDBusGetSystemBus; virDBusGetSystemBus;
virDBusHasSystemBus; virDBusHasSystemBus;
......
...@@ -1894,3 +1894,12 @@ void virDBusMessageUnref(DBusMessage *msg ATTRIBUTE_UNUSED) ...@@ -1894,3 +1894,12 @@ void virDBusMessageUnref(DBusMessage *msg ATTRIBUTE_UNUSED)
/* nothing */ /* nothing */
} }
#endif /* ! WITH_DBUS */ #endif /* ! WITH_DBUS */
bool virDBusErrorIsUnknownMethod(virErrorPtr err)
{
return err->domain == VIR_FROM_DBUS &&
err->code == VIR_ERR_DBUS_SERVICE &&
err->level == VIR_ERR_ERROR &&
STREQ_NULLABLE("org.freedesktop.DBus.Error.UnknownMethod",
err->str1);
}
...@@ -74,4 +74,6 @@ void virDBusMessageUnref(DBusMessage *msg); ...@@ -74,4 +74,6 @@ void virDBusMessageUnref(DBusMessage *msg);
int virDBusIsServiceEnabled(const char *name); int virDBusIsServiceEnabled(const char *name);
int virDBusIsServiceRegistered(const char *name); int virDBusIsServiceRegistered(const char *name);
bool virDBusErrorIsUnknownMethod(virErrorPtr err);
#endif /* __VIR_DBUS_H__ */ #endif /* __VIR_DBUS_H__ */
...@@ -281,8 +281,7 @@ int virSystemdCreateMachine(const char *name, ...@@ -281,8 +281,7 @@ int virSystemdCreateMachine(const char *name,
goto cleanup; goto cleanup;
if (error.level == VIR_ERR_ERROR) { if (error.level == VIR_ERR_ERROR) {
if (STREQ_NULLABLE("org.freedesktop.DBus.Error.UnknownMethod", if (virDBusErrorIsUnknownMethod(&error)) {
error.str1)) {
VIR_INFO("CreateMachineWithNetwork isn't supported, switching " VIR_INFO("CreateMachineWithNetwork isn't supported, switching "
"to legacy CreateMachine method for systemd-machined"); "to legacy CreateMachine method for systemd-machined");
virResetError(&error); virResetError(&error);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册