Commit Graph

30932 Commits

Author SHA1 Message Date
Philip Withnall
c94cbf2368 Merge branch 'wip/chergert/gdatainputstream-memchr' into 'main'
gio/gdatainputstream: use memchr() when possible

See merge request GNOME/glib!4327
2024-10-05 22:09:34 +00:00
Philip Withnall
74e37a483f Merge branch 'ebassi/gir-inline' into 'main'
gir: Ignore function-inline and method-inline elements

See merge request GNOME/glib!4331
2024-10-05 21:11:13 +00:00
Christian Hergert
760a6f6477 gio/tests: add test for single escape character
Converts the existing test to a loop and adds another test case which
tests a single stop character, \0 in this case.
2024-10-04 12:46:11 -07:00
Nirbheek Chauhan
decd9bb1ca Merge branch 'fix_woa64_1' into 'main'
Meson: fix support for aarch64-w64-mingw32 (Windows on ARM64)

Closes #3490

See merge request GNOME/glib!4330
2024-10-04 17:07:44 +00:00
Carlo Bramini
2986cd3793 Meson: fix support for aarch64-w64-mingw32 (Windows on ARM64)
This patch fixes a build error when compiling with GCC cross compiler for Windows on ARM64.
See issue #3490 for details.

Signed-off-by: Carlo Bramini carlo_bramini@users.sourceforge.net
Fixes: #3490
Closes #3490
2024-10-04 11:43:45 +02:00
Emmanuele Bassi
20134e6942 gir: Ignore function-inline and method-inline elements
Static inlines are available in the GIR, but they do not translate to
ABI, so they cannot go in the typelib. We handle them just like function
macros.
2024-10-03 18:35:38 +02:00
Philip Withnall
fb4f2e5578 Merge branch 'wip/chergert/c-utf8' into 'main'
glib/utf8: Use SIMD for UTF-8 validation

Closes #3481

See merge request GNOME/glib!4319
2024-10-03 15:07:17 +00:00
Philip Withnall
72384894b8
gutf8: Remove dead branch condition
This arm of the condition is always true, because 0x00 has been checked
in the previous branch.

This is not going to improve performance, but does mean we now have full
branch coverage of the code via our unit tests, which gives some
assurance that it’s all good.

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

Helps: #3481
2024-10-03 15:46:01 +01:00
Philip Withnall
36e4bb9872
tests: Add some more UTF-8 validation corner cases
The move to c-utf8 for validation has exposed a few new branches where
our existing (fairly comprehensive) UTF-8 validation test suite didn’t
check things.

Add unit tests for those branches, so we keep code coverage.

I’ve validated (with an independent UTF-8 decoder) that the test vectors
are correctly marked as valid/invalid in the test data (so the tests
aren’t just blindly coded to match the behaviour of the new validator
code).

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

Helps: #3481
2024-10-03 15:43:35 +01:00
Philip Withnall
e570263483
tests: Add basic unit tests for g_str_is_ascii()
It turns out it’s not actually been explicitly tested before, even
though it has full code coverage through being called by other code
which is tested.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-10-03 14:31:02 +01:00
Philip Withnall
7f8f0842d0 Merge branch 'wip/pwithnall/reenable-freebsd-fatal-warnings' into 'main'
ci: Re-enable fatal warnings for FreeBSD CI

See merge request GNOME/glib!4307
2024-10-03 12:56:21 +00:00
Christian Hergert
e7e5ddd2ae gio/gdatainputstream: use memchr() when possible
Scanning for stop chars can require looking through a considerable amount
of input data. In the case there is a single stop character, use memchr()
which can be optimized by the compiler to look at word size or greater
amounts of data at a time.
2024-10-02 13:33:17 -07:00
Christian Hergert
b72650542c glib/utf8: Use SIMD for g_str_is_ascii()
This moves g_str_is_ascii() from gstrfuncs.c to gutf8.c so that we can
reuse the same SIMD code for ASCII validation.

On Apple Silicon:

 Before:  3297 MB/s
  After: 26146 MB/s
2024-10-01 15:30:32 -07:00
Christian Hergert
1d3d7336ed glib/utf8: Use SIMD for UTF-8 validation
This is based on the https://github.com/c-util/c-utf8 project and has
been adapted for portability and integration into GLib. c-utf8 is dual
licensed Apache-2.0 and LGPLv2.1+, the latter matching GLib.

Notably, `case 0x01 ... 0x7F:` style switch/case labels have been
converted to if/else which is more portable to non-GCC/Clang platforms
while generating the same assembly, at least on x86_64 with GCC.

Additionally, `__attribute__((aligned(n)))` is used in favor of
`__builtin_assume_aligned(n)` because it is more portable to MSVC's
`__declspec(align(n))` and also generates the same assembly as GCC's
`__builtin_assume_aligned(n)`.

For GCC x86_64 Linux on a Xeon 4214 this improved the throughput of
g_utf8_validate() for ASCII from 750MB/s to around 10,000MB/s (13x).

On GCC aarch64 Linux with an Apple Silicon M2 Pro we go from about
2,200 MB/s to 26,700 MB/s (12x).

Closes: #3481
2024-10-01 12:44:36 -07:00
Philip Withnall
17124abc7e Merge branch 'jsparber/test_openuri_portal' into 'main'
tests: Expand tests for app launching via D-Bus

See merge request GNOME/glib!4176
2024-10-01 17:49:11 +00:00
Julian Sparber
c8e80132d8 tests: Add tests for launching default for file/uri via XDG portal 2024-10-01 19:03:37 +02:00
Julian Sparber
59877f5cc6 tests: Add launch context to g_app_info_launch_uris() tests
This ensure that `g_app_info_launch_uris()` uses and set the correct
activation token.
2024-10-01 18:25:52 +02:00
Julian Sparber
73970ee0b4 gopenuriportal: Improve error messages 2024-10-01 18:25:47 +02:00
Julian Sparber
0758788a25 gopenuriportal: Create GXdpOpenURI DBus proxy when needed
Instead of using singleton initialized the first time when it's needed
we can create the `DBusProxy` object when needed without blocking since
the interface doesn't have any properties nor signals.
2024-10-01 18:25:42 +02:00
Julian Sparber
89488e98e9 gopenuriportal: Use task data instead of object data
The docs recommend using a small number of `keys` when setting data for an
object, the OpenURI portal uses three different `keys` that can easily be replaced
with `g_task_set_task_data()`.
2024-10-01 18:25:37 +02:00
Julian Sparber
ef064d625b gopenuriportal: Fix two memory leaks 2024-10-01 18:25:31 +02:00
Philip Withnall
f6d7878a54 Merge branch 'speed-up-query-exists' into 'main'
gio: Add a query_exists vfunc to GFile

See merge request GNOME/glib!4272
2024-10-01 15:45:04 +00:00
Philip Withnall
2b5d3b5831 Merge branch 'fake-document-portal-in-process' into 'main'
tests: Move fake-document-portal subprocess inside dbus-appinfo test

See merge request GNOME/glib!4311
2024-10-01 15:38:30 +00:00
Matthias Clasen
ab51ed0521 gio: Implement query_exists for resources
This avoids allocations for this frequently used method.
2024-10-01 16:35:54 +01:00
Matthias Clasen
65ad41d8a4 gio: Implement query_exists for local files
We can’t quite use `access()` for this, like `g_file_test()` does, as
`g_file_query_info()` considers a broken symlink to exist, so we need to
match that by passing `AT_SYMLINK_NOFOLLOW`.

We also use the `AT_EACCESS` flag, which makes the `faccessat()` call
cheaper on Hurd.

Systems without `faccessat()` will continue to use the
`g_file_query_info()`-based implementation of `g_file_query_exists()`.

(Commit message rewritten by Philip Withnall.)
2024-10-01 16:27:29 +01:00
Matthias Clasen
85ce99f4ad gio: Add a query_exists vfunc to GFile
g_file_query_exists looks like a simpler and faster api than
g_file_query_info. This vfunc lets us actually make it faster,
and avoid allocations in this frequently used code path.
2024-10-01 16:25:57 +01:00
Philip Withnall
e14a393d27 Merge branch '3483-mainloop-test' into 'main'
tests: Rework a mainloop test to use an explicit termination condition

Closes #3483

See merge request GNOME/glib!4324
2024-10-01 15:00:03 +00:00
Philip Withnall
9e73d9a15a Merge branch 'utf8-docs' into 'main'
gutf8: Convert docs to gi-docgen linking syntax

See merge request GNOME/glib!4304
2024-10-01 14:53:53 +00:00
Philip Withnall
f8ba505dc1
gutf8: Clarify position of end returned from g_utf8_validate()
It wasn’t previously clear (to me) whether `end` was returned pointing
to the nul terminator, or to the byte immediately preceding it. Try and
clarify that.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-10-01 15:44:43 +01:00
Philip Withnall
7302c04e32
gutf8: Convert docs to gi-docgen linking syntax
Signed-off-by: Philip Withnall <pwithnall@gnome.org>

Helps: #3250
2024-10-01 15:44:36 +01:00
Philip Withnall
766f3414eb Merge branch 'steal-handle-id' into 'main'
utils: Add g_steal_handle_id() to complement g_clear_handle_id()

See merge request GNOME/glib!4308
2024-10-01 14:25:58 +00:00
Philip Withnall
6b2cc430e0
tests: Run dbus-appinfo tests with G_TEST_OPTION_ISOLATE_DIRS
Eliminate any possibility of them accidentally using the user’s
actual home directory.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-10-01 15:22:46 +01:00
Philip Withnall
d7e368f206
tests: Move fake-document-portal subprocess inside dbus-appinfo test
For the reasons given in
https://gitlab.gnome.org/GNOME/glib/-/merge_requests/4176#note_2233317,
it’s best to not rely on subprocesses when writing tests. Spawning a
subprocess can go wrong, getting feedback and assertion data from a
subprocess is a pain, and making sure the subprocess is killed properly
at the end of the test is hard to get right.

For tests where we are trying to mock a D-Bus service, it’s much more
reliable to run that service in-process (either in the main thread or in
a separate thread).

So, do that for the `fake-document-portal` former subprocess in the
`dbus-appinfo` test: move it to a worker thread.

This speeds the test up, simplifies the build slightly, and should make
the test run more reliable.

In particular, it provides a pattern for future `fake-*-portal` tests to
be built off. This is particularly useful for more complex portals,
where data needs to be relayed back from the mock portal service to the
unit test to check that the code under test has behaved properly. That’s
a pain to do from a subprocess.

Delete the `org.freedesktop.portal.Documents.service` file because we no
longer need to rely on D-Bus service activation within the test, as
we’re setting up the mock service thread explicitly now.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-10-01 15:22:40 +01:00
Michael Catanzaro
04543594d4 Merge branch 'gbytes-double-free' into 'main'
gbytes: Add an assertion to placate static analysis

See merge request GNOME/glib!4323
2024-10-01 14:04:13 +00:00
Michael Catanzaro
637ec98f2e Merge branch 'disable-assert-fix' into 'main'
gvariant: Fix unused variables when G_DISABLE_ASSERT is defined

See merge request GNOME/glib!4322
2024-10-01 13:57:04 +00:00
Philip Withnall
dfb0ea737b
gstdio: Move doc comment for g_clear_fd() to be next to the code
Nobody’s going to keep it up to date if it’s floating about in an
unrelated place, not next to the code.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-10-01 14:29:31 +01:00
Philip Withnall
f9d1f614a9
gmain: Move doc comment for g_steal_fd() to be next to the code
Nobody’s going to keep it up to date if it’s floating about in an
unrelated place, not next to the code.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-10-01 14:29:25 +01:00
Philip Withnall
a960725b5d
glib: Add declarations for public static inline methods
This is needed in order to expose them in the GIR, and hence for their
documentation to work.

See https://gitlab.gnome.org/GNOME/glib/-/merge_requests/4308#note_2236525

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-10-01 14:29:18 +01:00
Philip Withnall
431e75fa36
utils: Add g_steal_handle_id() to complement g_clear_handle_id()
Just like we have `g_steal_pointer()` and `g_clear_pointer()`, it would
be useful to have a ‘steal’ version of `g_clear_handle_id()`.

Particularly in situations where a clear function can’t be represented
as a `GClearHandleFunc`, such as
`g_dbus_connection_signal_unsubscribe()` (there’s no way of passing the
`GDBusConnection` to it) — or in situations where a handle ID isn’t
being released, but is being passed from one struct to another or from a
local scope to a struct or vice-versa.

Includes unit tests.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-10-01 14:29:05 +01:00
Philip Withnall
a40a33dfe0
tests: Rework a mainloop test to use an explicit termination condition
And to not assume that every main context iteration will provide
progress on the sources that the test is interested in. It’s possible
that other sources may be attached to the `GMainContext` which get
dispatched instead of the pipe sources on an iteration.

I don’t know if this will fix #3483, but it will certainly make this
test a little tidier. It doesn’t affect test run time.

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

Fixes: #3483
2024-10-01 13:32:29 +01:00
Philip Withnall
df8592268a
gbytes: Add an assertion to placate static analysis
Otherwise `scan-build` thinks it’s possible for the `GBytes` to be
double-freed, which would indeed happen if `try_steal_and_unref()` were
to return `NULL` on this branch.

It’s not actually possible for it to return `NULL` here though, as if
`bytes->data` were `NULL`, the function would have already returned
higher up.

Fixes this `scan-build` failure:
https://gitlab.gnome.org/GNOME/glib/-/jobs/4359929

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-10-01 13:15:15 +01:00
Philip Withnall
cc2b78ec47 Merge branch 'string-replace-tests' into 'main'
fuzzing: Add simple fuzz test for g_string_replace()

See merge request GNOME/glib!4315
2024-10-01 12:00:43 +00:00
Philip Withnall
a083ae415b Merge branch 'wip/chergert/gvariant-padding' into 'main'
gvariant: Add portable alignment fix for GVariant suffix

Closes #3486

See merge request GNOME/glib!4320
2024-10-01 11:42:27 +00:00
Philip Withnall
c920d2257b
gvariant: Fix unused variables when G_DISABLE_ASSERT is defined
This fixes commit 9eb9df2396, which I really should have noticed at the
time would cause a load of unused variables to be declared if compiled
with `G_DISABLE_ASSERT`. That’s what the original `#ifdef`s were to
protect against.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-10-01 12:24:30 +01:00
Christian Hergert
4db378a739 gvariant: Add portable alignment fix for GVariant suffix
We want to keep the suffix aligned to 8 bytes on 32-bit too. This makes
sure we do that in a way that is portable across our supported compilers.

Fixes: #3486
2024-10-01 12:19:26 +01:00
Philip Withnall
e4f5c2e9c5 Merge branch 'gvariant-32bit-msvc' into 'main'
gvariant-core.c: Fix suffix alignment on 32-bit MSVC builds

See merge request GNOME/glib!4321
2024-10-01 11:11:45 +00:00
Chun-wei Fan
1b9d3964f5 gvariant-core.c: Fix suffix alignment on 32-bit MSVC builds
With a similar rationale to commit d50102f2, this avoids the static
assert from failing on 32-bit Visual Studio builds.
2024-10-01 17:25:37 +08:00
Philip Withnall
c96cd22cf9 Merge branch '3042-msys2-still-intermittent' into 'main'
Revert "CI: Mark msys2-mingw32 as allowing failures"

Closes #3042

See merge request GNOME/glib!4190
2024-09-29 12:56:15 +00:00
Philip Withnall
fe8e4eb6db
ci: Clarify msys2 allow-failure policy
See the previous commit and discussion on #3420.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2024-09-29 13:36:03 +01:00
Philip Withnall
53f20d79b8
Revert "CI: Mark msys2-mingw32 as allowing failures"
This reverts commit 16819a4024.

The failure this was added for is intermittent and has been going on a
long time; it’s not a new failure caused by msys2 dependency/packaging
changes, so the policy in .gitlab-ci.yml doesn’t apply.

It would be great if someone fixed #3042, but un-gating GLib from msys2
testing is not the right tradeoff for it.

See: #3042
2024-09-29 13:35:57 +01:00