summaryrefslogtreecommitdiffstats
path: root/dbus
diff options
context:
space:
mode:
authordavemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-25 17:26:46 +0000
committerdavemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-25 17:26:46 +0000
commit49cdf6e74c459160788dc9fce00500e13d0d641d (patch)
treea41e04522e3e1e9d8eb125b56128deda6265e9f5 /dbus
parent9a30138488ad8c03d0ab2f439109cdb6df034031 (diff)
downloadchromium_src-49cdf6e74c459160788dc9fce00500e13d0d641d.zip
chromium_src-49cdf6e74c459160788dc9fce00500e13d0d641d.tar.gz
chromium_src-49cdf6e74c459160788dc9fce00500e13d0d641d.tar.bz2
Make dbus file descriptor check dynamic
Without this change cros builds from outside the chroot can't run tracing code. BUG=None TEST=None Review URL: https://chromiumcodereview.appspot.com/10815083 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148351 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'dbus')
-rw-r--r--dbus/message.cc27
-rw-r--r--dbus/message.h5
2 files changed, 19 insertions, 13 deletions
diff --git a/dbus/message.cc b/dbus/message.cc
index fd7c077..7a1db05 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, &micro);
+ 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);
diff --git a/dbus/message.h b/dbus/message.h
index 4d32cb9..e0845de 100644
--- a/dbus/message.h
+++ b/dbus/message.h
@@ -28,10 +28,7 @@ class MessageWriter;
class MessageReader;
// DBUS_TYPE_UNIX_FD was added in D-Bus version 1.4
-#if defined(DBUS_TYPE_UNIX_FD)
-const bool kDBusTypeUnixFdIsSupported = true;
-#else
-const bool kDBusTypeUnixFdIsSupported = false;
+#if !defined(DBUS_TYPE_UNIX_FD)
#define DBUS_TYPE_UNIX_FD ((int) 'h')
#endif