Coverage Report

Created: 2025-08-28 06:24

/src/glib/glib/gspawn-private.h
Line
Count
Source (jump to first uncovered line)
1
/* gspawn.c - Process launching
2
 *
3
 *  Copyright 2000 Red Hat, Inc.
4
 *  g_execvpe implementation based on GNU libc execvp:
5
 *   Copyright 1991, 92, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
6
 *
7
 * SPDX-License-Identifier: LGPL-2.1-or-later
8
 *
9
 * This library is free software; you can redistribute it and/or
10
 * modify it under the terms of the GNU Lesser General Public
11
 * License as published by the Free Software Foundation; either
12
 * version 2.1 of the License, or (at your option) any later version.
13
 *
14
 * This library is distributed in the hope that it will be useful,
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17
 * Lesser General Public License for more details.
18
 *
19
 * You should have received a copy of the GNU Lesser General Public License
20
 * along with this library; if not, see <http://www.gnu.org/licenses/>.
21
 */
22
23
#include "config.h"
24
25
#include <errno.h>
26
27
#include "glibintl.h"
28
#include "gspawn.h"
29
30
/* Platform-specific implementation functions. */
31
gboolean g_spawn_sync_impl (const gchar           *working_directory,
32
                            gchar                **argv,
33
                            gchar                **envp,
34
                            GSpawnFlags            flags,
35
                            GSpawnChildSetupFunc   child_setup,
36
                            gpointer               user_data,
37
                            gchar                **standard_output,
38
                            gchar                **standard_error,
39
                            gint                  *wait_status,
40
                            GError               **error);
41
gboolean g_spawn_async_with_pipes_and_fds_impl (const gchar           *working_directory,
42
                                                const gchar * const   *argv,
43
                                                const gchar * const   *envp,
44
                                                GSpawnFlags            flags,
45
                                                GSpawnChildSetupFunc   child_setup,
46
                                                gpointer               user_data,
47
                                                gint                   stdin_fd,
48
                                                gint                   stdout_fd,
49
                                                gint                   stderr_fd,
50
                                                const gint            *source_fds,
51
                                                const gint            *target_fds,
52
                                                gsize                  n_fds,
53
                                                GPid                  *child_pid_out,
54
                                                gint                  *stdin_pipe_out,
55
                                                gint                  *stdout_pipe_out,
56
                                                gint                  *stderr_pipe_out,
57
                                                GError               **error);
58
gboolean g_spawn_check_wait_status_impl (gint     wait_status,
59
                                         GError **error);
60
void g_spawn_close_pid_impl (GPid pid);
61
62
static inline gint
63
_g_spawn_exec_err_to_g_error (gint en)
64
0
{
65
0
  switch (en)
66
0
    {
67
0
#ifdef EACCES
68
0
    case EACCES:
69
0
      return G_SPAWN_ERROR_ACCES;
70
0
#endif
71
72
0
#ifdef EPERM
73
0
    case EPERM:
74
0
      return G_SPAWN_ERROR_PERM;
75
0
#endif
76
77
0
#ifdef E2BIG
78
0
    case E2BIG:
79
0
      return G_SPAWN_ERROR_TOO_BIG;
80
0
#endif
81
82
0
#ifdef ENOEXEC
83
0
    case ENOEXEC:
84
0
      return G_SPAWN_ERROR_NOEXEC;
85
0
#endif
86
87
0
#ifdef ENAMETOOLONG
88
0
    case ENAMETOOLONG:
89
0
      return G_SPAWN_ERROR_NAMETOOLONG;
90
0
#endif
91
92
0
#ifdef ENOENT
93
0
    case ENOENT:
94
0
      return G_SPAWN_ERROR_NOENT;
95
0
#endif
96
97
0
#ifdef ENOMEM
98
0
    case ENOMEM:
99
0
      return G_SPAWN_ERROR_NOMEM;
100
0
#endif
101
102
0
#ifdef ENOTDIR
103
0
    case ENOTDIR:
104
0
      return G_SPAWN_ERROR_NOTDIR;
105
0
#endif
106
107
0
#ifdef ELOOP
108
0
    case ELOOP:
109
0
      return G_SPAWN_ERROR_LOOP;
110
0
#endif
111
112
#ifdef ETXTBUSY
113
    case ETXTBUSY:
114
      return G_SPAWN_ERROR_TXTBUSY;
115
#endif
116
117
0
#ifdef EIO
118
0
    case EIO:
119
0
      return G_SPAWN_ERROR_IO;
120
0
#endif
121
122
0
#ifdef ENFILE
123
0
    case ENFILE:
124
0
      return G_SPAWN_ERROR_NFILE;
125
0
#endif
126
127
0
#ifdef EMFILE
128
0
    case EMFILE:
129
0
      return G_SPAWN_ERROR_MFILE;
130
0
#endif
131
132
0
#ifdef EINVAL
133
0
    case EINVAL:
134
0
      return G_SPAWN_ERROR_INVAL;
135
0
#endif
136
137
0
#ifdef EISDIR
138
0
    case EISDIR:
139
0
      return G_SPAWN_ERROR_ISDIR;
140
0
#endif
141
142
0
#ifdef ELIBBAD
143
0
    case ELIBBAD:
144
0
      return G_SPAWN_ERROR_LIBBAD;
145
0
#endif
146
147
0
    default:
148
0
      return G_SPAWN_ERROR_FAILED;
149
0
    }
150
0
}
Unexecuted instantiation: gspawn.c:_g_spawn_exec_err_to_g_error
Unexecuted instantiation: gspawn-posix.c:_g_spawn_exec_err_to_g_error
151
152
static inline gboolean
153
_g_spawn_invalid_source_fd (gint         fd,
154
                            const gint  *source_fds,
155
                            gsize        n_fds,
156
                            GError     **error)
157
0
{
158
0
  gsize i;
159
160
0
  for (i = 0; i < n_fds; i++)
161
0
    if (fd == source_fds[i])
162
0
      {
163
0
        g_set_error (error,
164
0
                     G_SPAWN_ERROR,
165
0
                     G_SPAWN_ERROR_INVAL,
166
0
                     _("Invalid source FDs argument"));
167
0
        return TRUE;
168
0
      }
169
170
0
  return FALSE;
171
0
}
Unexecuted instantiation: gspawn.c:_g_spawn_invalid_source_fd
Unexecuted instantiation: gspawn-posix.c:_g_spawn_invalid_source_fd