diff options
author | davemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-25 17:26:46 +0000 |
---|---|---|
committer | davemoore@chromium.org <davemoore@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-25 17:26:46 +0000 |
commit | 49cdf6e74c459160788dc9fce00500e13d0d641d (patch) | |
tree | a41e04522e3e1e9d8eb125b56128deda6265e9f5 /dbus | |
parent | 9a30138488ad8c03d0ab2f439109cdb6df034031 (diff) | |
download | chromium_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.cc | 27 | ||||
-rw-r--r-- | dbus/message.h | 5 |
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, µ); + 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 |