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

Commit c0660668 authored by Steven Moreland's avatar Steven Moreland
Browse files

libcutils: Implement ashmem_valid on host.

Was missing.

Bug: 124524556
Test: build host code with dependency on this
Change-Id: I0074923e9ec53e42f9479fff47df0a24c8750164
parent a9ffef27
Loading
Loading
Loading
Loading
+24 −12
Original line number Diff line number Diff line
@@ -34,6 +34,29 @@

#include <utils/Compat.h>

static bool ashmem_validate_stat(int fd, struct stat* buf) {
    int result = fstat(fd, buf);
    if (result == -1) {
        return false;
    }

    /*
     * Check if this is an "ashmem" region.
     * TODO: This is very hacky, and can easily break.
     * We need some reliable indicator.
     */
    if (!(buf->st_nlink == 0 && S_ISREG(buf->st_mode))) {
        errno = ENOTTY;
        return false;
    }
    return true;
}

int ashmem_valid(int fd) {
    struct stat buf;
    return ashmem_validate_stat(fd, &buf);
}

int ashmem_create_region(const char* /*ignored*/, size_t size) {
    char pattern[PATH_MAX];
    snprintf(pattern, sizeof(pattern), "/tmp/android-ashmem-%d-XXXXXXXXX", getpid());
@@ -65,18 +88,7 @@ int ashmem_unpin_region(int /*fd*/, size_t /*offset*/, size_t /*len*/) {
int ashmem_get_size_region(int fd)
{
    struct stat buf;
    int result = fstat(fd, &buf);
    if (result == -1) {
        return -1;
    }

    /*
     * Check if this is an "ashmem" region.
     * TODO: This is very hacky, and can easily break.
     * We need some reliable indicator.
     */
    if (!(buf.st_nlink == 0 && S_ISREG(buf.st_mode))) {
        errno = ENOTTY;
    if (!ashmem_validate_stat(fd, &buf)) {
        return -1;
    }