Commit Graph

31495 Commits

Author SHA1 Message Date
8b5da746e7 wip: Add a test for double eval 2025-03-22 13:28:27 -04:00
ff8cd60bfc Try to fix things
glib_typeof wasn't defined in gmacros.h, so we never used the
better macros :(
2025-03-22 13:28:27 -04:00
1d9c85185e Add a C++ test for common macros
Make sure that there is no problem with using these macros
in C++ context, since typeof is defined differently there.
2025-03-22 13:28:27 -04:00
ecfb143bbf gmain: Eliminate use of ABS from g_timeout_set_expiration()
It’s not clear why `ABS()` was ever needed here so, as per the previous
commit, let’s eliminate it.

It was added in d9f5ab56c3 owing to the need for a pseudo-random value
in the range (0, 1000000). Previously the code calculated a hash
(unsigned pseudo-random value in the full range of `unsigned int`), then
cast it to `int` (making half its possible values negative), then took
`ABS()` of that (forcing the negative values positive, so effectively
halving the pseudo-random state space and doubling the possibility of
any particular value being chosen), then did mod 1000000 to limit the
upper bound.

We can simplify this by eliminating the cast to `int`, which removes the
need for `ABS()`. The whole `unsigned int` state space is then passed to
mod 1000000. This should give the same probability distribution as
before.

The `timer_perturb` variable itself is signed to allow for `-1` to
indicate it’s not been set yet (it’s `static`). This could be split out
into a separate boolean, but there’s no point as the desired
`timer_perturb` state space is only (0, 1000000) anyway, which is easily
representable as a signed `int`.

Spotted by Thomas Haller in
https://gitlab.gnome.org/GNOME/glib/-/merge_requests/4559#note_2384322.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-22 13:28:27 -04:00
fe7b5132f6 gmain: Remove an expensive function call from ABS() arguments
It’s possible that `ABS()` will evaluate its argument more than once, so
it’s best to not call expensive functions as the argument expression.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-22 13:28:27 -04:00
c2c9db0629 Improve MIN, MAX, ABS, CLAMP macros
When using gcc or clang, define these common macros in a way
that only evaluates the argument once. This is the intention.
2025-03-22 13:28:27 -04:00
ddf2839762 Clarify docs for common macros
Numeric macros such as MIN(), MAX(), etc. should not be handed
arguments with side-effects, such as i++, since we can't guarantee
that the values are only evaluated once.
2025-03-22 13:28:27 -04:00
913a1bfd85 Merge branch 'main' into 'main'
Fix LGPL in header

See merge request GNOME/glib!4565
2025-03-21 17:40:54 +00:00
247e7b6995 Fix LGPL in header of gvarianttype-private.h 2025-03-21 17:40:53 +00:00
be031cf2a5 Merge branch 'test-path-fixes' into 'main'
tests: Various fixes to create temporary files in /tmp rather than the build directory

See merge request GNOME/glib!4561
2025-03-21 15:30:53 +00:00
ee4b93bff4 tests: Port spawn-test tests to use G_TEST_OPTION_ISOLATE_DIRS
This ensures they’re not writing files to the build directory, which
avoids race conditions when running multiple invocations of the tests.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:03:16 +00:00
e4fca24a06 tests: Add missing shell argument quoting in spawn-test
It’s not currently needed, because the filename being passed to the
subprocess is hard-coded and doesn’t contain anything which would need
escaping. But the following commit is going to change that (to avoid
filename collisions), so let’s fix the quoting first.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:03:11 +00:00
a795dede46 tests: Port mapping tests to use G_TEST_OPTION_ISOLATE_DIRS
This ensures they’re not writing files to the build directory, which
avoids race conditions when running multiple invocations of the tests.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:03:07 +00:00
484fb416c6 tests: Factor out hard-coded file names in mapping test
So the filename we delete at the end of the test is definitely the same
one we created at the start of the test.

This introduces no functional changes, but will make a refactor in the
following commit simpler.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:03:03 +00:00
9f75cdc2bc tests: Port keyfile tests to use G_TEST_OPTION_ISOLATE_DIRS
This ensures they’re not writing files to the build directory, which
avoids race conditions when running multiple invocations of the tests.

This is not entirely trivial, because the tests for
`g_key_file_load_from_data_dirs()` are affected by the overridden
`$XDG_DATA_HOME` directory. Mitigate that by copying the file they want
to that directory (and relying on `G_TEST_OPTION_ISOLATE_DIRS` to delete
it again afterwards).

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:02:58 +00:00
87cc9f2b6d gkeyfile: Better document search algorithm for g_key_file_load_from_data_dirs()
Today I learned that it magically turns `-` into `/` to search
subdirectories for key files. Turns out that wasn’t documented at all.

i.e. it’ll search for `$datadir/some-key-file.ini` and, if that’s not
found, will then try `$datadir/some/key-file.ini` and then
`$datadir/some/key/file.ini`.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:02:54 +00:00
e7b820d66c tests: Move various test paths to g_get_tmp_dir()
Rather than creating files in the current directory. This is a bit
neater, and avoids races between parallel invocations of the unit tests
if the file names aren’t guaranteed to be unique (e.g. by using
`g_mkstemp()`).

Add `G_TEST_OPTION_ISOLATE_DIRS` too, to make sure we use a unique
subdirectory of `g_get_tmp_dir()`. This means that paths like
`g_get_tmp_dir() / some-file` are guaranteed to be race-free even if the
filename is not unique, because the test tmp dir now is.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:02:49 +00:00
4d2b873211 tests: Use g_build_filename() rather than g_strdup_printf()
In the `g-file-info-filesystem-readonly` test.

This doesn’t introduce any functional changes, but makes the code a
little easier to read (because the parts of the path are now in
hierarchical order) and makes it a bit clearer that we’re building a
path rather than an arbitrary string.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:02:45 +00:00
447fa26205 gfileutils: Clarify that g_mkstemp() and friends act in the current directory
Otherwise it’s easy to assume that they create a file in the system
temporary directory, if they’re only called with a filename template
(without a path).

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:02:41 +00:00
4345eb2756 tests: Only use g_mkstemp() in /tmp rather than current directory
It’s not entirely clear from the documentation, but `g_mkstemp()` (and
`g_mkdtemp()`) operate in the current directory, rather than the system
temporary directory.

This meant these tests were all writing files to the build directory.
This is messy, though thankfully not a correctness issue or a race
because `g_mkstemp()` guarantees to return a unique file for each
caller.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:02:36 +00:00
581a0b1285 gfile: Document that g_file_make_directory() returns G_IO_ERROR_EXISTS
if the directory already exists.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:02:32 +00:00
d77bff0bef tests: Use standard g_test_message() logging in fileutils tests
Rather than a custom combination of `g_test_verbose()` and
`g_printerr()`.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:02:27 +00:00
918c4bd467 tests: Use g_assert_*() rather than g_assert() in fileutils tests
It won’t get compiled out with `G_DISABLE_ASSERT`.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:02:23 +00:00
aae1743284 tests: Test directories inside /tmp rather than arbitrary paths
This probably wasn’t causing any problems since it was a self-contained
read only access of a non-existent path. But it’s a bit tidier to
contain this all inside `/tmp`.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-21 14:02:18 +00:00
08489deb06 Merge branch 'epoll-create' into 'main'
giounix-private: Fix macro for checking for epoll_create1()

See merge request GNOME/glib!4563
2025-03-20 12:33:50 +00:00
20f083ea7c giounix-private: Fix macro for checking for epoll_create1()
Like many things I touch, I broke this in
fd8ede0b66.

Spotted by Sebastian Wilhelmi in
fd8ede0b66 (note_2385263).

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-20 11:12:58 +00:00
88e8ee515c Merge branch 'settings-docs' into 'main'
gsettings: Port docs to gi-docgen format, add missing annotations and make various improvements

See merge request GNOME/glib!4541
2025-03-19 20:18:34 +00:00
b0568c845d Merge branch 'file-info-docs' into 'main'
gfileinfo: Slightly expand docs for g_file_info_get_attribute_as_string()

See merge request GNOME/glib!4557
2025-03-19 20:05:06 +00:00
7ea8543f7e Merge branch 'fix_3636' into 'main'
gio-tool: Fix handling of the trash original path

Closes #3636

See merge request GNOME/glib!4556
2025-03-19 17:37:36 +00:00
93ad1d9773 Merge branch 'bilelmoussaoui/gi-docs' into 'main'
gi: Dynamically set doc-format

See merge request GNOME/glib!4558
2025-03-19 11:49:48 +00:00
aaf8097b73 Ensure we're printing UTF-8 2025-03-17 13:38:13 +01:00
5e50167da5 gi: Dynamically set doc-format 2025-03-15 10:27:13 +01:00
787f47f091 gfileinfo: Slightly expand docs for g_file_info_get_attribute_as_string()
Inspired by !4556.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-14 15:27:08 +00:00
6b2187b5ef gio-tool: Fix handling of the trash original path
Previously, we were getting the string representation. However, this
representation gets escaped, which breaks non-ascii characters, because we
were counting on the path being the original path, which was not true in
these cases.

Retrieve it rather as the byte string which it is.

Fixes #3636.
2025-03-14 13:46:55 +01:00
ccc6748ca9 Merge branch 'such-a-cold-test' into 'main'
tests: Add a test for g_object_freeze_notify() being called too often

See merge request GNOME/glib!4555
2025-03-13 16:29:50 +00:00
ff94b4b665 tests: Add a test for g_object_freeze_notify() being called too often
This tests the `g_critical()` path in it, to make sure we handle errors
acceptably there.

Prompted by https://gitlab.gnome.org/GNOME/glib/-/merge_requests/4185#note_2377037

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-13 11:48:10 +00:00
435dd378fd tests: Use g_assert_*() rather than g_assert() in properties tests
It won’t get compiled out with `G_DISABLE_ASSERT`.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
2025-03-13 11:47:48 +00:00
a2904b611e Merge branch 'l10n-id' into 'main'
Update Indonesian translation

See merge request GNOME/glib!4554
2025-03-13 00:38:09 +00:00
fe330b0b31 Update Indonesian translation 2025-03-12 11:40:53 +00:00
89983f33b0 Merge branch 'ebassi/signal-flags-docs' into 'main'
docs: Document GSignalFlags members added after 2.0

See merge request GNOME/glib!4553
2025-03-12 11:16:06 +00:00
3de213b622 docs: Document GSignalFlags members added after 2.0
Use separate doc blocks, to ensure that the "Since" tag is parsed and
reflected in the introspection data.
2025-03-12 11:34:30 +01:00
34608c9426 Merge branch 'Persian' into 'main'
Update Persian translation

See merge request GNOME/glib!4552
2025-03-12 09:51:42 +00:00
986d1c8d69 Merge branch 'update-danish-translation' into 'main'
Updated Danish translation

See merge request GNOME/glib!4551
2025-03-11 23:26:22 +00:00
688b431db7 Update Persian translation. 2025-03-12 02:37:00 +03:30
07c5268f64 Updated Danish translation 2025-03-11 16:26:09 +01:00
444aa3e999 Merge branch 'wip/3v1n0/gobject-atomic-pspec' into 'main'
gobject: Be consistent in using atomic logic to handle the GParamSpecPool

See merge request GNOME/glib!4489
2025-03-11 15:13:53 +00:00
5b0ce18dcd gobject: Add single function to check G_ENABLE_DIAGNOSTIC
It was duplicated, and racing too
2025-03-11 01:07:20 +01:00
fba031c41c gobject: Be consistent in using atomic logic to handle the GParamSpecPool
We init it atomically but then we don't really use it in such way and it
may lead to races at read/write times
2025-03-11 01:07:17 +01:00
55a7660f18 Merge branch '3634-git-doc-format' into 'main'
girparser: Ignore new doc:format element in GIR files

Closes #3634

See merge request GNOME/glib!4550
2025-03-10 17:02:42 +00:00
aee0664e6f girparser: Ignore new doc:format element in GIR files
As of gobject-introspection 1.83.2, a new `<doc:format name="…"/>`
element is supported (as a child of `<repository>`) in GIR files.

For the moment, this information isn’t needed in libgirepository — but
the GIR parser does have to know about the element in order to not throw
an error claiming it’s invalid.

This is a slightly tweaked version of the code added to
gobject-introspection.git in commit
9544cd6c962fab2c3203898779948309833e2439 by Corentin Noël
<corentin.noel@collabora.com>, reformatted slightly to fit in with
GLib’s style guidelines.

This is backwards compatible and does not require a new
gobject-introspection version.

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

Fixes: #3634
2025-03-10 15:21:15 +00:00