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