Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 83c351a6 authored by Chia-I Wu's avatar Chia-I Wu Committed by android-build-merger
Browse files

Merge "Add native_handle_clone" am: e8f6c739 am: 462e087e am: cb52dc25

am: ebebf019

Change-Id: Iefc37b74b98d265ab779c0ded9e4bbc3ee73ba2c
parents 41fd5277 ebebf019
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -56,6 +56,15 @@ int native_handle_close(const native_handle_t* h);
 */
native_handle_t* native_handle_create(int numFds, int numInts);

/*
 * native_handle_clone
 *
 * creates a native_handle_t and initializes it from another native_handle_t.
 * Must be destroyed with native_handle_delete().
 *
 */
native_handle_t* native_handle_clone(const native_handle_t* handle);

/*
 * native_handle_delete
 * 
+21 −0
Original line number Diff line number Diff line
@@ -44,6 +44,27 @@ native_handle_t* native_handle_create(int numFds, int numInts)
    return h;
}

native_handle_t* native_handle_clone(const native_handle_t* handle)
{
    native_handle_t* clone = native_handle_create(handle->numFds, handle->numInts);
    int i;

    for (i = 0; i < handle->numFds; i++) {
        clone->data[i] = dup(handle->data[i]);
        if (clone->data[i] < 0) {
            clone->numFds = i;
            native_handle_close(clone);
            native_handle_delete(clone);
            return NULL;
        }
    }

    memcpy(&clone->data[handle->numFds], &handle->data[handle->numFds],
            sizeof(int) * handle->numInts);

    return clone;
}

int native_handle_delete(native_handle_t* h)
{
    if (h) {