1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/* 2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Copyright (C) 2009 The Android Open Source Project 3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 4dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * you may not use this file except in compliance with the License. 6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * You may obtain a copy of the License at 7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 8dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * 10dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * See the License for the specific language governing permissions and 14dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * limitations under the License. 15dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */ 16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 17dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifndef NATIVE_HANDLE_H_ 18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define NATIVE_HANDLE_H_ 19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 20fee77ec093f78c1bb0ce85aa16d7ee8e8fa06f8aMathias Agopian#ifdef __cplusplus 21fee77ec093f78c1bb0ce85aa16d7ee8e8fa06f8aMathias Agopianextern "C" { 22fee77ec093f78c1bb0ce85aa16d7ee8e8fa06f8aMathias Agopian#endif 238f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian 243ffd793a1d6a134a5fde9eabd936614d1b02dcebIliyan Malchevtypedef struct native_handle 25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project{ 268f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian int version; /* sizeof(native_handle_t) */ 27dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int numFds; /* number of file-descriptors at &data[0] */ 28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int numInts; /* number of ints at &data[numFds] */ 29dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project int data[0]; /* numFds + numInts ints */ 308f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian} native_handle_t; 318f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian 328f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian/* 338f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * native_handle_close 348f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * 358f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * closes the file descriptors contained in this native_handle_t 368f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * 378f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * return 0 on success, or a negative error code on failure 388f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * 398f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian */ 408f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopianint native_handle_close(const native_handle_t* h); 418f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian 428f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian 438f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian/* 448f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * native_handle_create 458f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * 468f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * creates a native_handle_t and initializes it. must be destroyed with 478f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * native_handle_delete(). 488f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * 498f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian */ 508f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopiannative_handle_t* native_handle_create(int numFds, int numInts); 518f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian 528f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian/* 538f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * native_handle_delete 548f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * 558f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * frees a native_handle_t allocated with native_handle_create(). 568f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * This ONLY frees the memory allocated for the native_handle_t, but doesn't 578f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * close the file descriptors; which can be achieved with native_handle_close(). 588f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * 598f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * return 0 on success, or a negative error code on failure 608f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian * 618f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian */ 628f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopianint native_handle_delete(native_handle_t* h); 638f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian 648f13782e7b4a705484d7f97f07513781b82be0dcMathias Agopian 65fee77ec093f78c1bb0ce85aa16d7ee8e8fa06f8aMathias Agopian#ifdef __cplusplus 66fee77ec093f78c1bb0ce85aa16d7ee8e8fa06f8aMathias Agopian} 67fee77ec093f78c1bb0ce85aa16d7ee8e8fa06f8aMathias Agopian#endif 68dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project 69dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif /* NATIVE_HANDLE_H_ */ 70