15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 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)#ifndef IPC_IPC_PLATFORM_FILE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define IPC_IPC_PLATFORM_FILE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h"
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/files/file.h"
10a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "base/process/process.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_export.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_POSIX)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_descriptor_posix.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace IPC {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef base::PlatformFile PlatformFileForTransit;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef base::FileDescriptor PlatformFileForTransit;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)inline PlatformFileForTransit InvalidPlatformFileForTransit() {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return INVALID_HANDLE_VALUE;
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return base::FileDescriptor();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)inline base::PlatformFile PlatformFileForTransitToPlatformFile(
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const PlatformFileForTransit& transit) {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return transit;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return transit.fd;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochinline base::File PlatformFileForTransitToFile(
43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    const PlatformFileForTransit& transit) {
44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OS_WIN)
45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return base::File(transit);
46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#elif defined(OS_POSIX)
47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  return base::File(transit.fd);
48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif
49effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
50effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns a file handle equivalent to |file| that can be used in |process|.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IPC_EXPORT PlatformFileForTransit GetFileHandleForProcess(
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::PlatformFile file,
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::ProcessHandle process,
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    bool close_source_handle);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Returns a file handle equivalent to |file| that can be used in |process|.
58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Note that this function takes ownership of |file|.
59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)IPC_EXPORT PlatformFileForTransit TakeFileHandleForProcess(
60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    base::File file,
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    base::ProcessHandle process);
62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace IPC
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // IPC_IPC_PLATFORM_FILE_H_
66