Loading include/cutils/native_handle.h +45 −2 Original line number Diff line number Diff line Loading @@ -17,12 +17,55 @@ #ifndef NATIVE_HANDLE_H_ #define NATIVE_HANDLE_H_ #include <sys/cdefs.h> __BEGIN_DECLS typedef struct { int version; /* sizeof(native_handle) */ int version; /* sizeof(native_handle_t) */ int numFds; /* number of file-descriptors at &data[0] */ int numInts; /* number of ints at &data[numFds] */ int data[0]; /* numFds + numInts ints */ } native_handle; } native_handle_t; /* keep the old definition for backward source-compatibility */ typedef native_handle_t native_handle; /* * native_handle_close * * closes the file descriptors contained in this native_handle_t * * return 0 on success, or a negative error code on failure * */ int native_handle_close(const native_handle_t* h); /* * native_handle_create * * creates a native_handle_t and initializes it. must be destroyed with * native_handle_delete(). * */ native_handle_t* native_handle_create(int numFds, int numInts); /* * native_handle_delete * * frees a native_handle_t allocated with native_handle_create(). * This ONLY frees the memory allocated for the native_handle_t, but doesn't * close the file descriptors; which can be achieved with native_handle_close(). * * return 0 on success, or a negative error code on failure * */ int native_handle_delete(native_handle_t* h); __END_DECLS #endif /* NATIVE_HANDLE_H_ */ libcutils/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ commonSources := \ array.c \ hashmap.c \ atomic.c \ native_handle.c \ buffer.c \ socket_inaddr_any_server.c \ socket_local_client.c \ Loading libcutils/native_handle.c 0 → 100644 +60 −0 Original line number Diff line number Diff line /* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #define LOG_TAG "NativeHandle" #include <stdint.h> #include <errno.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <cutils/log.h> #include <cutils/native_handle.h> native_handle_t* native_handle_create(int numFds, int numInts) { native_handle_t* h = malloc( sizeof(native_handle_t) + sizeof(int)*(numFds+numInts)); h->version = sizeof(native_handle_t); h->numFds = numFds; h->numInts = numInts; return h; } int native_handle_delete(native_handle_t* h) { if (h) { if (h->version != sizeof(native_handle_t)) return -EINVAL; free(h); } return 0; } int native_handle_close(const native_handle_t* h) { if (h->version != sizeof(native_handle_t)) return -EINVAL; const int numFds = h->numFds; int i; for (i=0 ; i<numFds ; i++) { close(h->data[i]); } return 0; } Loading
include/cutils/native_handle.h +45 −2 Original line number Diff line number Diff line Loading @@ -17,12 +17,55 @@ #ifndef NATIVE_HANDLE_H_ #define NATIVE_HANDLE_H_ #include <sys/cdefs.h> __BEGIN_DECLS typedef struct { int version; /* sizeof(native_handle) */ int version; /* sizeof(native_handle_t) */ int numFds; /* number of file-descriptors at &data[0] */ int numInts; /* number of ints at &data[numFds] */ int data[0]; /* numFds + numInts ints */ } native_handle; } native_handle_t; /* keep the old definition for backward source-compatibility */ typedef native_handle_t native_handle; /* * native_handle_close * * closes the file descriptors contained in this native_handle_t * * return 0 on success, or a negative error code on failure * */ int native_handle_close(const native_handle_t* h); /* * native_handle_create * * creates a native_handle_t and initializes it. must be destroyed with * native_handle_delete(). * */ native_handle_t* native_handle_create(int numFds, int numInts); /* * native_handle_delete * * frees a native_handle_t allocated with native_handle_create(). * This ONLY frees the memory allocated for the native_handle_t, but doesn't * close the file descriptors; which can be achieved with native_handle_close(). * * return 0 on success, or a negative error code on failure * */ int native_handle_delete(native_handle_t* h); __END_DECLS #endif /* NATIVE_HANDLE_H_ */
libcutils/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ commonSources := \ array.c \ hashmap.c \ atomic.c \ native_handle.c \ buffer.c \ socket_inaddr_any_server.c \ socket_local_client.c \ Loading
libcutils/native_handle.c 0 → 100644 +60 −0 Original line number Diff line number Diff line /* * Copyright (C) 2007 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #define LOG_TAG "NativeHandle" #include <stdint.h> #include <errno.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <cutils/log.h> #include <cutils/native_handle.h> native_handle_t* native_handle_create(int numFds, int numInts) { native_handle_t* h = malloc( sizeof(native_handle_t) + sizeof(int)*(numFds+numInts)); h->version = sizeof(native_handle_t); h->numFds = numFds; h->numInts = numInts; return h; } int native_handle_delete(native_handle_t* h) { if (h) { if (h->version != sizeof(native_handle_t)) return -EINVAL; free(h); } return 0; } int native_handle_close(const native_handle_t* h) { if (h->version != sizeof(native_handle_t)) return -EINVAL; const int numFds = h->numFds; int i; for (i=0 ; i<numFds ; i++) { close(h->data[i]); } return 0; }