13fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian/* 23fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian * Copyright (C) 2007 The Android Open Source Project 33fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian * 43fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License"); 53fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian * you may not use this file except in compliance with the License. 63fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian * You may obtain a copy of the License at 73fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian * 83fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian * http://www.apache.org/licenses/LICENSE-2.0 93fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian * 103fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian * Unless required by applicable law or agreed to in writing, software 113fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS, 123fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian * See the License for the specific language governing permissions and 143fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian * limitations under the License. 153fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian */ 163fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian 173fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian#define LOG_TAG "NativeHandle" 183fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian 193fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian#include <stdint.h> 203fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian#include <errno.h> 213fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian#include <string.h> 223fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian#include <stdlib.h> 233fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian#include <unistd.h> 243fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian 253fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian#include <cutils/log.h> 263fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian#include <cutils/native_handle.h> 273fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian 283fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopiannative_handle_t* native_handle_create(int numFds, int numInts) 293fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian{ 303fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian native_handle_t* h = malloc( 313fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian sizeof(native_handle_t) + sizeof(int)*(numFds+numInts)); 323fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian 333fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian h->version = sizeof(native_handle_t); 343fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian h->numFds = numFds; 353fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian h->numInts = numInts; 363fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian return h; 373fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian} 383fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian 393fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopianint native_handle_delete(native_handle_t* h) 403fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian{ 413fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian if (h) { 423fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian if (h->version != sizeof(native_handle_t)) 433fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian return -EINVAL; 443fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian free(h); 453fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian } 463fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian return 0; 473fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian} 483fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian 493fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopianint native_handle_close(const native_handle_t* h) 503fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian{ 513fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian if (h->version != sizeof(native_handle_t)) 523fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian return -EINVAL; 533fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian 543fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian const int numFds = h->numFds; 553fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian int i; 563fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian for (i=0 ; i<numFds ; i++) { 573fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian close(h->data[i]); 583fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian } 593fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian return 0; 603fc51ba17d33c38d327d875d973e787b4dd076b6Mathias Agopian} 61