Coverage Report

Created: 2025-08-24 07:10

/src/glib/glib/glib-private.h
Line
Count
Source (jump to first uncovered line)
1
/* glib-private.h - GLib-internal private API, shared between glib, gobject, gio
2
 * Copyright (C) 2011 Red Hat, Inc.
3
 *
4
 * This library is free software; you can redistribute it and/or
5
 * modify it under the terms of the GNU Lesser General Public
6
 * License as published by the Free Software Foundation; either
7
 * version 2.1 of the License, or (at your option) any later version.
8
 *
9
 * This library is distributed in the hope that it will be useful,
10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
 * Lesser General Public License for more details.
13
 *
14
 * You should have received a copy of the GNU Lesser General Public License
15
 * along with this library; if not, see <http://www.gnu.org/licenses/>.
16
 */
17
18
#ifndef __GLIB_PRIVATE_H__
19
#define __GLIB_PRIVATE_H__
20
21
#include <glib.h>
22
#include "gwakeup.h"
23
#include "gstdioprivate.h"
24
25
/* gcc defines __SANITIZE_ADDRESS__, clang sets the address_sanitizer
26
 * feature flag */
27
#if defined(__SANITIZE_ADDRESS__) || g_macro__has_feature(address_sanitizer)
28
29
/*
30
 * %_GLIB_ADDRESS_SANITIZER:
31
 *
32
 * Private macro defined if the AddressSanitizer is in use.
33
 */
34
#define _GLIB_ADDRESS_SANITIZER
35
36
#include <sanitizer/lsan_interface.h>
37
38
#endif
39
40
/*
41
 * g_ignore_leak:
42
 * @p: any pointer
43
 *
44
 * Tell AddressSanitizer and similar tools that if the object pointed to
45
 * by @p is leaked, it is not a problem. Use this to suppress memory leak
46
 * reports when a potentially unreachable pointer is deliberately not
47
 * going to be deallocated.
48
 */
49
static inline void
50
g_ignore_leak (gconstpointer p)
51
0
{
52
#ifdef _GLIB_ADDRESS_SANITIZER
53
  if (p != NULL)
54
    __lsan_ignore_object (p);
55
#endif
56
0
}
Unexecuted instantiation: gresource.c:g_ignore_leak
Unexecuted instantiation: gtask.c:g_ignore_leak
Unexecuted instantiation: gvfs.c:g_ignore_leak
Unexecuted instantiation: glocalfile.c:g_ignore_leak
Unexecuted instantiation: glocalfileenumerator.c:g_ignore_leak
Unexecuted instantiation: glocalfileinfo.c:g_ignore_leak
Unexecuted instantiation: glocalfileinputstream.c:g_ignore_leak
Unexecuted instantiation: glocalfilemonitor.c:g_ignore_leak
Unexecuted instantiation: glocalfileoutputstream.c:g_ignore_leak
Unexecuted instantiation: glocalfileiostream.c:g_ignore_leak
Unexecuted instantiation: thumbnail-verify.c:g_ignore_leak
Unexecuted instantiation: gcancellable.c:g_ignore_leak
Unexecuted instantiation: gcontextspecificgroup.c:g_ignore_leak
Unexecuted instantiation: giomodule.c:g_ignore_leak
Unexecuted instantiation: gdbusaddress.c:g_ignore_leak
Unexecuted instantiation: gdbusauthmechanismsha1.c:g_ignore_leak
Unexecuted instantiation: gsettingsschema.c:g_ignore_leak
Unexecuted instantiation: gsubprocess.c:g_ignore_leak
Unexecuted instantiation: inotify-missing.c:g_ignore_leak
Unexecuted instantiation: inotify-kernel.c:g_ignore_leak
Unexecuted instantiation: gtype.c:g_ignore_leak
Unexecuted instantiation: gdir.c:g_ignore_leak
Unexecuted instantiation: genviron.c:g_ignore_leak
Unexecuted instantiation: ggettext.c:g_ignore_leak
Unexecuted instantiation: ghash.c:g_ignore_leak
Unexecuted instantiation: glib-private.c:g_ignore_leak
Unexecuted instantiation: gmain.c:g_ignore_leak
Unexecuted instantiation: gtestutils.c:g_ignore_leak
Unexecuted instantiation: gutils.c:g_ignore_leak
57
58
/*
59
 * g_ignore_strv_leak:
60
 * @strv: (nullable) (array zero-terminated=1): an array of strings
61
 *
62
 * The same as g_ignore_leak(), but for the memory pointed to by @strv,
63
 * and for each element of @strv.
64
 */
65
static inline void
66
g_ignore_strv_leak (GStrv strv)
67
0
{
68
#ifdef _GLIB_ADDRESS_SANITIZER
69
  gchar **item;
70
71
  if (strv)
72
    {
73
      g_ignore_leak (strv);
74
75
      for (item = strv; *item != NULL; item++)
76
        g_ignore_leak (*item);
77
    }
78
#endif
79
0
}
Unexecuted instantiation: gresource.c:g_ignore_strv_leak
Unexecuted instantiation: gtask.c:g_ignore_strv_leak
Unexecuted instantiation: gvfs.c:g_ignore_strv_leak
Unexecuted instantiation: glocalfile.c:g_ignore_strv_leak
Unexecuted instantiation: glocalfileenumerator.c:g_ignore_strv_leak
Unexecuted instantiation: glocalfileinfo.c:g_ignore_strv_leak
Unexecuted instantiation: glocalfileinputstream.c:g_ignore_strv_leak
Unexecuted instantiation: glocalfilemonitor.c:g_ignore_strv_leak
Unexecuted instantiation: glocalfileoutputstream.c:g_ignore_strv_leak
Unexecuted instantiation: glocalfileiostream.c:g_ignore_strv_leak
Unexecuted instantiation: thumbnail-verify.c:g_ignore_strv_leak
Unexecuted instantiation: gcancellable.c:g_ignore_strv_leak
Unexecuted instantiation: gcontextspecificgroup.c:g_ignore_strv_leak
Unexecuted instantiation: giomodule.c:g_ignore_strv_leak
Unexecuted instantiation: gdbusaddress.c:g_ignore_strv_leak
Unexecuted instantiation: gdbusauthmechanismsha1.c:g_ignore_strv_leak
Unexecuted instantiation: gsettingsschema.c:g_ignore_strv_leak
Unexecuted instantiation: gsubprocess.c:g_ignore_strv_leak
Unexecuted instantiation: inotify-missing.c:g_ignore_strv_leak
Unexecuted instantiation: inotify-kernel.c:g_ignore_strv_leak
Unexecuted instantiation: gtype.c:g_ignore_strv_leak
Unexecuted instantiation: gdir.c:g_ignore_strv_leak
Unexecuted instantiation: genviron.c:g_ignore_strv_leak
Unexecuted instantiation: ggettext.c:g_ignore_strv_leak
Unexecuted instantiation: ghash.c:g_ignore_strv_leak
Unexecuted instantiation: glib-private.c:g_ignore_strv_leak
Unexecuted instantiation: gmain.c:g_ignore_strv_leak
Unexecuted instantiation: gtestutils.c:g_ignore_strv_leak
Unexecuted instantiation: gutils.c:g_ignore_strv_leak
80
81
GMainContext *          g_get_worker_context            (void);
82
gboolean                g_check_setuid                  (void);
83
GMainContext *          g_main_context_new_with_next_id (guint next_id);
84
85
#ifdef G_OS_WIN32
86
gchar *_glib_get_dll_directory (void);
87
GLIB_AVAILABLE_IN_ALL
88
gchar *_glib_get_locale_dir    (void);
89
#endif
90
91
GDir * g_dir_open_with_errno (const gchar *path, guint flags);
92
GDir * g_dir_new_from_dirp (gpointer dirp);
93
94
78
#define GLIB_PRIVATE_CALL(symbol) (glib__private__()->symbol)
95
96
typedef struct {
97
  /* See gwakeup.c */
98
  GWakeup *             (* g_wakeup_new)                (void);
99
  void                  (* g_wakeup_free)               (GWakeup *wakeup);
100
  void                  (* g_wakeup_get_pollfd)         (GWakeup *wakeup,
101
                                                        GPollFD *poll_fd);
102
  void                  (* g_wakeup_signal)             (GWakeup *wakeup);
103
  void                  (* g_wakeup_acknowledge)        (GWakeup *wakeup);
104
105
  /* See gmain.c */
106
  GMainContext *        (* g_get_worker_context)        (void);
107
108
  gboolean              (* g_check_setuid)              (void);
109
  GMainContext *        (* g_main_context_new_with_next_id) (guint next_id);
110
111
  GDir *                (* g_dir_open_with_errno)       (const gchar *path,
112
                                                         guint        flags);
113
  GDir *                (* g_dir_new_from_dirp)         (gpointer dirp);
114
115
  /* See glib-init.c */
116
  void                  (* glib_init)                   (void);
117
118
  /* See gstdio.c */
119
#ifdef G_OS_WIN32
120
  int                   (* g_win32_stat_utf8)           (const gchar        *filename,
121
                                                         GWin32PrivateStat  *buf);
122
123
  int                   (* g_win32_lstat_utf8)          (const gchar        *filename,
124
                                                         GWin32PrivateStat  *buf);
125
126
  int                   (* g_win32_readlink_utf8)       (const gchar        *filename,
127
                                                         gchar              *buf,
128
                                                         gsize               buf_size,
129
                                                         gchar             **alloc_buf,
130
                                                         gboolean            terminate);
131
132
  int                   (* g_win32_fstat)               (int                 fd,
133
                                                         GWin32PrivateStat  *buf);
134
#endif
135
136
137
  /* Add other private functions here, initialize them in glib-private.c */
138
} GLibPrivateVTable;
139
140
GLIB_AVAILABLE_IN_ALL
141
GLibPrivateVTable *glib__private__ (void);
142
143
/* Please see following for the use of ".ACP" over ""
144
 * on Windows, although both are accepted at compile-time
145
 * but "" renders translated console messages unreadable if
146
 * built with Visual Studio 2012 and later (this is, unfortunately,
147
 * undocumented):
148
 *
149
 * https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/setlocale-wsetlocale
150
 * https://gitlab.gnome.org/GNOME/glib/merge_requests/895#note_525881
151
 * https://gitlab.gnome.org/GNOME/glib/merge_requests/895#note_525900
152
 *
153
 * Additional related items:
154
 * https://stackoverflow.com/questions/22604329/php-5-5-setlocale-not-working-in-cli-on-windows
155
 * https://bugs.php.net/bug.php?id=66265
156
 */
157
158
#ifdef G_OS_WIN32
159
# define GLIB_DEFAULT_LOCALE ".ACP"
160
#else
161
# define GLIB_DEFAULT_LOCALE ""
162
#endif
163
164
#endif /* __GLIB_PRIVATE_H__ */