1
0
mirror of https://gitlab.gnome.org/GNOME/glib.git synced 2026-10-24 00:49:00 +03:00

2995 Commits

Author SHA1 Message Date
Christian Hergert
30dfead61b gobject/gclosure: cache libffi plans for closures
If we are using libffi to trampoline then there is opportunity to cache
the ffi_call_plan introduced in newer libffi releases. A rather contrived
test introduced in the previous commit includes a basic performance test
that can compare between versions.

For my system, the average call time dropped from 200ns/call to 145ns/call
for cached GClosure. Since the previous version did no caching, the
uncached GClosure use was also just slightly slower around 205ns/call. For
the cached form (since it can reuse a global plan cache via GMutex) it
drops to 180ns/call. So that is 27.5% savings and a 10% savings in runtime
duration.

Closes: #4002
Co-authored-by: Philip Withnall <pwithnall@gnome.org>
2026-10-14 12:55:41 +02:00
Philip Withnall
11de1d730e gobject-query: Remove no-op -s spacing option
msys2-clang64 noticed that the `spacing` variable was written to but
never read from. Indeed, this option has been a no-op since I
accidentally/deliberately broke it in commit
98e6ac788e.

Drop it, because nobody has complained about it breaking since 2022, and
I’m not sure about what the use case for it originally was meant to be.

See https://gitlab.gnome.org/pwithnall/glib/-/jobs/7171235

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2026-10-10 23:40:34 +01:00
Philip Withnall
30cb22fc3f Merge branch 'docs-sync-calls-thread-default-context' into 'main'
docs: Note where synchronous calls keep their completion bookkeeping

See merge request GNOME/glib!5341
2026-10-08 20:07:25 +00:00
Tobias Mueller
067a897549 docs: Note where synchronous calls keep their completion bookkeeping
A synchronous call built over the GTask machinery may attach its
completion sources to the calling thread's thread-default main context,
reclaimed only once that context is iterated. A worker thread that never
iterates one accumulates a small allocation per call. See #4041.
2026-10-08 12:43:00 -07:00
SnoutFirst
5ca673db81 gio: Add G_MOUNT_MOUNT_READ_ONLY flag
Add a new flag to GMountMountFlags that allows callers to request
a read-only mount. This is needed by file managers (e.g. Thunar)
to allow users to mount removable drives as read-only.

The flag is passed through the GVolumeIface::mount_fn vfunc and
can be handled by volume monitor implementations (e.g. gvfs
udisks2) to pass the appropriate options to the underlying
mount mechanism.

Also add a --read-only / -r option to the gio mount CLI tool.
2026-10-06 21:14:14 +00:00
Christian Hergert
ec042dad82 glib/macros: Add macro to disable cleanup attribute
This adds `-DG_DISABLE_CLEANUP` to be able to manually disable
cleanup attribute. This is useful for situations like GTK or
GtkSourceView which must avoid introducing cleanup attributes
to continue compiling on MSVC.

I would expect this to commonly be used next to defines for
min/max allowed library versions.
2026-09-22 12:57:33 +02:00
Philipp Jungkamp
3a7f17ab32 docs: Fix gio gi-docgen docs_url 2026-07-31 23:11:05 +02:00
Sam James
016829559e Drop G_GNUC_CONST for *_get_type
g_type_ensure has a large comment saying _get_type shouldn't be
marked with G_GNUC_CONST because it has side-effects on the first
run, but it's OK if you consistently call g_type_ensure first.

Unfortunately, this isn't accurate. GCC trunk (observed at r17-1725-ge259a182e1f100)
now analyses points-to information more effectively and propagates its
findings, so it sees the function modifies some global state, concludes
that can't be possible (because of the const attribute), and deletes
the stores.

pure unfortunately is unsuitable for *_get_type too as it has a side-effect
(writes to global memory).

Mesa had a similar issue which I fixed recently [0]. glib and glibmm likely
want the (not-yet-implemented) 'idempotent' attribute instead [1]. In fact,
this exact problem is what motivated that request! :)

ebassi mentions an alternative to the current setup as well, using
atomics [2].

This problem has gone back many years but the compiler has finally
fully outsmarted us here, so give in.

[0] https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/42361
[1] https://gcc.gnu.org/PR32911
[2] https://gitlab.gnome.org/GNOME/glib/-/merge_requests/4249#note_2583110

Fixes: https://gitlab.gnome.org/GNOME/glib/-/work_items/3984
Signed-off-by: Sam James <sam@gentoo.org>
2026-06-25 17:23:46 +01:00
Gleb Popov
c46e07233f Use dlopen to access environ on FreeBSD
This allows building glib without -Db_lundef=false
2026-06-21 14:53:28 +03:00
Chee Bin Hoh
35c0b3da0f docs: add missing reference to g_rc_box_new0 and g_atomic_rc_box_new0 and others in Reference Counting page 2026-06-16 21:24:11 +00:00
Chee Bin Hoh
405c52d868 docs: fix wrong reference to gint16 for gint32 types in glib/types.md 2026-05-31 21:31:13 +00:00
Christian Hergert
fd3b35769e strfuncs: add g_set_strv() and g_set_strv_take()
This adds a new g_set_strv() that has been used in various GNOME projects
to help ensure that strv properties are changed with minimal notify()
emissions as well as reduce chances for UAF.

Additionally, g_set_strv_take() is provided to allow setting a GStrv
without making a copy of the provided string. Use this when you are
using API like g_strv_builder_end().

Fixes: #3907
2026-05-19 15:24:25 +02:00
Philip Withnall
efac370744 gdbusauthmechanismsha1: Disable auth mechanism when setuid
When running setuid, ignore this auth mechanism and hence also the
`$G_DBUS_COOKIE_SHA1_KEYRING_DIR` environment variable.

This was considered as part of #2168 but determined at the time to not
be a problem.

It’s since been reported as a vulnerability. I don’t see how it can
realistically be exploited in practice:
 - This D-Bus auth mechanism is strongly discouraged and iirc it’s only
   kept around for use on Windows
 - The setuid binary would have to be running as a D-Bus server in a
   peer-to-peer configuration, which is very rare
 - Even rarer to run it as setuid root, rather than as a system service
   via a service manager
 - And the configuration would have to force this auth mechanism to be
   used instead of any more appropriate mechanism

That said, I don’t see any reason why we _shouldn’t_ ignore this
environment variable when setuid. ¯\_(ツ)_/¯  The fallback for
`$G_DBUS_COOKIE_SHA1_KEYRING_DIR` is to build the keyring path using
`$HOME`, but that is equally as susceptible to attacker modification
when running setuid, hence we disable the whole auth mechanism.

This brings GIO inline with what libdbus does.

Spotted by cavid.
Thanks to the Sovereign Tech Resilience programme from the Sovereign
Tech Agency.

ID: #YWH-PGM9867-164
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2026-05-18 14:51:55 +01:00
Philip Withnall
98566f396d gstrfuncs: Add g_set_str_take() helper function
This is like `g_set_str()`, but it takes ownership of the new string
passed in to it, so you can conveniently pass in the return value of
`g_strdup_printf()` (etc.) without additional memory management
boilerplate.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2026-05-18 14:08:41 +01:00
Maximiliano Sandoval
786ccb5adb docs: Add docs for G_GNUC_FLAG_ENUM
Taken from the docs at gmacros.h.
2026-04-27 14:11:27 +02:00
Philip Withnall
75e16025b2 docs: Clarify UTF-8 validity for functions which accept a length
As discussed on
https://gitlab.gnome.org/GNOME/glib/-/issues/3916#note_2724656.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2026-04-02 19:32:24 +01:00
Emmanuele Bassi
e26b1a194b docs: Clarify default/user signal handlers
The description of the distinction between default and user signal
handlers leaves it a bit unclear whether any signal handler connected
within the class implementation can actually be a default signal
handler. The term "object method handler" is ambiguous, because all
signal handlers are bound to an object, but the default signal handler
is bound to the class.

We should also link the GSignalFlags values, now that we can point to
specific enumeration values.
2026-03-29 16:01:09 +01:00
Philip Withnall
73266e06bc docs: Expand docs for GLIB_VERSION_MAX_ALLOWED
Make it a little clearer what its effects are.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2026-03-19 14:48:43 +00:00
Philip Withnall
be65d20182 docs: Expand docs for GLIB_VERSION_MAX_ALLOWED
In particular, point out that `G_ENCODE_VERSION()` needs to be used to
encode versions which are newer than the minimum GLib dependency of your
project.

Also add a code example for Meson.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2026-03-19 14:19:58 +00:00
Marco Trevisan
e02603d44d Merge branch 'glib-platform-break' into 'main'
introspection: Remove platform-specific backward compatibility from GLib-2.0

Closes #3839

See merge request GNOME/glib!4881
2026-01-26 06:48:20 +01:00
Marco Trevisan (Treviño)
4e7da65cd5 docs/reference/glib/unix: Add GLibUnix.fd_query_path 2026-01-26 05:17:04 +01:00
Marco Trevisan (Treviño)
cdeaf9b181 reference/glib/unix: Add links to the GLibUnix.Pipe methods
They are now exposed by gir, so gi-docgen should handle them.

Related to:
 - https://gitlab.gnome.org/GNOME/gi-docgen/-/issues/173
 - https://gitlab.gnome.org/GNOME/gobject-introspection/-/merge_requests/438
2026-01-26 05:17:04 +01:00
Maximiliano Sandoval
ba48794b08 docs: Fix typo 2026-01-22 18:31:49 +01:00
Maximiliano Sandoval
8995844520 docs: Set code block lang to C 2026-01-22 18:31:34 +01:00
Sebastian Wick
4405fe5fc8 gdbus-codegen: Add an extension system which allows hooking codegen
The extension points are chosen by what libdex needs to generate future
based method calls.
2025-11-02 11:18:37 +00:00
FeRD (Frank Dana)
fabe2113c3 Docs: Migrate gvariant-*.svg licenses to comments
Remove the overrides in `.reuse/dep5`, and instead store the license
information in a comment near the top of each file.
2025-10-16 19:37:00 +00:00
FeRD (Frank Dana)
c2f6337d8f Docs: New file-name-encodings image: light/dark, color
- Redid the old StarOffice-format drawing file in OpenDocument
  format, and updated with two different `-light` and `-dark`
  versions.
  - Added color to the rectangles
  - Bolded all of the text
  - Added background transparency
- Exported both as `file-name-encodings-{light,dark}.svg`
- Tweaked in Inkscape to simplify SVG structure, scale to
  fixed pixel sizes, align to page dimensions.
- Added License/Copyright data as Custom Document Properties
  in OpenDocument sources, comments in SVG source.
  - Federico Mena Quintero, uploader of the originals, is
    credited in the `SPDX-FileCopyrightText` data, along
    with myself.
  - License chosen was `CC0-1.0`, because again I don't believe
    these files are complex enough to actually be copyrightable.
- Added data for `.odg` files to `/.reuse/dep5` file, as
  reuse can't extract license data from that format.
- Updated `character-set.md` and `glib.toml.in` to use
  new SVGs in place of old PNG.
2025-10-16 13:35:12 +00:00
Tobias Stoeckmann
48bf508bc1 docs: Fix typos
Typos found with codespell
2025-09-03 21:47:11 +02:00
Nick Steel
267b1246d7 docs: Calling gmodule funcs in constructors may deadlock
Fixes #1443.
2025-07-15 11:18:27 +00:00
Philip Withnall
3d84aa264c docs: Stop hiding the Unix-like APIs which are in Gio-2.0.gir
There are four `Unix.+` classes in `Gio-2.0.gir` which need to be
exposed in the `Gio-2.0.gir` docs because they are actually now
cross-platform (which is a move which has caused a lot of pain).

Change the code which filters out the rest of the `Unix.+` classes to
ignore these ones. The rest of the classes continue to be documented via
`GioUnix-2.0.gir`.

Changing the regexs for this involved a fun use of negative lookahead.

See https://gitlab.gnome.org/GNOME/glib/-/issues/3697#note_2459405

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
Helps: #3697
2025-06-03 14:10:52 +01:00
Laurent Lyaudet
2bf5064655 docs: add INT(16|32|64)_(MAX|MIN) and fix some typos 2025-04-22 17:00:38 +00:00
Matthias Clasen
e8b9319a66 docs: Add some detail
Mention that glib-compile-resources accepts multiple --sourcedir
options.
2025-03-30 09:22:32 -04:00
Philip Withnall
73ee0d5e53 docs: Fix man page link for xattrs
It seems to have moved.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-02-26 10:16:57 +00:00
Reuben Thomas
7804f13d26 doc: Simplify instructions for testing with Automake
This documentation used to link to GLib’s TAP harness. However, the built-in
Automake support works fine, and is simpler to use. Hence, remove most of
the old documentation, and refer users to the Automake manual, adding just
one hint for use with GLib.
2025-02-22 14:34:34 +02:00
Philip Withnall
0234f8e1b1 Merge branch 'ppd-api-rename' into 'main'
gio/powerprofilemonitordbus: Use newer D-Bus API

See merge request GNOME/glib!4478
2025-02-07 08:34:19 +00:00
Marco Trevisan (Treviño)
236abac6fb gio/powerprofilemonitordbus: Use newer DBus API
Since some time the power-profiles-daemon project has been moved under
the upower umbrella and renamed its API to follow that.

While the legacy name is still supported, there are plans to not support
it anymore in future [2]. So let's update GLib code to use the
current main name instead.

[1] https://gitlab.freedesktop.org/upower/power-profiles-daemon/-/merge_requests/148
[2] https://gitlab.freedesktop.org/upower/power-profiles-daemon/-/merge_requests/166
2025-02-07 00:55:32 +01:00
Mavroudis Chatzilazaridis
cb1502ed66 docs: Fix invalid references and broken links
This commit fixes quite a few broken links and references, minor typos,
and improves wording in some sections.
2025-02-05 22:28:26 +02:00
Philip Withnall
58c4ab46f2 docs: Port GIO overview to gi-docgen linking syntax and fix a few typos
Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-01-22 22:48:43 +00:00
Matthias Clasen
d760bfef00 docs: Document more extension points
GIO is more extensible than we know! Document more of the existing
extension points, their included implementations and their purpose.
2025-01-21 12:00:42 +00:00
Philip Withnall
b65e950b3e docs: More gi-docgen linking in main-loop.md
Port the rest of the document to gi-docgen syntax, so we don’t have to
track partially-ported files.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
Helps: #3250
2025-01-13 17:47:12 +00:00
Niels De Graef
bd148fd04d docs: Use gi-docgen syntax in main-loop.md
The "Main Loop" documentation wasn't actually linking to `GMainContext`
properly, so let's fix this.
2025-01-12 15:33:19 +01:00
Philip Withnall
2ebd1c8f15 docs: Hide Unix and Win32 symbols from main GLib and GIO docs
These symbols are documented in the {glib,gio}-{unix,win32}
documentation builds, and shouldn’t be duplicated in the main
documentation. It’s a historical (and unavoidable) accident that those
symbols are in the main GIR files.

If we don’t hide the symbols from the main docs build, we now run into
the problem of the `GioUnix` namespace not being known to gi-docgen
while building the `Gio` docs. This is because of the previous two
commits, which ported more of the `gunixmounts` documentation to
gi-docgen syntax. I don’t know of another way to fix this, other than to
hide the `GioUnix` symbols from the `Gio` docs build.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>

Helps: #3250
2024-12-20 15:13:16 +00:00
Corentin Noël
2021e20a8a docs: Add --generate-md to the gdbus-codegen documentation
Add it to the documentation the same way it is done for reStructured and docbook.
2024-12-12 11:51:49 +00:00
Philip Withnall
e9670d3c3c docs: Warn if building documentation without enable_gir
If `-Ddocumentation=true` is specified without
`-Dintrospection=enabled`, warn the user. They might expect the
documentation to be built, but it won’t.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-12-11 15:36:50 +00:00
Philip Withnall
fa33e232d2 gio-tool: Clarify that gio mount -l only lists user-interesting things
It doesn’t list all mounts, only the ones you’d expect to see in a file
chooser sidebar.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>

Helps: #3555
2024-12-08 23:03:07 +00:00
Philip Withnall
8b29c53057 gmessages: Treat DEBUG_INVOCATION=1 same as G_MESSAGES_DEBUG=all
systemd 257 will now set `DEBUG_INVOCATION=1` in the execution context
of services which need to be debugged — for example if they’ve failed
and been restarted (and `RestartMode=debug`).

If we handle `DEBUG_INVOCATION=1` as being equivalent to
`G_MESSAGES_DEBUG=all`, then any processes using GLib’s default log
writer function (or `g_log_writer_default_would_drop()`) automatically
gains support for this feature.

See https://mastodon.social/@pid_eins/113548825942383777

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-11-27 16:10:22 +00:00
Philip Withnall
efab4c1c71 build: Bump the gi-docgen dependency to 2024.1
This gives us an updated enumeration template and link validation,
amongst other things.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-09-25 17:27:46 +01:00
Christian Hergert
ff00e9c2ed docs/gvariant: fix a(si) example in specification
This has a trailing 0x15 on it when you create it with GVariant and the
specification should match.

Closes: #3478
2024-09-24 09:22:52 -07:00
FeRD (Frank Dana)
0bda424669 docs(glib): Fix link in string-utils ref 2024-09-12 06:04:34 -04:00
Philip Withnall
b4332b0056 docs: Clarify distinction between GDrive, GVolume and GMount
Provide examples of what they all represent, and expand on the
descriptions of them in a few places.

Move references to their equivalents from `GnomeVFS` to lower down in
the documentation, since `GnomeVFS` has been deprecated for many years
now, and is unlikely to be pertinent to most readers.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-08-15 11:32:37 +01:00