Index: dbus/message.cc |
diff --git a/dbus/message.cc b/dbus/message.cc |
index fd7c07710c4e089143f0342d3f9abe958cabcc93..7a1db0581c8161d9d9558324f7629150009b6297 100644 |
--- a/dbus/message.cc |
+++ b/dbus/message.cc |
@@ -18,9 +18,9 @@ namespace { |
// Appends the header name and the value to |output|, if the value is |
// not empty. |
-static void AppendStringHeader(const std::string& header_name, |
- const std::string& header_value, |
- std::string* output) { |
+void AppendStringHeader(const std::string& header_name, |
+ const std::string& header_value, |
+ std::string* output) { |
if (!header_value.empty()) { |
*output += header_name + ": " + header_value + "\n"; |
} |
@@ -28,15 +28,24 @@ static void AppendStringHeader(const std::string& header_name, |
// Appends the header name and the value to |output|, if the value is |
// nonzero. |
-static void AppendUint32Header(const std::string& header_name, |
- uint32 header_value, |
- std::string* output) { |
+void AppendUint32Header(const std::string& header_name, |
+ uint32 header_value, |
+ std::string* output) { |
if (header_value != 0) { |
*output += (header_name + ": " + base::StringPrintf("%u", header_value) + |
"\n"); |
} |
} |
+// Returns true if Unix FD passing is supported in libdbus. |
+// The check is done runtime rather than compile time as the libdbus |
+// version used at runtime may be different from the one used at compile time. |
+bool IsDBusTypeUnixFdSupported() { |
+ int major = 0, minor = 0, micro = 0; |
+ dbus_get_version(&major, &minor, µ); |
+ return major >= 1 && minor >= 4; |
+} |
+ |
} // namespace |
namespace dbus { |
@@ -211,7 +220,7 @@ std::string Message::ToStringInternal(const std::string& indent, |
break; |
} |
case UNIX_FD: { |
- CHECK(kDBusTypeUnixFdIsSupported); |
+ CHECK(IsDBusTypeUnixFdSupported()); |
FileDescriptor file_descriptor; |
if (!reader->PopFileDescriptor(&file_descriptor)) |
@@ -690,7 +699,7 @@ void MessageWriter::AppendVariantOfBasic(int dbus_type, const void* value) { |
} |
void MessageWriter::AppendFileDescriptor(const FileDescriptor& value) { |
- CHECK(kDBusTypeUnixFdIsSupported); |
+ CHECK(IsDBusTypeUnixFdSupported()); |
if (!value.is_valid()) { |
// NB: sending a directory potentially enables sandbox escape |
@@ -960,7 +969,7 @@ bool MessageReader::PopVariantOfBasic(int dbus_type, void* value) { |
} |
bool MessageReader::PopFileDescriptor(FileDescriptor* value) { |
- CHECK(kDBusTypeUnixFdIsSupported); |
+ CHECK(IsDBusTypeUnixFdSupported()); |
int fd = -1; |
const bool success = PopBasic(DBUS_TYPE_UNIX_FD, &fd); |