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