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