6341 Commits

Author SHA1 Message Date
Colin Walters
630fa82ed0 gthread: Rework to avoid holding a mutex half the time
This code was a persistent source of `-fsanitize=thread` errors
when I was trying to use it on OSTree.

The problem is that while I think this code is functionally correct,
we hold a mutex during the writes, but not the reads, and TSAN (IMO
correctly) flags that.

Reading this, I don't see a reason we need a mutex at all.  At the
cost of some small code duplication between posix/win32, we can just
pass the data we need down into each implementation.  This ends up
being notably cleaner I think than the awkward "lock/unlock to
serialize" dance.

(Minor review changes made by Philip Withnall <withnall@endlessm.com>.)

https://gitlab.gnome.org/GNOME/glib/issues/1224
2019-01-31 13:19:29 +00:00
Philip Withnall
097dc30ad9 Merge branch 'fixing_warnings' into 'master'
Fixing warnings

See merge request GNOME/glib!622
2019-01-31 13:15:23 +00:00
Emmanuel Fleury
4cd8fccc11 Fixing missing initializer in g_static_rec_mutex_init()
glib/deprecated/gthread-deprecated.c: In function ‘g_static_rec_mutex_init’:
glib/deprecated/gthread-deprecated.c:657:3: error: missing initializer for field ‘depth’ of ‘GStaticRecMutex’ {aka ‘const struct _GStaticRecMutex’} [-Werror=missing-field-initializers]
   static const GStaticRecMutex init_mutex = G_STATIC_REC_MUTEX_INIT;
   ^~~~~~
In file included from glib/deprecated/gthread-deprecated.c:30:
glib/deprecated/gthread.h:161:9: note: ‘depth’ declared here
   guint depth;
         ^~~~~
2019-01-31 10:24:32 +01:00
Mohammed Sadiq
2934dfa2bd gmarkup: Optimize g_markup_escape_text() 2019-01-30 14:36:14 +00:00
Emmanuel Fleury
6e49b36cc2 Fixing signedness in glib/gdate.c
glib/gdate.c: In function ‘g_date_add_months’:
glib/gdate.c:1732:27: error: comparison of integer expressions of different signedness: ‘guint’ {aka ‘unsigned int’} and ‘int’ [-Werror=sign-compare]
   g_return_if_fail (years <= G_MAXUINT16 - d->year);
                           ^~
glib/gmacros.h:455:25: note: in definition of macro ‘G_LIKELY’
 #define G_LIKELY(expr) (expr)
                         ^~~~
glib/gdate.c:1732:3: note: in expansion of macro ‘g_return_if_fail’
   g_return_if_fail (years <= G_MAXUINT16 - d->year);
   ^~~~~~~~~~~~~~~~
glib/gdate.c: In function ‘g_date_add_years’:
glib/gdate.c:1816:28: error: comparison of integer expressions of different signedness: ‘guint’ {aka ‘unsigned int’} and ‘int’ [-Werror=sign-compare]
   g_return_if_fail (nyears <= G_MAXUINT16 - d->year);
                            ^~
glib/gmacros.h:455:25: note: in definition of macro ‘G_LIKELY’
 #define G_LIKELY(expr) (expr)
                         ^~~~
glib/gdate.c:1816:3: note: in expansion of macro ‘g_return_if_fail’
   g_return_if_fail (nyears <= G_MAXUINT16 - d->year);
   ^~~~~~~~~~~~~~~~
2019-01-28 15:29:21 +01:00
Emmanuel Fleury
a419146578 Fixing signedness in g_ptr_array_insert():glib/garray.c
glib/garray.c: In function ‘g_ptr_array_insert’:
glib/garray.c:1522:14: error: comparison of integer expressions of different signedness: ‘gint’ {aka ‘int’} and ‘guint’ {aka ‘unsigned int’} [-Werror=sign-compare]
   if (index_ < rarray->len)
              ^
2019-01-28 15:29:21 +01:00
Emmanuel Fleury
3384ed3f7f Fixing signedness warnings in glib/gdatetime.c
glib/gdatetime.c: In function ‘get_iso8601_int’:
glib/gdatetime.c:1142:17: error: comparison of integer expressions of different signedness: ‘gint’ {aka ‘int’} and ‘gsize’ {aka ‘long unsigned int’} [-Werror=sign-compare]
   for (i = 0; i < length; i++)
                 ^
glib/gdatetime.c: In function ‘get_iso8601_seconds’:
glib/gdatetime.c:1175:9: error: comparison of integer expressions of different signedness: ‘gint’ {aka ‘int’} and ‘gsize’ {aka ‘long unsigned int’} [-Werror=sign-compare]
   if (i == length)
         ^~
glib/gdatetime.c:1178:12: error: comparison of integer expressions of different signedness: ‘gint’ {aka ‘int’} and ‘gsize’ {aka ‘long unsigned int’} [-Werror=sign-compare]
   for (; i < length; i++)
            ^
In file included from glib/glibconfig.h:9,
                 from glib/gtypes.h:32,
                 from glib/gtimezone.h:27,
                 from glib/gdatetime.h:31,
                 from glib/gdatetime.c:62:
glib/gdatetime.c: In function ‘initialize_alt_digits’:
glib/gdatetime.c:2806:27: error: comparison of integer expressions of different signedness: ‘gsize’ {aka ‘long unsigned int’} and ‘long int’ [-Werror=sign-compare]
       g_assert (digit_len < buffer + sizeof (buffer) - buffer_end);
                           ^
glib/gmacros.h:455:25: note: in definition of macro ‘G_LIKELY’
 #define G_LIKELY(expr) (expr)
                         ^~~~
glib/gdatetime.c:2806:7: note: in expansion of macro ‘g_assert’
       g_assert (digit_len < buffer + sizeof (buffer) - buffer_end);
       ^~~~~~~~
2019-01-28 15:29:14 +01:00
Emmanuel Fleury
b8efd0df41 Fixing signedness in digest_to_string:glib/gchecksum.c
glib/gchecksum.c: In function ‘digest_to_string’:
glib/gchecksum.c:186:17: error: comparison of integer expressions of different signedness: ‘gint’ {aka ‘int’} and ‘gsize’ {aka ‘long unsigned int’} [-Werror=sign-compare]
   for (i = 0; i < digest_len; i++)
                 ^
2019-01-28 15:26:43 +01:00
Emmanuel Fleury
bfedf0f144 Fixing signedness in gdataset.c
glib/gdataset.c: In function ‘g_datalist_clear_i’:
glib/gdataset.c:233:21: error: comparison of integer expressions of different signedness: ‘gint’ {aka ‘int’} and ‘guint32’ {aka ‘unsigned int’} [-Werror=sign-compare]
       for (i = 0; i < data->len; i++)
                     ^
glib/gdataset.c: In function ‘g_datalist_clear’:
glib/gdataset.c:270:21: error: comparison of integer expressions of different signedness: ‘gint’ {aka ‘int’} and ‘guint32’ {aka ‘unsigned int’} [-Werror=sign-compare]
       for (i = 0; i < data->len; i++)
                     ^
glib/gdataset.c: In function ‘g_datalist_foreach’:
glib/gdataset.c:1147:21: error: comparison of integer expressions of different signedness: ‘int’ and ‘guint32’ {aka ‘unsigned int’} [-Werror=sign-compare]
       for (j = 0; j < d->len; j++)
                     ^
2019-01-28 15:24:06 +01:00
Emmanuel Fleury
5ca8c2fa8f Fixing signedness in g_ptr_array_maybe_expand():garray.c
../glib.git/glib/garray.c: In function ‘g_ptr_array_maybe_expand’:
../glib.git/glib/garray.c:1172:43: error: comparison of integer expressions of different signedness: ‘unsigned int’ and ‘gint’ {aka ‘int’} [-Werror=sign-compare]
   if G_UNLIKELY ((G_MAXUINT - array->len) < len)
2019-01-28 15:24:06 +01:00
Emmanuel Fleury
9402940919 Fixing signedness warning in sindent():gtester.c
../glib.git/glib/gtester.c: In function ‘sindent’:
../glib.git/glib/gmacros.h:351:26: error: comparison of integer expressions of different signedness: ‘guint’ {aka ‘unsigned int’} and ‘int’ [-Werror=sign-compare]
 #define MIN(a, b)  (((a) < (b)) ? (a) : (b))
                          ^
../glib.git/glib/gtester.c:73:7: note: in expansion of macro ‘MIN’
   n = MIN (n, l);
       ^~~
../glib.git/glib/gmacros.h:351:41: error: operand of ?: changes signedness from ‘int’ to ‘guint’ {aka ‘unsigned int’} due to unsignedness of other operand [-Werror=sign-compare]
 #define MIN(a, b)  (((a) < (b)) ? (a) : (b))
                                         ^~~
../glib.git/glib/gtester.c:73:7: note: in expansion of macro ‘MIN’
   n = MIN (n, l);
       ^~~
2019-01-28 15:23:34 +01:00
Krzesimir Nowak
09eb87ad55 gvariant: Fix a mistake in docs
So now the docs actually match what the code does.
2019-01-26 21:45:34 +01:00
Ignacio Casal Quinteiro
22b3a5ec00 Use win32 io channel on windows for the protocol test
We must use the platform specific method to create an IO channel
out of an fd. The test still does not work on Windows but
this is a step forward in the direction to make it work.
2019-01-24 21:24:44 +01:00
Philip Withnall
72329ea303 Merge branch 'fix-gdir-warning-msvc' into 'master'
gdir: shutup a warning when building with msvc

See merge request GNOME/glib!612
2019-01-24 10:44:34 +00:00
Ignacio Casal Quinteiro
57c779dab4 gdir: shutup a warning when building with msvc
This way we avoid the warning:
warning C4716: 'g_dir_new_from_dirp': must return a value
2019-01-24 11:31:38 +01:00
Philip Withnall
6a2cfde29f gtypes: Define signed integer minimum values in terms of maximum values
This is what limits.h does. It avoids a problem when compiling with MSVC
(in C++ mode) on Windows, whereby the 0x80000000 constant is interpreted
as unsigned, and *then* the unary minus is applied to it.

https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-2-c4146?view=vs-2017

Add a test which should hopefully catch problems with different
compilers’ interpretations of this in future.

Signed-off-by: Philip Withnall <withnall@endlessm.com>

https://gitlab.gnome.org/GNOME/glib/issues/1663
2019-01-23 13:23:53 +00:00
Philip Withnall
e3e4a09716 gvariant-parser: Add explicit unsigned-to-signed casts
Rather than prefixing unsigned numbers with unary minus operators and
expecting the implicit cast to carry the correct value through, add an
explicit cast to a signed type before the unary minus is applied.

In all four cases, an overflow check has already been done.

Signed-off-by: Philip Withnall <withnall@endlessm.com>

https://gitlab.gnome.org/GNOME/glib/issues/1655
2019-01-19 01:07:57 +00:00
Paolo Bonzini
69a48333c2 gtestutils: pass open file descriptors to subprocess
The subprocess needs to access the test_log_fd.  If the file descriptors
are not left open, functions such as g_test_message may stomp on file
descriptors open by the subprocess and cause bad behavior of the test.

(Tweaked by Philip Withnall <bugzilla@tecnocode.co.uk> to fix review
comments.)
2019-01-18 14:56:22 +00:00
Xavier Claessens
ec93d9e125 MSVC: Move dirent implementation to glib/dirent/ 2019-01-16 10:24:11 -05:00
Michael Catanzaro
4a0ce6b458 Add separate definitions of g_assert_[non]null() for C++
In C++ we can use nullptr to ensure g_assert_[non]null() is only called
with pointers. This will introduce build failures in tests that would
have previously compiled, but only in C++, and only for code that
misused these macros. Code using the macros properly will be fine.

This change caught a couple bugs in WebKit's API tests, where I had
accidentally used these functions improperly. E.g. this is now a build
failure in C++:

g_assert_null(webkit_context_menu_get_n_items(menu)); /* Oops! */

Either I wanted to use cmpuint there, or I wanted to use
webkit_context_menu_get_items() to receive a GList* instead.

Another example that will no longer build in C++:

g_assert_null(0); /* Contrived, but 0 is not a pointer! */
2019-01-15 15:57:44 -06:00
Philip Withnall
419e1485a5 Merge branch 'so-long-autotools' into 'master'
Drop autotools support

See merge request GNOME/glib!580
2019-01-15 15:26:26 +00:00
Philip Withnall
b3efef5b6f build: Drop autotools support
So long, and thanks for everything. We’re a Meson-only shop now.

glib-2-58 will remain the last stable GLib release series which is
buildable using autotools.

We continue to install autoconf macros for autotools-using projects
which depend on GLib; they are stable API.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2019-01-15 15:11:43 +00:00
Philip Withnall
7cff1b2265 glib: Update various code comments to mention Meson
Rather than referring to the old autotools build system.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2019-01-15 15:11:43 +00:00
Philip Withnall
e58e68f932 glib: Link to glib-tap.mk and friends from glib-2-58 branch
We’re about to drop autotools support. Rather than keep the .mk files
around in master indefinitely, link to the versions in the glib-2-58
branch (the last stable release of GLib which supports building with
autotools) in readiness for dropping the .mk files from master.

Any future fixes to these files can happen on the glib-2-58 branch. The
links should work forever (as long as we use GitLab).

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2019-01-15 15:11:43 +00:00
Philip Withnall
9ea050b131 glib: Port glib-mirroring-tab subdirectory to Meson
We don’t actually build this; the Makefile was just there to allow
ad-hoc regeneration of the glib-mirroring-tab output files.

Port it to Meson just so there are no remnants of GNU make left in GLib.
Don’t hook it up to the rest of the build.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2019-01-15 15:11:43 +00:00
Nirbheek Chauhan
2a76dba03e gmacros: MSVC supports the noreturn function attribute
But it can't be used as a drop-in implementation of G_GNUC_NORETURN
because it can only be placed at the start of the function prototype.

Document this in a comment so that the next person doesn't spend
20 min figuring it out.
2019-01-15 01:56:29 +05:30
Matthias Clasen
3aa8b4eba7 Merge branch '1625-nbsp-docs-followup-to-548' into 'master'
gutils: Mention NBSP in g_format_size() documentation

Closes #1625

See merge request GNOME/glib!581
2019-01-10 15:01:34 +00:00
Philip Withnall
76af5dabb4 Merge branch '1625-unbreakable-space-needed-when-showing-size-of-folder-file' into 'master'
Resolve "Unbreakable space needed when showing size of folder/file"

Closes #1625

See merge request GNOME/glib!548
2019-01-10 11:27:04 +00:00
Philip Withnall
f1729119b4 gutils: Mention NBSP in g_format_size() documentation
This is a follow-up to
https://gitlab.gnome.org/GNOME/glib/merge_requests/548.

Signed-off-by: Philip Withnall <withnall@endlessm.com>

Closes #1625
2019-01-10 11:25:36 +00:00
Philip Withnall
0d3fe5c350 Merge branch 'queue-clear' into 'master'
Add g_queue_clear_full API

Closes #1464

See merge request GNOME/glib!537
2019-01-08 16:01:09 +00:00
Philip Withnall
f6caeb6d1a gthread: Add g_private_set_alloc0() internal convenience API
This is a wrapper around g_private_set() which allocates the desired
amount of memory for the caller and calls g_private_set() on it.

This is intended to make it easier to suppress Valgrind warnings about
leaked memory, since g_private_set() is typically used to make one-time
per-thread allocations. We can now just add a blanket suppression rule
for any allocations inside g_private_set_alloc0().

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2019-01-07 18:54:17 +00:00
Alistair Thomas
94d855fc6d docs: Add note on how to check a gboolean condition 2019-01-07 15:19:41 +00:00
Philip Withnall
8dced725c2 Merge branch 'annotation-fix' into 'master'
goption: Fix an annotation on g_option_context_parse_strv()

See merge request GNOME/glib!545
2019-01-05 07:57:17 +00:00
Philip Withnall
33158c86c1 Merge branch 'wip/nacho/gpoll' into 'master'
win32 gpoll: overcome the 64 handles limit

See merge request GNOME/glib!535
2019-01-04 11:20:11 +00:00
Simon McVittie
986b0a5965 Merge branch '1055-will-the-alignment-never-end' into 'master'
gmacros: Don’t use __alignof__ in G_ALIGNOF implementation

Closes #1055

See merge request GNOME/glib!559
2019-01-03 09:42:52 +00:00
Ignacio Casal Quinteiro
7f1023b0b8 Use lowercase to include winsock2 2018-12-28 15:30:28 +01:00
Ignacio Casal Quinteiro
97f4ce5a77 meson: build gpoll test on windows 2018-12-28 14:41:53 +01:00
Ignacio Casal Quinteiro
a9ea169b64 win32: increase the fds and pollees on the gpoll test
Also change the repeat define to do a single pass so we do
not timeout
2018-12-28 13:28:43 +01:00
Ignacio Casal Quinteiro
24714b50df win32 gpoll: overcome the 64 handles limit
This is a new polling method allowing to poll more than 64 handles
based on the glib one.
When we reach the limit of 64 we create a thread and we poll
on that thread for a batch of handles this way we overcome the limit.

https://gitlab.gnome.org/GNOME/glib/issues/1071
2018-12-28 13:28:43 +01:00
Ignacio Casal Quinteiro
0d2f7074ea gpoll: rename timeout to timeout_ms for clarity 2018-12-28 13:28:43 +01:00
Vasily Galkin
22e875f710 gspawn, win32: quoted args - escape end backslash
According to msdn documentation last backslash(es) of quoted argument
in a win32 cmdline need to be escaped, since they are
directly preceding quote in the resulting string:
https://docs.microsoft.com/en-us/cpp/c-language/parsing-c-command-line-arguments

Glib <=2.58.0 passed children arguments like C:\Program Files\
without escaping last backslash(es).
So it had been passed as "C:\Program Files\"
windows command line parsing treated this as escaped quote,
and later text was treated as argument continuation instead of separate
arguments.

Existing implementation wasn't easily adoptable to fix this problem,
so escaping logic was rewritten.
Since the resulting length need to be increased due to extra escaping
it was rewritten too. Now the calculated length assumes that all
escapable chars would be escaped in a resulting string,
so the length may be a bit bigger than actually needed,
since backslashes not preceding quotes are not escaped.

This fixes the glib/tests/spawn-singlethread.c test
(which introduced testing for special chars to make this problem
testable).
The problem itself was found during investigations about fixing
related https://gitlab.gnome.org/GNOME/glib/issues/1566

The logic is duplicated in protect_argv_string() and protect_wargv() funcs.
However there is no single obvious way to get rid of duplication -
https://gitlab.gnome.org/GNOME/glib/merge_requests/419#note_371483

So by now adding a note referencing protect_wargv from protect_argv_string,
the other direction is already referenced.
2018-12-27 00:06:58 +03:00
Vasily Galkin
f7f597c841 gspawn, win32: fix child stderr when coverage enabled
This fixes test that were added in previous commit:
checking for empty stderr failed with coverage enabled, since
coverage warnings printed from gspawn-win32-helper process were treated
as child output. This is fixed by removing redirection after child
finishes execution.

The dup_noninherited renamed to reopen_noninherited,
since it actually always closes passed file descriptor.
2018-12-27 00:00:50 +03:00
Vasily Galkin
cafb61a179 gspawn, win32: fix redirecting only stderr
Problem was just a typo - wrong variable was checked before enabling
stderr redirection.
This fixes error-only redirection spawn-test added in previous commit.

Behavior while redirecting only stdout should be unaffected,
since old code tried to redirect stderr to -1 in such case,
which silently failed I think.
2018-12-26 23:55:28 +03:00
Vasily Galkin
387739b018 gspawn, tests: check passing special chars in args
The existing singlethread g_spawn_sync test is modified and now tests
that special characters in arguments are correctly passed to child.
The test is added before spawn escaping fixing on win32
and covers the case currently broken on win32:
'trailing \ in argument containing space'.
2018-12-26 23:30:57 +03:00
Tapasweni Pathak
2dc82840c8 Add g_queue_clear_full API
Closes https://gitlab.gnome.org/GNOME/glib/merge_requests/378.
2018-12-22 14:36:56 +05:30
Philip Withnall
ab56f0459c tests: Add test for G_ALIGNOF()
To guarantee that its behaviour is always the same as the
G_STRUCT_OFFSET fallback.

Signed-off-by: Philip Withnall <withnall@endlessm.com>

https://gitlab.gnome.org/GNOME/glib/issues/1055
2018-12-21 13:22:55 +00:00
Philip Withnall
b7d2eeed17 gmacros: Don’t use __alignof__ in G_ALIGNOF implementation
It has different semantics from _Alignof and our G_STRUCT_OFFSET
fallback. See the comments in the diff for details.

Signed-off-by: Philip Withnall <withnall@endlessm.com>

https://gitlab.gnome.org/GNOME/glib/issues/1055
2018-12-21 13:09:57 +00:00
António Fernandes
3da40e9036 gutils: Use no-break space in g_format_size()
It's undesirable for quantity and unit to be separated by line breaks.

Fixes https://gitlab.gnome.org/GNOME/glib/issues/1625
2018-12-19 16:27:14 +00:00
Emmanuele Bassi
b709c6bde4 Merge branch 'rw-lock-docs' into 'master'
gthread: Clarify priority handling in GRWLock

See merge request GNOME/glib!376
2018-12-19 13:27:49 +00:00
Emmanuele Bassi
48c2d94d7b Merge branch 'gmarkup-docs' into 'master'
gmarkup: Make the documentation even more explicit about untrusted input

See merge request GNOME/glib!332
2018-12-19 13:27:05 +00:00