10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/*
20529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * Copyright (C) 2009 The Android Open Source Project
30529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
40529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * Licensed under the Apache License, Version 2.0 (the "License");
50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * you may not use this file except in compliance with the License.
60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * You may obtain a copy of the License at
70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *      http://www.apache.org/licenses/LICENSE-2.0
90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * Unless required by applicable law or agreed to in writing, software
110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * distributed under the License is distributed on an "AS IS" BASIS,
120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * See the License for the specific language governing permissions and
140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * limitations under the License.
150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#ifndef NATIVE_HANDLE_H_
180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#define NATIVE_HANDLE_H_
190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#ifdef __cplusplus
210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochextern "C" {
220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif
230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochtypedef struct native_handle
250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch{
260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    int version;        /* sizeof(native_handle_t) */
270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    int numFds;         /* number of file-descriptors at &data[0] */
280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    int numInts;        /* number of ints at &data[numFds] */
290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    int data[0];        /* numFds + numInts ints */
300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} native_handle_t;
310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/*
330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * native_handle_close
340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * closes the file descriptors contained in this native_handle_t
360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * return 0 on success, or a negative error code on failure
380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochint native_handle_close(const native_handle_t* h);
410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
420529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/*
440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * native_handle_create
450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * creates a native_handle_t and initializes it. must be destroyed with
470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * native_handle_delete().
480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnative_handle_t* native_handle_create(int numFds, int numInts);
510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch/*
530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * native_handle_delete
540529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * frees a native_handle_t allocated with native_handle_create().
560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * This ONLY frees the memory allocated for the native_handle_t, but doesn't
570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * close the file descriptors; which can be achieved with native_handle_close().
580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch * return 0 on success, or a negative error code on failure
600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch *
610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch */
620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochint native_handle_delete(native_handle_t* h);
630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
650529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#ifdef __cplusplus
660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif
680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif /* NATIVE_HANDLE_H_ */
70