8386 Commits

Author SHA1 Message Date
Philip Withnall
0611999fed tests: Remove various bits of overly-verbose test output
None of these messages are particularly helpful, but they increase the
overall test log output size, which has to be stored by the CI for every
test run.

With these messages removed, the size of a full test log is reduced from
6.5MB to 1.8MB for me.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-05-31 15:21:46 +01:00
Philip Withnall
a922f2f2c7 Merge branch 'th/g-ptr-array-set-null-terminated' into 'main'
array: add support for g_ptr_array_null_terminated()

See merge request GNOME/glib!1485
2022-05-27 15:08:50 +00:00
Thomas Haller
ee247c0a2d array: add support for %NULL termination in GPtrArray
GArray supports a "zero_terminated" flag, but GPtrArray doesn't.
This is odd, because especially for a pointer array it makes sense
to have a %NULL sentinel. This would be for example useful to track
or construct a strv array with a GPtrArray.

As workaround for this missing feature you could use a GArray instead
(ugly) or to explicitly add the %NULL element. However the latter increases
the "len" of the array, which can be problematic if you want to still use
the GPtrArray for other purposes.

Add API for marking a GPtrArray as %NULL terminated. In that case, the
API will ensure that there is always a valid %NULL sentinel after the
array. Note that the API does not enforce that a %NULL terminated API
actually has any data allocated. That means, even with a %NULL terminated
array, pdata can still be %NULL (only if len is zero).

Add g_ptr_array_new_null_terminated() constructor. The null-terminated flag
cannot be cleared. Once the GPtrArray is flagged to be %NULL terminated, it
sticks. The purpose is that once a user checks whether a GPtrArray instance
is safe to be treated as a %NULL terminated array, the decision does
not need to be re-evaluated.

Also add a g_ptr_array_is_null_terminated(). That is useful because it
allows you to check whether a GPtrArray created by somebody else is safe
to use as a %NULL terminated array. Since there is no API to make an
array not %NULL terminated anymore, this is not error prone.

The new flag is tracked as a guint8 in GRealPtrArray. On common 64 bit
architectures this does not increase the size of the struct as it fits
in an existing hole. Note that this is not a bitfield because it's
probably more efficient to access the entire guint8. However, there is
still a 3 bytes hole (on common 32 and 64 architectures), so if we need
to add more flags in the future, we still have space for 24 bits,
despite the new flag not being a bitfield.

The biggest downside of the patch is the runtime overhead that most
operations now need to check whether %NULL termination is requested.

Includes some tweaks and additional tests by Philip Withnall.

https://gitlab.gnome.org/GNOME/glib/-/issues/353
2022-05-27 15:27:19 +01:00
Philip Withnall
a9321c3652 garray: Add missing (transfer full) introspection annotations
Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-05-27 14:27:52 +01:00
Philip Withnall
6db112f9a7 gmain: Refactor idle-once and timeout-once to avoid a closure allocation
Instead store a bit inside `GTimeoutSource` and `GIdleSource` to
indicate that they are one-shot sources, and that their callbacks have a
different type and should always be assumed to return `G_SOURCE_REMOVE`.

This should make one-shot idle and timeout sources a teeny weeny little
bit cheaper to set up.

From a suggestion here: https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2684#note_1462917

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-05-27 13:28:33 +01:00
Philip Withnall
c1477f79e7 gmain: Factor out common GIdleSource code
This allows it to be reused and extended (internally) a little more.
This commit introduces no functional changes, but allows for more easy
additions in a following commit.

It introduces `GIdleSource` as a simple wrapper around `GSource`, which
will be extended in a following commit.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-05-27 13:28:33 +01:00
Philip Withnall
af02a614a2 gmain: Factor out common GTimeoutSource code
This allows it to be reused and extended (internally) a little more.
This commit introduces no functional changes, but allows for more easy
additions in a following commit.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-05-27 13:28:33 +01:00
Philip Withnall
93bf87528d Merge branch 'ebassi/source-once' into 'main'
Add one-shot idle and timeout functions

See merge request GNOME/glib!2684
2022-05-27 12:25:51 +00:00
Philip Withnall
c1f94cd1a5 gmain: Minor documentation updates to idle-once and timeout-once funcs
As suggested on !2684.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-05-27 12:58:10 +01:00
Emmanuele Bassi
50c316ef36 Port various timeout/idle callbacks to the once API
So we excercise it in our test coverage.
2022-05-27 12:58:10 +01:00
Emmanuele Bassi
12571a0821 Add one-shot idle and timeout functions
Many idle and timeout sources are installed as "one shot": called once
and immediately removed. While it's easy to write a simple callback that
returns G_SOURCE_REMOVE, it would also be useful to have some sort of
"visual" marker when reading the code; a way to immediately see that a
callback (which may be defined elsewhere in the code) is meant to be
invoked just once.

Includes additional unit tests by Philip Withnall.
2022-05-27 12:57:55 +01:00
Philip Withnall
ce585ba4d2 Merge branch 'slice-test' into 'main'
Slice test

See merge request GNOME/glib!2579
2022-05-26 17:01:52 +00:00
Christian Hergert
114eb5bc5a build: update sysprof configuration options
Sysprof recently cleaned up it's build configuration options. This is
perhaps a good time to update GLib to point at an updated commit'ish and
use the new options.

If now is not a good time to do the update, that is completely fine, but
I wanted to give you a turn-key MR nonetheless.
2022-05-25 23:02:14 -07:00
Matthias Clasen
0415bf9412 Add g_datalist_id_remove_multiple
This is more efficient than calling
g_datalist_id_remove() multiple times
in a row, since it only takes the locks
once.

Allow up to 16 keys to be removed in one go.
That is enough for the use we have in GObject,
and it avoids any danger of blowing the stack.
2022-05-23 09:19:45 -04:00
TestingPlant
da7a31a052 Rename user data parameters to user_data
The user data parameters in callbacks need to be named user_data to
generate correct closure attributes in the introspection data. This
updates parameters missed in GNOME/glib!2633.
2022-05-22 01:06:37 +00:00
Matthias Clasen
ad3c339ce4 Add another Unicode testcase
It turns out I typoed the character code when
I added the previous one.

See https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2669
2022-05-19 12:39:33 -04:00
Matthias Clasen
240675d5f4 Add a Unicode testcase
This verifies that GString is not to blame for the bug
in https://github.com/harfbuzz/harfbuzz/issues/3590
2022-05-18 19:24:04 -04:00
Philip Withnall
bfe349983a Merge branch 'spawn-outparams' into 'main'
g_spawn_async_with_pipes_and_fds uses out parameters as inputs

See merge request GNOME/glib!2632
2022-05-18 14:40:23 +00:00
Philip Withnall
caf6d99fbe Merge branch 'win32-fd' into 'main'
gio: various unix/fd-related enablement on win32

See merge request GNOME/glib!2656
2022-05-18 14:01:43 +00:00
Philip Withnall
1771449e54 tests: Add SPDX license headers automatically
Add SPDX license (but not copyright) headers to all files which follow a
certain pattern in their existing non-machine-readable header comment.

This commit was entirely generated using the command:
```
git ls-files glib/tests/*.c | xargs perl -0777 -pi -e 's/\n \*\n \* This library is free software; you can redistribute it and\/or\n \* modify it under the terms of the GNU Lesser General Public/\n \*\n \* SPDX-License-Identifier: LGPL-2.1-or-later\n \*\n \* This library is free software; you can redistribute it and\/or\n \* modify it under the terms of the GNU Lesser General Public/igs'
```

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

Helps: #1415
2022-05-18 09:21:02 +01:00
Philip Withnall
70ee43f1e9 glib: Add SPDX license headers automatically
Add SPDX license (but not copyright) headers to all files which follow a
certain pattern in their existing non-machine-readable header comment.

This commit was entirely generated using the command:
```
git ls-files glib/*.[ch] | xargs perl -0777 -pi -e 's/\n \*\n \* This library is free software; you can redistribute it and\/or\n \* modify it under the terms of the GNU Lesser General Public/\n \*\n \* SPDX-License-Identifier: LGPL-2.1-or-later\n \*\n \* This library is free software; you can redistribute it and\/or\n \* modify it under the terms of the GNU Lesser General Public/igs'
```

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

Helps: #1415
2022-05-18 09:19:02 +01:00
Emmanuel Fleury
5c32c31489 Remove unnecessary dependency on the slice-color test 2022-05-17 18:35:20 +02:00
Emmanuel Fleury
8ad765a4c2 Convert test/slice-test.c to glib test framework and move it to glib/tests/ 2022-05-17 18:35:16 +02:00
Philip Withnall
2dc8184590 tests: Add some SPDX license headers
These cover the files which Debian has already worked out the licensing
information for, in
https://salsa.debian.org/gnome-team/glib/-/blob/debian/master/debian/copyright.

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

Helps: #1415
2022-05-17 17:23:34 +01:00
Marc-André Lureau
15ce3c9b37 glib/tests/spawn-path-search: fix stack-buffer-overflow
==24477==ERROR: AddressSanitizer: stack-buffer-overflow on address 0x7ffde020de20 at pc 0x7f2e6f6413f1 bp 0x7ffde020c9d0 sp 0x7ffde020c180
READ of size 4101 at 0x7ffde020de20 thread T0
    #0 0x7f2e6f6413f0 in __interceptor_strlen.part.0 (/lib64/libasan.so.8+0x4c3f0)
    #1 0x7f2e6ef4abee in g_build_path_va ../glib/gfileutils.c:1908
    #2 0x7f2e6f085956 in g_test_build_filename_va ../glib/gtestutils.c:4294
    #3 0x7f2e6f086684 in g_test_build_filename ../glib/gtestutils.c:4365
    #4 0x403a33 in test_search_path_heap_allocation ../glib/tests/spawn-path-search.c:422
    #5 0x7f2e6f0839a5 in test_case_run ../glib/gtestutils.c:2930
    #6 0x7f2e6f0839a5 in g_test_run_suite_internal ../glib/gtestutils.c:3018
    #7 0x7f2e6f0834ed in g_test_run_suite_internal ../glib/gtestutils.c:3035
    #8 0x7f2e6f084879 in g_test_run_suite ../glib/gtestutils.c:3112
    #9 0x7f2e6f084995 in g_test_run ../glib/gtestutils.c:2231
    #10 0x40145f in main ../glib/tests/spawn-path-search.c:488
    #11 0x7f2e6e31258f in __libc_start_call_main (/lib64/libc.so.6+0x2d58f)
    #12 0x7f2e6e312648 in __libc_start_main_alias_1 (/lib64/libc.so.6+0x2d648)
    #13 0x401524 in _start (/home/elmarco/src/gnome/glib/build/glib/tests/spawn-path-search+0x401524)

Address 0x7ffde020de20 is located in stack of thread T0 at offset 4256 in frame
    #0 0x40387f in test_search_path_heap_allocation ../glib/tests/spawn-path-search.c:401

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2022-05-17 17:34:06 +02:00
Philip Withnall
fa8430d42a Merge branch 'fix_test' into 'main'
Cleaning a file left behind by glib/tests/bookmarkfile.c test case

See merge request GNOME/glib!2659
2022-05-17 14:03:06 +00:00
Philip Withnall
848d7718b6 Merge branch 'test-slice-threadinit' into 'main'
Moving slice-threadinit.c test to glib/tests/

See merge request GNOME/glib!2580
2022-05-17 12:59:45 +00:00
Sebastian Dröge
5eaa13f573 Merge branch 'hmac-signedness' into 'main'
ghmac: Fix some signed/unsigned issues with g_checksum_update()

See merge request GNOME/glib!2636
2022-05-17 07:28:05 +00:00
Emmanuel Fleury
92a6db39de Cleaning a file left behind by glib/tests/bookmarkfile.c test case 2022-05-16 19:13:52 +02:00
Emmanuel Fleury
ddb0585e65 Moving slice-threadinit.c test to glib/tests/
Related to issue #1434
2022-05-16 15:21:02 +02:00
Philip Withnall
7137591775 tests: Fix a double-close of a GSource in tests
This bug only gets triggered on BSD, because it calls `recv_message()`
with `G_IO_HUP | G_IO_IN`. That takes two code paths in
`recv_message()`, and ends up calling `shutdown_source()` twice. The
second call causes a critical warning.

Fixes: https://gitlab.gnome.org/GNOME/glib/-/jobs/2004192

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-05-16 14:12:30 +01:00
Nicola Fontana
a84068d12a gspawn: Avoid considering out parameters as inputs
The g_spawn_async_with_pipes_and_fds() API changes its behavior
depending on the states of out parameters. Apart from the philosophical
inconsistency, this poses some real problems, e.g. in Lua bindings:

    https://github.com/lgi-devs/lgi/issues/277

This adds three new spawn flags to allow specifying the wanted behavior
explicitly and does not assert on the state of the output parameters.
2022-05-16 15:05:59 +02:00
Philip Withnall
5160b12740 Merge branch 'move_thread_test' into 'main'
Move tests/thread-test.c to glib/tests/thread-deprecated.c

See merge request GNOME/glib!2639
2022-05-16 12:41:25 +00:00
Philip Withnall
d1bec29217 Merge branch 'move_gio-test' into 'main'
Convert tests/gio-test.c to g_test framework

See merge request GNOME/glib!2539
2022-05-16 12:34:27 +00:00
Marc-André Lureau
960ed2f906 glib/tests: add spawn-stderr-socket test
Check the spawn implementation behaviour when the stderr is a
socket (mostly for win32).

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2022-05-12 18:54:11 +02:00
Marc-André Lureau
a34a4e7844 glib/win32: teach reopen_noninherited() about SOCKET
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2022-05-12 18:54:11 +02:00
Marc-André Lureau
277657eacc glib/win32: introduce private g_win32_handle_is_socket()
Used in following commits, including in some GIO experiments.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2022-05-12 18:54:11 +02:00
Marc-André Lureau
c43472060b glib/win32: replace reopen_noninherited()
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2022-05-12 18:49:00 +02:00
Marc-André Lureau
c984db650f glib/win32: introduce private g_win32_reopen_noninherited()
Used in following commits, including in some GIO experiments, so make it
a private API.

For now, this implementation is similar to the glib/gspawn-win32.c one,
with mroe error checking and better on error behaviour. A following
patch will also fix the case of duplicating sockets.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2022-05-12 18:49:00 +02:00
Marc-André Lureau
982b074fa9 glib/win32: fix potential leak on spawn error
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2022-05-12 18:48:59 +02:00
Marc-André Lureau
e84b05a8c3 glib/win32: drop needless #ifdef G_OS_WIN32
They were carried over from an ancient time.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2022-05-12 18:48:59 +02:00
Marc-André Lureau
d1520bd06e glib/tests: move spawn-test-win32-gui
Fixes: commit 762ed2e82b ("Move tests/spawn-test.c -> glib/tests/spawn-test.c")

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2022-05-12 18:48:59 +02:00
Emmanuel Fleury
87a4cea9e4 Convert g_printf() to g_test_message() to capture messages on TAP 2022-05-12 17:25:07 +02:00
Emmanuel Fleury
4589ff080d Move test/gio-test.c to glib/test/io-channel-basic.c
Helps issue #1434
2022-05-12 17:25:07 +02:00
Philip Withnall
2f73cc670c Merge branch 'mapping-test' into 'main'
Moving tests/mapping-test.c to glib/test/mapping.c

See merge request GNOME/glib!2607
2022-05-10 18:05:07 +00:00
Philip Withnall
5eaf305d2e Merge branch 'expand_ghook_tests' into 'main'
Expand ghook unit tests for a better coverage and add more checks

See merge request GNOME/glib!2624
2022-05-10 17:55:24 +00:00
Emmanuel Fleury
3f085d1f4a Moving tests/mapping-test.c to glib/test/mapping.c
Helps issue #1434
2022-05-10 19:23:14 +02:00
Simon McVittie
8f2a950362 Merge branch 'check-version-docs' into 'main'
gversion: Clarify that GLIB_CHECK_VERSION is a >= check

See merge request GNOME/glib!2619
2022-05-10 16:31:40 +00:00
Simon McVittie
816abcbb95 Merge branch 'scan-build-fixes' into 'main'
Add some more assertions to help scan-build out

See merge request GNOME/glib!2646
2022-05-10 16:30:18 +00:00
Philip Withnall
e0fe616dbc gvariant: Factor out type check
This will help static analysers, similarly to with the previous commit.

This introduces no functional changes.

Signed-off-by: Philip Withnall <pwithnall@endlessos.org>
2022-05-10 16:29:22 +01:00