Skip to content
Snippets Groups Projects
  • Ludovico de Nittis's avatar
    d7ad67a2
    Initial support for custom graphics provider path and Flatpak · d7ad67a2
    Ludovico de Nittis authored
    
    pressure-vessel had a few hard coded assumptions about the host system
    and where to look at for the graphics provider.
    
    For example it was assumed that the root was the same host system used
    by both pressure-vessel current environment (where pressure-vessel-wrap
    runs) and also later on by `bwrap`.
    
    But when we run pressure-vessel in a Flatpak container, the final
    `bwrap` command is expected to be executed against the real host system
    (mounted in `/run/host`, in Flatpak).
    
    Also when we are in a Flatpak container we might want to pick the
    graphics stack from the host system (`/run/host`), from the Flatpak
    container itself or it could even be a completely separate one.
    (T22373, T22371)
    
    Signed-off-by: default avatarLudovico de Nittis <ludovico.denittis@collabora.com>
    d7ad67a2
    History
    Initial support for custom graphics provider path and Flatpak
    Ludovico de Nittis authored
    
    pressure-vessel had a few hard coded assumptions about the host system
    and where to look at for the graphics provider.
    
    For example it was assumed that the root was the same host system used
    by both pressure-vessel current environment (where pressure-vessel-wrap
    runs) and also later on by `bwrap`.
    
    But when we run pressure-vessel in a Flatpak container, the final
    `bwrap` command is expected to be executed against the real host system
    (mounted in `/run/host`, in Flatpak).
    
    Also when we are in a Flatpak container we might want to pick the
    graphics stack from the host system (`/run/host`), from the Flatpak
    container itself or it could even be a completely separate one.
    (T22373, T22371)
    
    Signed-off-by: default avatarLudovico de Nittis <ludovico.denittis@collabora.com>
utils.h 2.51 KiB
/*
 * Contains code taken from Flatpak.
 *
 * Copyright © 2014-2019 Red Hat, Inc
 * Copyright © 2017-2019 Collabora Ltd.
 *
 * SPDX-License-Identifier: LGPL-2.1-or-later
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this library; if not, see <http://www.gnu.org/licenses/>.
 */

#pragma once

#include <stdio.h>
#include <sys/types.h>

#include <glib.h>

#ifndef PR_GET_CHILD_SUBREAPER
#define PR_GET_CHILD_SUBREAPER 37
#endif

#ifndef PR_SET_CHILD_SUBREAPER
#define PR_SET_CHILD_SUBREAPER 36
#endif

void pv_avoid_gvfs (void);

int pv_envp_cmp (const void *p1,
                 const void *p2);

void pv_get_current_dirs (gchar **cwd_p,
                          gchar **cwd_l);

gboolean pv_is_same_file (const gchar *a,
                          const gchar *b);

void pv_search_path_append (GString *search_path,
                            const gchar *item);

gchar *pv_capture_output (const char * const * argv,
                          GError **error);

gpointer pv_hash_table_get_arbitrary_key (GHashTable *table);

gboolean pv_rm_rf (const char *directory);

gboolean pv_boolean_environment (const gchar *name,
                                 gboolean def);

FILE *pv_divert_stdout_to_stderr (GError **error);

void pv_async_signal_safe_error (const char *message,
                                 int exit_status) G_GNUC_NORETURN;

gchar *pv_get_random_uuid (GError **error);

gboolean pv_wait_for_child_processes (pid_t main_process,
                                      int *wait_status_out,
                                      GError **error);

gboolean pv_terminate_all_child_processes (GTimeSpan wait_period,
                                           GTimeSpan grace_period,
                                           GError **error);

gchar *pv_current_namespace_path_to_host_path (const gchar *current_env_path);

gboolean pv_file_test_in_sysroot (const char *sysroot,
                                  const char *filename,
                                  GFileTest test);