blob: 40bfa0da189b59cecf9b13d69018e6baffc3f334 [file] [log] [blame]
jcivelli@chromium.org3bab1032011-06-15 04:35:10 +09001// Copyright (c) 2011 The Chromium Authors. All rights reserved.
estade@chromium.org3ac32062009-11-17 07:55:17 +09002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef IPC_IPC_PLATFORM_FILE_H_
6#define IPC_IPC_PLATFORM_FILE_H_
7
8#include "base/basictypes.h"
rvargas@chromium.org9e469f62014-01-28 06:36:00 +09009#include "base/files/file.h"
rsesek@chromium.org19319712013-07-24 14:15:24 +090010#include "base/process/process.h"
darin@chromium.org80e4c5e2011-08-16 05:41:46 +090011#include "ipc/ipc_export.h"
estade@chromium.org3ac32062009-11-17 07:55:17 +090012
13#if defined(OS_POSIX)
14#include "base/file_descriptor_posix.h"
15#endif
16
17namespace IPC {
18
19#if defined(OS_WIN)
20typedef base::PlatformFile PlatformFileForTransit;
21#elif defined(OS_POSIX)
22typedef base::FileDescriptor PlatformFileForTransit;
23#endif
24
estade@chromium.orgd9963452009-12-18 09:23:05 +090025inline PlatformFileForTransit InvalidPlatformFileForTransit() {
26#if defined(OS_WIN)
rvargas@chromium.org01585f22014-06-10 21:58:29 +090027 return INVALID_HANDLE_VALUE;
estade@chromium.orgd9963452009-12-18 09:23:05 +090028#elif defined(OS_POSIX)
29 return base::FileDescriptor();
30#endif
31}
32
estade@chromium.org3ac32062009-11-17 07:55:17 +090033inline base::PlatformFile PlatformFileForTransitToPlatformFile(
34 const PlatformFileForTransit& transit) {
35#if defined(OS_WIN)
36 return transit;
37#elif defined(OS_POSIX)
38 return transit.fd;
39#endif
40}
41
rvargas@chromium.org5e1b33d2014-03-25 15:01:48 +090042inline base::File PlatformFileForTransitToFile(
43 const PlatformFileForTransit& transit) {
44#if defined(OS_WIN)
45 return base::File(transit);
46#elif defined(OS_POSIX)
47 return base::File(transit.fd);
48#endif
49}
50
jcivelli@chromium.org3bab1032011-06-15 04:35:10 +090051// Returns a file handle equivalent to |file| that can be used in |process|.
darin@chromium.org80e4c5e2011-08-16 05:41:46 +090052IPC_EXPORT PlatformFileForTransit GetFileHandleForProcess(
53 base::PlatformFile file,
54 base::ProcessHandle process,
55 bool close_source_handle);
jcivelli@chromium.org3bab1032011-06-15 04:35:10 +090056
rvargas@chromium.orgf40fe382014-03-06 05:13:49 +090057// Returns a file handle equivalent to |file| that can be used in |process|.
58// Note that this function takes ownership of |file|.
59IPC_EXPORT PlatformFileForTransit TakeFileHandleForProcess(
60 base::File file,
61 base::ProcessHandle process);
62
estade@chromium.org3ac32062009-11-17 07:55:17 +090063} // namespace IPC
64
65#endif // IPC_IPC_PLATFORM_FILE_H_