15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/platform_file.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "dbus/file_descriptor.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace dbus {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FileDescriptor::~FileDescriptor() {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (owner_)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::ClosePlatformFile(value_);
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int FileDescriptor::value() const {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(valid_);
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value_;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int FileDescriptor::TakeValue() {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CHECK(valid_);  // NB: check first so owner_ is unchanged if this triggers
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  owner_ = false;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return value_;
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FileDescriptor::CheckValidity() {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::PlatformFileInfo info;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool ok = base::GetPlatformFileInfo(value_, &info);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  valid_ = (ok && !info.is_directory);
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace dbus
34