153a5a1b3Sopenharmony_ci#ifndef foopulsememhfoo
253a5a1b3Sopenharmony_ci#define foopulsememhfoo
353a5a1b3Sopenharmony_ci
453a5a1b3Sopenharmony_ci/***
553a5a1b3Sopenharmony_ci  This file is part of PulseAudio.
653a5a1b3Sopenharmony_ci
753a5a1b3Sopenharmony_ci  Copyright 2016 Ahmed S. Darwish <darwish.07@gmail.com>
853a5a1b3Sopenharmony_ci
953a5a1b3Sopenharmony_ci  PulseAudio is free software; you can redistribute it and/or modify
1053a5a1b3Sopenharmony_ci  it under the terms of the GNU Lesser General Public License as
1153a5a1b3Sopenharmony_ci  published by the Free Software Foundation; either version 2.1 of the
1253a5a1b3Sopenharmony_ci  License, or (at your option) any later version.
1353a5a1b3Sopenharmony_ci
1453a5a1b3Sopenharmony_ci  PulseAudio is distributed in the hope that it will be useful, but
1553a5a1b3Sopenharmony_ci  WITHOUT ANY WARRANTY; without even the implied warranty of
1653a5a1b3Sopenharmony_ci  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1753a5a1b3Sopenharmony_ci  Lesser General Public License for more details.
1853a5a1b3Sopenharmony_ci
1953a5a1b3Sopenharmony_ci  You should have received a copy of the GNU Lesser General Public
2053a5a1b3Sopenharmony_ci  License along with PulseAudio; if not, see <http://www.gnu.org/licenses/>.
2153a5a1b3Sopenharmony_ci***/
2253a5a1b3Sopenharmony_ci
2353a5a1b3Sopenharmony_ci#include <stdbool.h>
2453a5a1b3Sopenharmony_ci
2553a5a1b3Sopenharmony_ci#include <pulsecore/creds.h>
2653a5a1b3Sopenharmony_ci#include <pulsecore/macro.h>
2753a5a1b3Sopenharmony_ci
2853a5a1b3Sopenharmony_citypedef enum pa_mem_type {
2953a5a1b3Sopenharmony_ci    PA_MEM_TYPE_SHARED_POSIX,         /* Data is shared and created using POSIX shm_open() */
3053a5a1b3Sopenharmony_ci    PA_MEM_TYPE_SHARED_MEMFD,         /* Data is shared and created using Linux memfd_create() */
3153a5a1b3Sopenharmony_ci    PA_MEM_TYPE_PRIVATE,              /* Data is private and created using classic memory allocation
3253a5a1b3Sopenharmony_ci                                         (posix_memalign(), malloc() or anonymous mmap()) */
3353a5a1b3Sopenharmony_ci} pa_mem_type_t;
3453a5a1b3Sopenharmony_ci
3553a5a1b3Sopenharmony_cistatic inline const char *pa_mem_type_to_string(pa_mem_type_t type) {
3653a5a1b3Sopenharmony_ci    switch (type) {
3753a5a1b3Sopenharmony_ci    case PA_MEM_TYPE_SHARED_POSIX:
3853a5a1b3Sopenharmony_ci        return "shared posix-shm";
3953a5a1b3Sopenharmony_ci    case PA_MEM_TYPE_SHARED_MEMFD:
4053a5a1b3Sopenharmony_ci        return "shared memfd";
4153a5a1b3Sopenharmony_ci    case PA_MEM_TYPE_PRIVATE:
4253a5a1b3Sopenharmony_ci        return "private";
4353a5a1b3Sopenharmony_ci    }
4453a5a1b3Sopenharmony_ci
4553a5a1b3Sopenharmony_ci    pa_assert_not_reached();
4653a5a1b3Sopenharmony_ci}
4753a5a1b3Sopenharmony_ci
4853a5a1b3Sopenharmony_cistatic inline bool pa_mem_type_is_shared(pa_mem_type_t t) {
4953a5a1b3Sopenharmony_ci    return (t == PA_MEM_TYPE_SHARED_POSIX) || (t == PA_MEM_TYPE_SHARED_MEMFD);
5053a5a1b3Sopenharmony_ci}
5153a5a1b3Sopenharmony_ci
5253a5a1b3Sopenharmony_cistatic inline bool pa_memfd_is_locally_supported(void) {
5353a5a1b3Sopenharmony_ci#if defined(HAVE_CREDS) && defined(HAVE_MEMFD)
5453a5a1b3Sopenharmony_ci    return true;
5553a5a1b3Sopenharmony_ci#else
5653a5a1b3Sopenharmony_ci    return false;
5753a5a1b3Sopenharmony_ci#endif
5853a5a1b3Sopenharmony_ci}
5953a5a1b3Sopenharmony_ci
6053a5a1b3Sopenharmony_ci#endif
61