Commit Graph

6066 Commits

Author SHA1 Message Date
Philip Withnall
7a34e396ae gmain: Officially deprecate g_main_context_wait()
It’s been de-facto deprecated for a long time, due to emitting a
critical warning when used in a non-internal context. Make that official
in the documentation and with a deprecation annotation.

Split the implementation into an internal helper and an external
wrapper, so the two remaining internal uses don’t emit deprecation
warnings.

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

https://gitlab.gnome.org/GNOME/glib/issues/903
2018-06-26 09:30:19 +01:00
Philip Withnall
208a6e815a gmain: Add names to various GSources constructed in GLib
For the purposes of debugging, it is quite useful for every GSource to
have a name set. Ensure that any GSource we construct inside GLib has a
name set. For GSources which are then returned to the caller, this name
can then be overridden with something even more useful by the caller.

Since this data is only used for debugging, avoid doing any allocations
for it; just use static strings.

https://gitlab.gnome.org/GNOME/glib/issues/1175
2018-06-26 09:25:39 +01:00
Piotr Drąg
d9fc99256e Use Unicode typography in new translatable strings
See https://developer.gnome.org/hig/stable/typography.html
2018-06-25 16:51:00 +02:00
Philip Withnall
509ced6be5 Merge branch 'source-get-id-docs' into 'master'
gmain: Clarify documentation for g_source_get_id()

See merge request GNOME/glib!128
2018-06-25 13:18:32 +00:00
Philip Withnall
515dac258c gmain: Clarify documentation for g_source_get_id()
It’s good to know *which* GMainContext is used to determine the ID, and
the preconditions for calling this method.

Using wording suggested by Emmanuele Bassi <ebassi@gmail.com>.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2018-06-25 13:46:43 +01:00
Ting-Wei Lan
e14c853d9a gspawn: Declare environ
Function do_posix_spawn uses environ, but gspawn.c doesn't declare it.
Since there is no system header declaring this global variable, this
causes compilation error on FreeBSD.

Code added in this commit is copied from genviron.c.
2018-06-23 16:11:19 +08:00
Philip Withnall
0f77dc847b Merge branch 'wip/Jehan/fopen-modes' into 'master'
glib: Win32 does not accept "wb+" mode for fopen().

See merge request GNOME/glib!119
2018-06-22 17:24:14 +00:00
Jehan
ef4063c74d glib: add test for various modes of fopen().
This is especially to check for Win32 spotty support of "+" modes, such
as "wb+" which has to be replaced by "w+b".
See merge request !119.
2018-06-22 16:40:21 +02:00
Philip Withnall
ca98ce4280 Merge branch 'master' into 'master'
Use posix_spawn for optimized process launching

See merge request GNOME/glib!95
2018-06-21 17:10:43 +00:00
Daniel Drake
2b560457a0 gspawn: use sane_open() for stdin
sane_open() is used for stdout and stderr, but regular open() was being
used for stdin. Spotted by Philip Withnall.
2018-06-21 11:44:59 -05:00
Daniel Drake
86e2b8d427 gspawn: document FD_CLOEXEC behaviour
G_SPAWN_LEAVE_DESCRIPTORS_OPEN must be set to enable the optimized
posix_spawn codepath, so this flag is likely to see more usage now.

Document that FD_CLOEXEC can be used to cause file descriptors to be
automatically closed while this flag is used.
2018-06-21 11:44:59 -05:00
Daniel Drake
61f54591ac gspawn: Optimize with posix_spawn codepath
When the amount of free memory on the system is somewhat low, gnome-shell
will sometimes fail to launch apps, reporting the error:
  fork(): Cannot allocate memory

fork() is failing here because while cloning the process virtual address
space, Linux worries that the thread being forked may end up COWing the
entire address space of the parent process (gnome-shell, which is
memory-hungry), and there is not enough free memory to permit that to
happen.

In this case we are simply calling fork() in order to quickly call exec(),
which will throw away the entirity of the duplicated VM, so we should
look for ways to avoid the overcommit check.

The well known solution to this is to use clone(CLONE_VM) or vfork(), which
completely avoids creating a new memory address space for the child.
However, that comes with a bunch of caveats and complications:

  https://gist.github.com/nicowilliams/a8a07b0fc75df05f684c23c18d7db234
  https://ewontfix.com/7/

In 2016, glibc's posix_spawn() was rewritten to use this approach
while also resolving the concerns.
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=9ff72da471a509a8c19791efe469f47fa6977410

I experimented with a similar approach in glib, but it was not practical
because glibc has several items of important internal knowledge (such as
knowing which signals should be given special treatment because they are
NPTL implementation details) that are not cleanly exposed elsewhere.

Instead, this patch adapts the gspawn code to use posix_spawn() where
possible, which will reap the benefits of that implementation.
The posix_spawn API is more limited than the gspawn API though,
partly due to natural limitations of using CLONE_VM, so the posix_spawn
path is added as a separate codepath which is only executed when the
conditions are right. Callers such as gnome-shell will have to be modified
to meet these conditions, such as not having a child_setup function.

In addition to allowing for the gnome-shell "Cannot allocate memory"
failure to be avoided, this should result in a general speedup in this
area, because fork()'s behaviour of cloning the entire VM space
has a cost which is now avoided. posix_spawn() has also recently
been optimized on OpenSolaris as the most performant way to spawn
a child process.
2018-06-21 11:43:32 -05:00
Daniel Drake
3524de16e4 gspawn: Add g_spawn_async_with_fds variant
Add a new process spawning function variant which allows the caller
to pass specific file descriptors for stdin, stdout and stderr.
It is otherwise identical to g_spawn_async_with_pipes.

Allow the same fd to be passed in multiple parameters. To make this
workable, the child process logic that closes the fd after the first time
it has been dup2'ed needed tweaking; we now just set those fds to be
closed upon exec using the CLOEXEC flag. Add a test for this case.

This will be used by gnome-shell to avoid performing equivalent
dup2 actions in a child_setup function. Dropping use of child_setup will
enable use of an upcoming optimized process spawning codepath.
2018-06-21 11:43:32 -05:00
Jehan
2b6bfdb125 glib: Win32 does not accept "wb+" mode for fopen().
Nevertheless it accepts "w+b".
When checking the Win32 documentation of fopen()/_wfopen(), it clearly
states:
> In addition to the earlier values, the following characters can be
> appended to mode to specify the translation mode for newline
> characters.

This implementation expects 'b' or 't' to be appended, and therefore
"wb+" ends up with an error, whereas the alias "w+b" works perfectly
while it is exactly the same thing. So let's just have glib "translate"
the mode when it can to have it working transparently the same way on
every platform.
2018-06-21 13:55:19 +02:00
Philip Chimento
9e46b2ef11 gtester: Explicitly convert arguments of g_assert_cmpfloat()
Using g_assert_cmpfloat() with a float or double causes warnings on the
newest Clang version, because the macro internally promotes all values to
a long double, which Clang warns about. Casting explicitly removes the
warning.

Closes: #1377
2018-06-21 00:20:55 -07:00
Philip Withnall
0b9cdf07f7 Merge branch 'lrn/attachconsole' into 'master'
W32: add std stream redirection envvar options

Closes #1304

See merge request GNOME/glib!104
2018-06-20 11:21:43 +00:00
Руслан Ижбулатов
460cc723ad W32: add std stream redirection envvar options
This commit adds two W32-only environmental variable checks:
* G_WIN32_ALLOC_CONSOLE, if set to 1, will force glib to create
  a new console if the process has no console by itself.
  This option is for GUI apps that are launched from GUI
  processes, in which case there's no console anywhere near them.
* G_WIN32_ATTACH_CONSOLE, if set to a comma-separated list of
  standard stream names (stdint, stdout, stderr), will reopen
  a given std stream and tie it to the console (using existing console
  or parent console).
  This works either with the other option (to create a console),
  or if the app is launched from a console process (often the
  case for developers).
  The redirection is done with freopen(), dup() and dup2().
  If everything goes well, C file descriptors 0, 1 or 2 will
  be bound to stdin, stdout and stderr respectively (only for
  streams listed in the envrionmental variable), and so will
  be stdio streams by the same names.

With these it's possible to see the output of g_log*() functions
when running GTK4 applications, which are linked as GUI applications,
and thus do not get a console by default.

https://bugzilla.gnome.org/show_bug.cgi?id=790857

Fixes issue #1304
2018-06-20 10:53:30 +00:00
Emmanuele Bassi
df28cfe0b5 Merge branch '896-variant-type-docs' into 'master'
Documentation and typing improvements for GVariant bytes

Closes #896

See merge request GNOME/glib!117
2018-06-19 14:15:37 +00:00
Philip Withnall
dd51b05e19 Merge branch 'non-atomicity-of-g_file_set_contents' into 'master'
gfileutils: document non-atomicity of g_file_set_contents()

See merge request GNOME/glib!118
2018-06-19 11:13:50 +00:00
Xavier Claessens
75fd0109db Merge branch 'str-equal-docs' into 'master'
docs: Amend the docs for g_str_equal() to reflect current general usage

See merge request GNOME/glib!109
2018-06-15 14:53:19 +00:00
Will Thompson
c1a8e93dc4
gfileutils: document non-atomicity of g_file_set_contents()
This function only calls fsync() if @target exists and is non-empty. If
not, it doesn't provide the "old contents or new contents" guarantee
that one might expect. This has been the case since
d20a188b12, and is justified either as a
performance optimization or by asserting that this function only
guarantees to not destroy existing data (implicitly defining
non-existence or emptiness as not data).

In addition, explicitly spell out that whether it's atomic in the
non-empty case is system-dependent. If the system administrator has
configured some funky filesystem options, they may be out of luck on the
atomicity front.

https://gitlab.gnome.org/GNOME/glib/issues/1302
2018-06-15 14:47:47 +01:00
Philip Withnall
09419fdeb4 gvariant: Change type of ‘y’ variants from guchar to guint8
This fits better with the convention in the rest of GLib where arbitrary
8-bit values are represented as guint8, avoiding the potential confusing
of a name which references ‘char’s.

This is not an API break, as both guint8 and guchar are unconditionally
typedeffed to unsigned char.

https://gitlab.gnome.org/GNOME/glib/issues/896
2018-06-15 13:10:36 +01:00
Philip Withnall
ac690d9a8c docs: Amend the docs for g_str_equal() to reflect current general usage
People do (and should) use g_str_equal() for string comparisons outside
of hash tables, because it’s easier to read than
`strcmp (str1, str2) == 0`. That should not be discouraged.

However, we should still be careful to point out that g_str_equal() is
not NULL-safe, and g_strcmp0() is.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2018-06-14 18:12:42 +01:00
Nathan Miller
0b09890bff goption: Reject group options specified with three dashes
Commandline option parsing would recognize group options specified
with three dashes (i.e. ---foo 42).  This behaviour was limited to group
options.
2018-06-14 10:49:31 -05:00
Philip Withnall
d8c003dea6 Merge branch 'G_SOURCE_FUNC-macro' into 'master'
Add G_SOURCE_FUNC cast macro which suppresses -Wcast-function-type

See merge request GNOME/glib!82
2018-06-14 09:34:12 +00:00
Will Thompson
039fa6897b
Add G_SOURCE_FUNC cast macro which suppresses -Wcast-function-type
This is the workaround suggested by
https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wcast-function-type

This warning is not enabled by default during the GLib build, but
applications may want to opt into it.
2018-06-14 10:11:12 +01:00
Philip Withnall
d157102a54 gspawn: Factor out error code conversion function
This will be used in gspawn-win32.c too in an upcoming commit.

https://gitlab.gnome.org/GNOME/glib/issues/303

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2018-06-12 16:13:51 +01:00
Philip Withnall
6c8da69443 gspawn: Make error codes on Windows more specific
A slightly modified patch originally written by Morten Welinder
<terra@gnome.org> to make the error codes returned by g_spawn_*()
functions more specific when on Windows. They are already this specific
on Linux.

Add a unit test for the ENOENT case.

https://gitlab.gnome.org/GNOME/glib/issues/303

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2018-06-12 16:13:44 +01:00
Philip Withnall
f4d2051fc1 gspawn: Fix errno saving in Windows implementation
The error number was saved after some g_debug() and g_free() calls, in
various places, which meant it could have been overwritten since the
error we care about happened.

https://gitlab.gnome.org/GNOME/glib/issues/303

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2018-06-12 15:33:35 +01:00
Philip Withnall
54498aa7ae Merge branch 'lrn/binary-tests' into 'master'
Force binary mode for stdout in printf tests

See merge request GNOME/glib!89
2018-06-11 15:06:25 +00:00
Руслан Ижбулатов
ce1e32ec34 Force binary mode for stdout in printf tests
This allows test calls to produce output with \n
line separators on Windows, instead of \r\n.
Reduces the number of ifdefs, since all checks
can be done against one template on all platforms.
2018-06-11 14:20:34 +00:00
Emmanuele Bassi
927de4433e Port GHashTable to gatomicrefcount
Use the newly added API for reference counting instead of rolling our
own.
2018-06-11 14:59:39 +01:00
Emmanuele Bassi
e67e4cb849 Port GBytes to gatomicrefcount
Use the newly added API for reference counting instead of rolling our
own.
2018-06-11 14:59:39 +01:00
Emmanuele Bassi
439ee4822e Port GArray and friends to gatomicrefcount
Use the newly added API for reference counting instead of rolling our
own.
2018-06-11 14:59:39 +01:00
Emmanuele Bassi
09e2247d3f Add tests for refcount types
Test that the API behaves as expected, especially when we get to
saturation.

Additionally, check that both the function and the macro versions of the
API behave identically.
2018-06-11 14:59:39 +01:00
Emmanuele Bassi
827c208cbf Use macros for refcount types API
If we're using GCC we can use __extension__ to inline the grefcount and
gatomicrefcount API, and avoid the function call.

These macros are only enabled if G_DISABLE_CHECKS is defined, as they
remove critical warnings when the reference counters achieve saturation.
2018-06-11 14:59:39 +01:00
Emmanuele Bassi
9e5a53d576 Add reference counting types
We have a common pattern for reference counting in GLib, but we always
implement it with ad hoc code. This is a good chance at trying to
standardise the implementation and make it public, so that other code
using GLib can take advantage of shared behaviour and semantics.

Instead of simply taking an integer variable, we should create type
aliases, to immediately distinguish the reference counting semantics of
the code; we can handle mixing atomic reference counting with a
non-atomic type (and vice versa) by using differently signed values for
the atomic and non-atomic cases.

The gatomicrefcount type is modelled on the Linux kernel refcount_t
type; the grefcount type is added to let single-threaded code bases to
avoid paying the price of atomic memory barriers on reference counting
operations.
2018-06-11 14:59:39 +01:00
Paul Eggert
137dd7789b gtimezone: port to tzcode 2014c
Problem reported by Marien Zwart in:
https://gitlab.gnome.org/GNOME/glib/issues/878
Derived from a fix by John Ralls proposed in that bug report.
2018-06-11 14:30:16 +01:00
Philip Withnall
ad957b6630 Merge branch 'wip/piotrdrag/unicode-typography' into 'master'
Fix tests for Unicode strings

Closes #1212

See merge request GNOME/glib!75
2018-06-11 11:03:43 +00:00
Emmanuele Bassi
16d1a3d28c Classify the tests
Meson has the ability to classify tests according to "suites", a list of
tags. This is especially useful when we want to run specific sets of
tests — e.g. only GLib's tests — instead of the whole test suite. It
also allows us to classify special tests, like "slow" ones, so that we
can only run them when needed.
2018-06-10 15:33:06 +01:00
Piotr Drąg
b974cccdaf Revert "Partially revert 10c490cdfe3ae042f747bd00f787492e2bdb7ed0"
This reverts commit 2d56c49b10.
2018-06-08 16:15:54 +02:00
Piotr Drąg
0bb3cacacb Fix tests for Unicode strings
Based on a patch by Simon McVittie <simon.mcvittie@collabora.co.uk>.

Fixes: https://gitlab.gnome.org/GNOME/glib/issues/1212
2018-06-08 16:13:52 +02:00
Christoph Reiter
bb92a03d68 Merge branch 'array-allocations' into 'master'
garray: Optimise over-allocations with g_array_insert_vals()

See merge request GNOME/glib!53
2018-06-07 08:06:15 +00:00
Chun-wei Fan
4bb173b297 build: Remove leftovers of Visual Studio project stuff
There are more leftover preconfigured stuff that we ought to remove...
2018-06-06 23:54:13 +08:00
Chun-wei Fan
efd19088b0 Drop config.h.win32.in and glib/glibconfig.h.win32.in
Since the Visual Studio projects are dropped, the pre-configured
config.h.win32.in and glib/glibconfig.h.win32.in are no longer needed.
2018-06-06 23:54:13 +08:00
Chun-wei Fan
f658e94e65 build: Drop Visual Studio projects
In master, it is already possible to build GLib using Visual Studio
using Meson[1] for some time, so we should focus on maintaining only the
Meson build files for building GLib with Visual Studio.

[1]: There are caveats when building with Visual Studio 2008, namely
     that one needs to use the mt command to embed the manifests that
     are generated with the .exe/DLLs, for all builds, and that in the
     case where the compilation hangs on Visual Studio 2008 x64, as a
     workaround, should stop the build by terminating all cl.exe tasks
     and change the compiler optimization flag from /O2 (full speed) to
     /O1 (optimize for size), due to compiler optimization issues.
2018-06-06 23:54:13 +08:00
Will Thompson
0f7c196c21
g_clear_handle_id: don't accept NULL clear_func
Fixes #1401.
2018-06-04 13:11:49 +01:00
Philip Withnall
e1e8002998 garray: Optimise over-allocations with g_array_insert_vals()
When over-allocating by inserting values off the end of an array, maybe
expand the array once, rather than twice (once for setting the size and
once for appending the values).

Suggestion by Peter Bloomfield (@peterb) as a follow-up to #1374.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2018-06-04 11:45:48 +01:00
Philip Withnall
80243e65b6 tests: Expand GArray test coverage to cover all construction forms
Previously, there was very little coverage of GArray behaviour with
either of the zero_terminated or clear_ arguments to g_array_new() set
to TRUE.

Parameterise the tests and exhaustively expand the coverage to cover all
possible GArray configurations.

This was made possible by the online code coverage report for GLib which
we now have:
https://gnome.pages.gitlab.gnome.org/glib/coverage/glib/garray.c.gcov.html.

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

https://bugzilla.gnome.org/show_bug.cgi?id=795975
2018-06-04 11:11:26 +01:00
Philip Withnall
89f45e96b2 garray: Allow over-allocation in g_array_insert_vals()
Previously, g_array_insert_vals() would crash if called with an index
off the end of the array. This is inconsistent with the behaviour of
other methods (like g_array_set_size()), which will expand the array as
necessary.

Modify g_array_insert_vals() to expand the array as necessary. New array
elements will be cleared to zero if the GArray was constructed with
(clear_ == TRUE).

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

https://bugzilla.gnome.org/show_bug.cgi?id=795975
2018-06-04 11:11:26 +01:00
Philip Withnall
3eeec77800 garray: Fix (nullable) annotation on GArray.[prepend|insert]_vals()
They do both accept NULL value arrays, but only if the number of
elements in the value array is zero. Fix the annotations and mention
this in the documentation.

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

https://bugzilla.gnome.org/show_bug.cgi?id=795975
2018-06-04 11:11:26 +01:00
Christoph Reiter
3aa23078ac build: Remove the --disable-mem-pools build option and the DISABLE_MEM_POOLS macro
It's mostly not used anymore and doesn't do what it says it does.

The docs state that it affects GList, GSList, GNode, GMemChunks, GSignal,
GType n_preallocs and GBSearchArray while:

* GList, GSList and GNode use GSlice and are not affected
* GMemChunks is gone
* GType npreallocs is ignored

It also states that it can be used to force the usage of g_malloc/g_free,
which is handled by G_SLICE=always-malloc now.

The only places where it's used is in signal handling through GBSearchArray
and in GValueArray (deprecated). Since it's unlikely that anyone wants to
reduce allocation sizes just for those cases remove the build option.
2018-06-02 09:45:55 +02:00
Xavier Claessens
a3c061a814 Merge branch 'remove-gc-friendly-default' into 'master'
Remove unused ENABLE_GC_FRIENDLY_DEFAULT and its build option

See merge request GNOME/glib!43
2018-05-31 17:36:25 +00:00
Xavier Claessens
09b8c6d24b Merge branch 'remove-secure-libc' into 'master'
Remove unused HAVE_LIBC_ENABLE_SECURE  and add a glibc implementation for g_check_setuid

See merge request GNOME/glib!45
2018-05-31 16:20:12 +00:00
Emmanuele Bassi
54db9d3fc3 Merge branch 'remove-posix-memalign-compl-check' into 'master'
Remove posix_memalign() checks for an old glibc bug

See merge request GNOME/glib!47
2018-05-31 13:03:41 +00:00
Christoph Reiter
fe59a18f89 Remove posix_memalign() checks for an old glibc bug
POSIX_MEMALIGN_WITH_COMPLIANT_ALLOCS was added in
https://bugzilla.gnome.org/show_bug.cgi?id=328254
to work around a glibc bug where it wrongly checked the size argument
to be a power of two instead of the alignment.

This was fixed in glibc in
https://sourceware.org/git/?p=glibc.git;a=commit;h=b2bffca2e3b59dd882039e3b0ab835d127bdaf7a
about 16 years ago.
2018-05-31 14:29:33 +02:00
Christoph Reiter
b6c81d139c Remove NO_FD_SET and assume fd_set exists
gspawn.c is using fd_set without checks for 17 years now and the NO_FD_SET check was added
19 years ago.
2018-05-31 13:31:55 +02:00
Christoph Reiter
a7fefb0e4e g_check_setuid: implement using getauxval(AT_SECURE) with glibc
See commit 4c2928a544 for why checking AT_SECURE is preferable compared
to UID checks as currently done in the fallback case.

getauxval() was added with glibc 2.16

While glibc <2.19 didn't provide a way to differentiate a 0 return value from an error,
passing AT_SECURE should always succeed according to
https://sourceware.org/ml/libc-alpha/2014-07/msg00407.html
I've added an errno check anyway, to be on the safe side.
2018-05-31 12:02:36 +02:00
Christoph Reiter
41165b2a7e Remove unused HAVE_LIBC_ENABLE_SECURE
It was added in 4c2928a544 to potentially enable accessing
AT_SECURE through __libc_enable_secure, but was never enabled.

Newer glibc provides getauxval(AT_SECURE) which should be used instead.
Add a TODO note for that.
2018-05-31 10:58:27 +02:00
Christoph Reiter
118332dd5c Remove unused ENABLE_GC_FRIENDLY_DEFAULT and its build option
ENABLE_GC_FRIENDLY_DEFAULT was supposed to set the default for the gc friendliness
while still allowing to force enable it at runtime with G_DEBUG=gc-friendly.

With commit 943a18b564 (6 years ago) things were changed to always set it
according to the content of G_DEBUG in glib_init(), making the default unused.

Since nobody complained since then just remove the macro and the build option.
2018-05-31 07:19:12 +02:00
Philip Withnall
2dce3ce125 Merge branch 'win-date-fixes' into 'master'
gdate: Use a more recent year when fetching the month names. Fixes #1386

Closes #1386

See merge request GNOME/glib!40
2018-05-29 16:35:12 +00:00
Christoph Reiter
a2aa91ae5d win32: Remove all remaining WinXP compat code
Remove all code which is no longer built with Windows 7+
2018-05-29 17:16:38 +02:00
Christoph Reiter
cce2957938 gthread-win32: Remove WinXP compat code 2018-05-29 17:11:32 +02:00
Christoph Reiter
0458f4728f gdate: Use a more recent year when fetching the month names. Fixes #1386
g_date_strftime() on Windows uses the SYSTEMTIME structure which requires the
year to be >=1601. Passing 1 results in a negative SYSTEMTIME.wYear
which makes GetDateFormatW() fail and crashes due to missing error handling.

Just use 1976 as that's already used a few lines down.
2018-05-29 15:42:19 +02:00
Emmanuele Bassi
0b4c2eefce Add fuzzy floating point comparison macro
Add a test macro that allows comparing two floating point values for
equality within a certain tolerance.

This macro has been independently reimplemented by various projects:

 * Clutter
 * Graphene
 * colord

https://gitlab.gnome.org/GNOME/glib/issues/914
2018-05-29 10:02:47 +01:00
Emmanuele Bassi
24e98e38d6 Add a macro for checking approximate values
A macro like this is useful to avoid direct comparisons between floating
point values.

https://gitlab.gnome.org/GNOME/glib/issues/914
2018-05-29 09:55:47 +01:00
Xavier Claessens
707106c7a5 Fix Windows build errors in valgrind.h
valgrind.h is a verbatim copy taken from Valgrind project. Previously
that file had local changes that got dropped by last update. To avoid
regressing again, do not edit valgrind.h anymore and instead add a
gvalgrind.h wrapper that gets included instead.

This fix 2 errors:
- uintptr_t is not defined when including valgrind.h on mingw.
- MSVC compiler is not supported on amd64-Win64 platform.
2018-05-28 09:22:55 -04:00
Xavier Claessens
f9dc091e37 Revert "glib/valgrind.h: Disable inline ASM on MSVC x64 builds"
Better not modify copy/paster files otherwise this will regress again
later. It's better to not include valgrind.h at all when using MSVC.

This reverts commit bbcce75d4e.
2018-05-28 09:22:55 -04:00
Sven Neumann
ac0999a1cf gtester: fix test result in gtester XML report
This was accidentally broken with the changes done for
https://bugzilla.gnome.org/show_bug.cgi?id=790934
2018-05-28 13:45:50 +01:00
Philip Withnall
a431f4fe3e Merge branch 'win32-usleep-ceil' into 'master'
g_usleep: round up the next millisecond on Windows. See #1371

See merge request GNOME/glib!24
2018-05-28 10:18:28 +00:00
Philip Withnall
17d278e1d3 Merge branch 'win32-gcond-wait-until-at-least' into 'master'
win32: make g_cond_wait_until() wait at least until end_time before returning…

See merge request GNOME/glib!21
2018-05-28 10:13:10 +00:00
Руслан Ижбулатов
4227770af6 W32: Make _g_win32_get_system_data_dirs() inline available in C++
This way g_get_system_data_dirs() works the same way in C and C++.

https://bugzilla.gnome.org/show_bug.cgi?id=777501

Closes #1240
2018-05-28 08:41:11 +00:00
Christoph Reiter
583fb1a397 win32: make g_cond_wait_until() wait at least until end_time before returning with a timeout. See #1371
The tests in test_async_queue_timed() assume that g_async_queue_timeout_pop()
and in turn g_cond_wait_until() wait at least until end_time
before returning, i.e. calling g_get_monotonic_time() after the timeout should result
in a value equal or larger than the timeout end time.

For the win32 implementation of g_cond_wait_until() this isn't the case which
makes those tests fail.

There are three reasons why the function returns early:

1) The underlying API works with milliseconds and the timeout gets rounded
   down, resulting in a too small timeout value.
2) In case the timeout is too large to be passed to the API it gets limited
   (there is also a bug because it converts INFINITE to milliseconds while
   they already are, but using INFINITE would be wrong as well, as passing
   a large timeout is not the same as blocking forever really)
3) Even with the rounding changed the underlying API still returns a bit early
   sometimes on my machine (relative to g_get_monotonic_time())

This changes the implementation to round up to the next millisecond (fixing 1)
and to wait again in case a timeout occurs but the end time hasn't been
reached yet (fixing 2 and 3).

This makes the test_async_queue_timed() tests pass.

https://bugzilla.gnome.org/show_bug.cgi?id=795569
2018-05-27 11:09:29 +02:00
Christoph Reiter
01c02ac08b g_usleep: round up the next millisecond on Windows. See #1371
The timer tests expect that a small value for sleep does not result in
no sleep at all. Round up to the next millisecond to bring it more in line
with other platforms.

This fixes the glib/timer tests.

This makes the 'threadtests' time out since that uses small usleeps a lot and
until now didn't wait at all, but now always waits a msec. Reduce the amount
of tests done on Windows to get the runtime down to something reasonable again.

https://bugzilla.gnome.org/show_bug.cgi?id=795569
2018-05-27 09:23:25 +02:00
Christoph Reiter
79af48791a msvc: build the glib tests and ignore the test outcome
This makes the tests build under VS2015/2017.
Since some of them fail, similar to the mingw build, ignore any test errors for now.
2018-05-27 08:14:06 +02:00
Christoph Reiter
e894534314 tests: Increase the timeout of the 'objects2' and 'sequence' tests. Fixes #1393
These two still fail occasionally due to timeouts, so increase it a bit.
2018-05-26 20:19:53 +02:00
Xavier Claessens
d89c8894a8 gslice: Use g_fprintf() instead of fprintf()
G_GSIZE_FORMAT and friends cannot always be used with fprintf(), they
require gnu/C99 implementation.

https://bugzilla.gnome.org/show_bug.cgi?id=796283
2018-05-26 13:09:56 +05:30
Jan Alexander Steffens (heftig)
c7d11d3418
macros: Double-cast func for g_autolist to avoid warning
For g_autolist and g_autoslist, the cleanup func was cast to
GDestroyNotify before being passed to g_(s)list_free_full. This cast
provokes GCC 8 to emit a warning if the return type is not void:

    …/gmacros.h:462:99: warning: cast between incompatible function types
    from … to 'void (*)(void *)' [-Wcast-function-type]

Cast to 'void (*)(void)' first, which suppresses the warning as
recommended by the GCC documentation. g_autoptr remains untouched.

Fixes https://gitlab.gnome.org/GNOME/glib/issues/1382
2018-05-25 14:14:40 +02:00
Colin Walters
b41bff1fe9
gmacros: Add G_GNUC_UNUSED for autoptr funcs (notably GLists)
In commit f49a93b207
from bug https://bugzilla.gnome.org/show_bug.cgi?id=791342
we added two new static inline cleanup helpers in case a type was
used inside a list.

These functions will commonly be unused.

In rpm-ostree, we run a build using `CC=clang -Werror=unused` because
it catches `g_autofree char *foo = NULL;` as unused, but GCC doesn't.
When trying to update to F28 with a newer glib, our CI fell over on this.

Mark all of the autocleanups as "maybe unused".
2018-05-25 14:04:58 +02:00
Chun-wei Fan
bbcce75d4e glib/valgrind.h: Disable inline ASM on MSVC x64 builds
Visual Studio x64 builds do not allow inline assembly code, so we need
to re-add the code that disables inline assembly when we build with
Visual Studio for x64 builds, as we did before.  This is necessary when
we update the included valgrind.h.
2018-05-25 17:16:22 +08:00
Christoph Reiter
f92d179f77 tests/strfuncs: drop some redundant test code
The loop was testing that all strings in the hash table are valid
utf-8, but the loop filling the hash table is already doing that.

https://bugzilla.gnome.org/show_bug.cgi?id=795569
2018-05-24 23:17:08 +02:00
Christoph Reiter
dad754f5bc tests/strfuncs: mingw-w64 prints 3 digits for the %e exponent
Filed and fixed upstream: https://sourceforge.net/p/mingw-w64/bugs/732/

Once we get a new release in MSYS2 or when we get better gnulib integration
this special case needs to be removed again, but for now this will do.

https://bugzilla.gnome.org/show_bug.cgi?id=795569
2018-05-24 23:17:08 +02:00
Christoph Reiter
044e65ee28 tests/strfuncs: handle unknown error codes when testing g_strerror
The tests checks that g_strerror returns unique error messages for
all error codes between 1-200, but under Windows only a small range of them
is actually used: https://msdn.microsoft.com/en-us/library/t3ayayh1.aspx

Change the test to check that the returned message is either unique or
matches the error message for unknown codes instead.

https://bugzilla.gnome.org/show_bug.cgi?id=795569
2018-05-24 23:17:08 +02:00
Christoph Reiter
3e5477b04b tests/logging: Don't hardcode the result of logging a pointer
The output of the %p type is implementation defined and on Windows we get
leading zeros depending on the pointer type size. Instead of adding
ifdeffery use g_snprintf() to generate the expected message.

https://bugzilla.gnome.org/show_bug.cgi?id=795569
2018-05-24 23:17:03 +02:00
Peter Bloomfield
1a6be02260 gmem.h: Use typeof() in g_steal_pointer() macro
g_steal_pointer is both an inline function, returning gpointer, and a
macro that casts the return value to the type of its argument. The first
version of the macro uses '0 ? (*(pp)) : (g_steal_pointer) (pp)' to cast
the return value to the type of *pp, but this fails to yield warnings
about incompatible pointer types with current gcc. Apparently the
ternary operator is optimized away before the type of the expression is
determined.

The typeof() (or __typeof__()) operator allows an explicit cast.

https://bugzilla.gnome.org/show_bug.cgi?id=742456

https://bugzilla.gnome.org/show_bug.cgi?id=796341
2018-05-23 17:49:31 +01:00
Руслан Ижбулатов
52c45a102b W32: check filename for being NULL in g_stat()
Previous version of this function started with a call to g_utf8_to_utf16(),
which also served as a NULL check, since g_utf8_to_utf16() just returns NULL
on NULL strings. Current version of this function does some filename string
checks first and converts it to utf16 only after these checks are done, and
these checks do not take into account the possibility of filename being NULL.

Fix this by explicitly checking for NULL.
2018-05-22 16:43:35 +00:00
Christoph Reiter
a9164f55f7 docs: Add a note that the printf format macros might not be compatible with system printf()
The current docs implied, by using the printf name, that the macros would
be compatible with printf(), but that's not always the case.

On Windows we use gnulib if the system printf isn't good enough.
This can happen on MinGW without __USE_MINGW_ANSI_STDIO set or with MSVC
with a varrying degree of incompatibility.

https://bugzilla.gnome.org/show_bug.cgi?id=795569
2018-05-18 18:54:33 +02:00
Xavier Claessens
2477c7b05f Meson: add 'force_posix_threads' option
This allows building with posix threads on Windows. It is generally
better to use win32 threads implementation on Windows, but this option
can be used in case it causes issues, or for performance comparison for
example.

https://bugzilla.gnome.org/show_bug.cgi?id=784995
2018-05-16 10:21:07 -04:00
Xavier Claessens
4b82738f0a Meson: Add missing flags on Windows
win32_cflags gets used globally as cflags and exposed in the .pc file.
win32_ldflags gets passed to glib-2.0 and exposed in the .pc file.

This should match what the autotools build is currently doing with
GLIB_EXTRA_CFLAGS and G_LIBS_EXTRA.

https://bugzilla.gnome.org/show_bug.cgi?id=784995
2018-05-16 10:19:08 -04:00
Philip Withnall
12de474808 gtimezone: Fix two minor leaks in zone_info_unix()
• A leak of filename on an error path
 • A leak of resolved_identifier if no out_identifier return location
   was provided

The latter was spotted by Peter Bloomfield
(8945227743 (note_111254)).
Thanks!

Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-05-16 11:27:25 +01:00
Nirbheek Chauhan
a9fe62aa2c gwin32: Fix detection of MinGW32 vs MinGW-w64
__MINGW32__ is defined on all MinGW variants including MinGW-w64.
__MINGW64_VERSION_MAJOR is only defined on MinGW-w64.

This difference is important because on MinGW-w64 we must #include
winternl.h because including ntdef.h results in compiler errors
about symbol redefinition, and the header warns that it is deprecated
and may be removed in the future.

https://bugzilla.gnome.org/show_bug.cgi?id=795849
2018-05-16 11:07:30 +01:00
Xavier Claessens
7b8d8835f5 Meson: libintl is a public dependency of glib-2.0
On non-glibc platforms gettext is provided by extra libintl dependency.
We wrongly thought libintl is an internal dependency and applications
needs to explicitly link on it, but turns out that breaks many
applications and with autotools the .pc generated actually has -lintl in
public "Libs:".

https://bugzilla.gnome.org/show_bug.cgi?id=796085
2018-05-15 13:00:44 -04:00
Philip Withnall
1f20ddbb55 gqueue: Document to use GAsyncQueue for thread-safe queuing
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-05-15 12:50:50 +01:00
Philip Withnall
d0a48f26c7 garray: Add g_ptr_array_steal_index*() functions
These make it easy to steal elements from pointer arrays without having
the array’s GDestroyNotify called on them, similarly to what’s possible
with g_hash_table_steal().

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

https://bugzilla.gnome.org/show_bug.cgi?id=795376
2018-05-09 13:52:05 +01:00
Philip Withnall
e6200eaea2 garray: Document that return value of g_ptr_array_remove() may be junk
If using g_ptr_array_remove*() with a non-NULL GDestroyNotify function,
the value returned will probably be freed memory (depending on what the
GDestroyNotify) function actually does. Warn about that in the
documentation. We can’t just unconditionally return NULL in these cases,
though, since the user might have set the GDestroyNotify to a nifty
function which doesn’t actually free the element; so returning it might
still be valid and useful.

Also add missing (nullable) annotations to that documentation.

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

https://bugzilla.gnome.org/show_bug.cgi?id=795376
2018-05-09 13:52:05 +01:00
Philip Withnall
2c9a84e5a3 garray: Factor out implementation of g_ptr_array_remove_index*()
They were almost identically the same. This introduces no functional
changes, but will help with upcoming additions to GPtrArray.

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

https://bugzilla.gnome.org/show_bug.cgi?id=795376
2018-05-09 13:52:05 +01:00
Xavier Claessens
b6cb22f32b Meson: Do not build tests with nodelete/Bsymbolic-functions
-z nodelete breaks the libresourceplugin module usage in the resources.c
test, which expects to be able to unload it.

Make the Meson build match what the autotools build does: only pass
glib_link_flags to the headline libraries (glib-2.0, gio-2.0,
gobject-2.0, gthread-2.0, gmodule-2.0) and omit it from all other build
targets.

https://bugzilla.gnome.org/show_bug.cgi?id=788771
2018-05-09 12:52:59 +01:00
Christian Hergert
ede5c3f8d9 macros: add G_GNUC_NO_INLINE function attribute
https://bugzilla.gnome.org/show_bug.cgi?id=795180
2018-05-09 12:25:06 +01:00
okimoto
2fd0627326 gutils: Fix deprecation annotation for g_format_size_for_display()
It was deprecated in 2.30.

https://bugzilla.gnome.org/show_bug.cgi?id=795960
2018-05-09 10:52:15 +01:00
Philip Withnall
6acece5074 ghash: Add g_hash_table_steal_extended()
This is a combination of g_hash_table_lookup_extended() and
g_hash_table_steal(), so that users can combine the two to reduce code
and eliminate a pointless second hash table lookup by
g_hash_table_steal().

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

https://bugzilla.gnome.org/show_bug.cgi?id=795302
2018-05-08 12:41:13 +01:00
Philip Withnall
864cb71524 glib: Update internal copy of valgrind.h from Valgrind 3.13 release
Update our copy of valgrind.h from the Valgrind 3.13 release tarball.
This seems to include fixes for PPC and Solaris. No changes made to the
header file.

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

https://bugzilla.gnome.org/show_bug.cgi?id=736741
2018-05-08 12:37:20 +01:00
Philip Withnall
0adbeacd01 gregex: Highlight in the docs that input must be in UTF-8
Signed-off-by: Philip Withnall <withnall@endlessm.com>

https://bugzilla.gnome.org/show_bug.cgi?id=748620
2018-05-08 12:27:55 +01:00
Philip Withnall
f75624f593 gregex: Highlight some argument names in the documentation
Signed-off-by: Philip Withnall <withnall@endlessm.com>

https://bugzilla.gnome.org/show_bug.cgi?id=748620
2018-05-08 12:27:55 +01:00
Philip Withnall
fe35f577b0 gregex: Clarify units in documentation
Make it a bit clearer that all lengths passed to GRegex methods are in
bytes (not characters). This is mentioned in the section overview, but
who reads that?

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

https://bugzilla.gnome.org/show_bug.cgi?id=748620
2018-05-08 12:27:55 +01:00
Christoph Reiter
98a0ab929d Always assume that we use a gnu/c99 printf implementation
On Windows we use gnulib and elsewhere we use glibc or similar.

Also change G_GNUC_PRINTF to use gnu_printf instead of __format__ if
possible because __format__ evaluates to ms_printf under MinGW,
but we use gnulib there and not the system printf.
gnu_printf is only available with GCC>=4.4 and not with clang.

https://bugzilla.gnome.org/show_bug.cgi?id=795569
2018-05-07 19:50:25 +02:00
Ting-Wei Lan
50677e9336 gtimezone: Fallback to /var/db/zoneinfo on FreeBSD
The timezone setup utility of FreeBSD, tzsetup, which is run during the
installation, creates /etc/localtime by copying the chosen timezone file
from /usr/share/zoneinfo. Although it can correctly deal with the case
where /etc/localtime is a symlink, it is not the default and there is no
user interface to change the default copying behaviour.

Fortunately, tzsetup has been modified to write the name of the chosen
timezone to /var/db/zoneinfo in 2009, so we can know the name of the
current timezone by reading it. DragonflyBSD also seems to do the same
thing in its tzsetup.

https://svnweb.freebsd.org/changeset/base/198267
https://bugzilla.gnome.org/show_bug.cgi?id=795165
2018-05-02 17:33:10 +01:00
Ting-Wei Lan
a0c7f85437 tests: Fix GDateTime format tests on non-English locales
It seems that the test expects g_date_time_format to return formatted
results in English, and there is no setlocale (LC_ALL, "") call in the
file so the test does run in the default C locale. However, gettext
seems to read the value of LC_MESSAGES from the environment by itself.
Even if the value of LC_MESSAGES locale is C because of not calling
setlocale, gettext still translates the name of the month according to
the LC_MESSAGES environment variable, causing g_date_time_format_locale
to fail on the "%b" test case because it cannot convert UTF-8 text
returned by get_month_name_with_day to ASCII.

To avoid the test failure, we set the LC_MESSAGES environment variable
to C before format tests and restore it at the end of the function.

https://bugzilla.gnome.org/show_bug.cgi?id=795165
2018-05-01 21:43:23 +01:00
Philip Withnall
c47cf7355c gfileutils: Add missing ‘Since’ line to g_canonicalize_filename() docs
I missed this in code review.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-05-01 08:51:57 +01:00
Georges Basile Stavracas Neto
cb32614382 timezone: Correctly resolve symlink from /etc/localtime
The return value of g_file_read_link ("/etc/localtime") can
be a relative path in the form of "../usr/share/zoneinfo".
This breaks the prefix check that is performed, and makes
the timezone identifier be "../usr/share/zoneinfo/America/Sao_Paulo",
for example, which breaks other parts of the system.

Fix that by canonicalizing the symlink path if we detect
is it a relative path.

(Tweaked by Philip Withnall <withnall@endlessm.com> to remove a
conditional which was unnecessary.)

https://bugzilla.gnome.org/show_bug.cgi?id=111848
2018-04-30 21:59:22 +01:00
Georges Basile Stavracas Neto
b9b642de06 fileutils: Add g_canonicalize_filename
Getting the canonical filename is a relatively common
operation when dealing with symbolic links.

This commit exposes GLocalFile's implementation of a
filename canonicalizer function, with a few additions
to make it more useful for consumers of it.

Instead of always assuming g_get_current_dir(), the
exposed function allows passing it as an additional
parameter.

This will be used to fix the GTimeZone code to retrieve
the local timezone from a zoneinfo symlink.

(Tweaked by Philip Withnall <withnall@endlessm.com> to drop g_autofree
usage and add some additional tests.)

https://bugzilla.gnome.org/show_bug.cgi?id=111848
2018-04-30 21:54:31 +01:00
Philip Withnall
9b4c50f63d all: Remove trailing newlines from g_message()/g_warning()/g_error()s
All those logging functions already add a newline to any message they
print, so there’s no need to add a trailing newline in the message
passed to them.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-04-27 16:46:19 +01:00
Philip Withnall
9365e212f8 More const-correctness fixes
This continues one of the const-correctness fixes from the previous
commit (it needed some more transitive fixes), and reverts another of
them, since it was over-zealous.

This fixes CI failure: https://gitlab.gnome.org/GNOME/glib/-/jobs/27125.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-04-26 15:35:58 +01:00
Philip Withnall
22cd18500d Fix various const-correctness issues
Spotted when temporarily compiling with -Wwrite-strings. This only goes
a small way towards making the code base -Wwrite-strings–clean. It
introduces no functional changes, and fixes no bugs.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-04-26 15:19:17 +01:00
Philip Withnall
9cbfb56061 gutils: Fix deadlock if g_get_home_dir() fails when called twice
If g_get_home_dir() calculated a NULL home directory (due to $HOME being
unset and /etc/passwd being inaccessible, for example due to an
overly-zealous LSM), it would call g_once_init_leave (&home_dir, NULL),
which would emit a critical and fail to leave the GOnce critical
section. That meant that the following call to g_get_home_dir() would
deadlock in g_once_init_enter().

Fix that by setting the home directory to a made-up value in such cases
(which the documentation handily already explicitly allows).

Thanks to Simon McVittie for the analysis leading to an easy patch.

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

https://bugzilla.gnome.org/show_bug.cgi?id=773435
2018-04-26 15:19:17 +01:00
Christoph Reiter
0d10dd9fe5 tests/autoptr: Don't use /dev/null under Windows
Use the "nul" device instead.

https://bugzilla.gnome.org/show_bug.cgi?id=795569
2018-04-26 13:01:25 +02:00
Philip Withnall
a8b4d516aa gsequence: Various minor typo and reference fixes to the documentation
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-04-26 11:34:15 +01:00
Xavier Claessens
01e8396301 Fix build when pthread_getname_np is not available
On Android _setname_ is always available but _getname_ is available only
with API level >= 26.

https://bugzilla.gnome.org/show_bug.cgi?id=795406
2018-04-25 13:56:14 -04:00
Christoph Reiter
97c28f7fe1 ci: fix warnings and enable --werror for the mingw build
Fix various warnings regarding unused variables, duplicated
branches etc by adjusting the ifdeffery and some missing casts.

gnulib triggers -Wduplicated-branches in one of the copied files,
disable as that just makes updating the code harder.

The warning indicating missing features are made none fatal through
pragmas. They still show but don't abort the build.

https://bugzilla.gnome.org/show_bug.cgi?id=793729
2018-04-25 17:23:50 +02:00
Christoph Reiter
d137cebf8f meson: Disable -Wformat-nonliteral for the embedded gnulib
glib enables -Werror=format-nonliteral by default which is triggered
by the embedded gnulib (in vasnprintf.c). Disable that warning
for gnulib alone. The gnulib code is there to handle user provided
format strings, so the warning doesn't add anything anyway.

This fixes the build under MinGW.

https://bugzilla.gnome.org/show_bug.cgi?id=793729
2018-04-25 17:23:49 +02:00
Allison Lortie
ad3b2f2387 gmessages: clarify what log levels are for
For a long time we've had it as 'common knowledge' that criticals are
for programmer errors and warnings are for external errors, but we've
never documented that.  Do so.

(Modified by Philip Withnall <withnall@endlessm.com> to apply cleanly to
master; rearranged to fit in with current master documentation.)

https://bugzilla.gnome.org/show_bug.cgi?id=741049
2018-04-23 13:01:17 +01:00
Руслан Ижбулатов
cf58171342 fileutils test - use UIDs only on *nix
As usual, only call getuid() or geteuid() if G_OS_UNIX is defined.
2018-04-21 20:52:57 +00:00
Sam Spilsbury
0e1a26dc49 garray: Steal segment during destruction
And warn in other parts of the code if the caller attempts
to change the array bounds during destruction, this is not
a valid operation.

(Tweaked by Philip Withnall <withnall@endlessm.com> to not use inline
for loop declarations, since we can’t support them in GLib at the
moment.)

https://bugzilla.gnome.org/show_bug.cgi?id=769064
2018-04-20 13:56:55 +01:00
Philip Withnall
c8cbfd551c tests: Skip some of the fileutils tests when running as root
The tests which check permissions and errors like EACCES aren’t going to
work as root, since root always has permission to do things. Skip them
if running as root.

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

https://bugzilla.gnome.org/show_bug.cgi?id=766390
2018-04-13 15:33:33 +01:00
Philip Withnall
33749d837c gdate: Comment that g_date_valid_dmy() does all necessary bounds checks
Make it more obvious that an explicit check isn’t needed for the upper
bound on years, since it’s limited by the type width.

Add a unit test to demonstrate this.

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

https://bugzilla.gnome.org/show_bug.cgi?id=540013
2018-04-13 15:31:47 +01:00
Philip Withnall
f9ff79704c gdate: Make integer comparisons explicit
GDate.dmy is a 1-bit bitfield which is treated as a boolean. However,
it’s still an integer, and we can’t really treat it like a gboolean
because it’s a bitfield. Make the comparisons with it explicitly compare
integers, rather than implicitly, to make it more obvious that it is
actually an integer.

This introduces no functional changes.

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

https://bugzilla.gnome.org/show_bug.cgi?id=335731
2018-04-13 15:28:06 +01:00
Philip Withnall
38080bad05 gdate: Add overflow precondition checks for g_date_[add|subtract]_*()
These turn undefined or hard-to-detect misbehaviour into a well-defined
critical warning and early return.

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

https://bugzilla.gnome.org/show_bug.cgi?id=335731
2018-04-13 15:26:51 +01:00
Philip Withnall
cf24867b93 gtimezone: Add g_time_zone_new_offset() convenience constructor
This includes tests.

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

https://bugzilla.gnome.org/show_bug.cgi?id=676923
2018-04-13 15:25:26 +01:00
Philip Withnall
a80117c371 gdatetime: Fix a spurious gcc warning
It’s possible to get a -Wmaybe-uninitialized warning out of this code
with some GCC versions. Rework the code to avoid needing the conditional
free.

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

https://bugzilla.gnome.org/show_bug.cgi?id=728108
2018-04-13 15:22:46 +01:00
Philip Withnall
68f6d39895 gdatetime: Fix a leak in g_date_time_new_week()
This was a small leak of a GDateTime instance from an internal helper
function, which was using it to calculate week numbers, and then forgot
to free it.

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

https://bugzilla.gnome.org/show_bug.cgi?id=795165
2018-04-12 13:25:16 +01:00
Philip Withnall
8945227743 gtimezone: Add g_time_zone_get_identifier() accessor
This is a non-trivial accessor which gets the identifier string used to
create the GTimeZone — unless the string passed to g_time_zone_new() was
invalid, in which case the identifier will be `UTC`.

Implementing this required reworking how timezone information was loaded
so that the tz->name is always set at the same time as tz->t_info, so
they are in sync. Previously, the tz->name was unconditionally set to
whatever was passed to g_time_zone_new(), and then not updated if the
tz->t_info was eventually set to the default UTC information.

This includes tests for the new g_time_zone_get_identifier() API, and
for the g_date_time_get_timezone() API added in the previous commit.

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

https://bugzilla.gnome.org/show_bug.cgi?id=795165
2018-04-12 13:25:16 +01:00
Philip Withnall
9ddd17d304 gdatetime: Add g_date_time_get_timezone() accessor
This is a trivial method to get the GTimeZone for the GDateTime.

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

https://bugzilla.gnome.org/show_bug.cgi?id=795165
2018-04-12 13:25:16 +01:00
Руслан Ижбулатов
24e80aac1f Link gdatetime test to libintl
gdatetime testcase uses glib (which uses libintl), but *alsi* calls
libintl functions on its own, as part of the testing process.
Therefore it must be linked to libintl like any other program that
uses it.

https://bugzilla.gnome.org/show_bug.cgi?id=794556
2018-04-11 13:58:55 +00:00
Руслан Ижбулатов
5741f203dc W32 gstdio: Don't try to get reparse tag unconditionally
We do not need to use FindFirstFileW() to get a reparse tag if the
file that is being examined is not a reparse point.

This is a quick and relatively painless fix for the fact that
FindFirstFileW() fails on root directories. Since root directories
are unlikely to be reparse points (is it even possible?), not using
this function on non-reparse-points just sidesteps the issue.

https://bugzilla.gnome.org/show_bug.cgi?id=795153
2018-04-11 12:51:20 +00:00
Руслан Ижбулатов
b33a454a42 W32 gstdio: don't close fd handle
If a handle was obtained from a fd that we got from up the stack,
we shouldn't call CloseHandle() on it in case of an error.

This is a bug. Luckily, it happens only on the error codepath, so,
hopefully, no one had hit it yet.
2018-04-11 12:48:06 +00:00
Philip Withnall
b806df0ef1 gstrfuncs: Clarify that g_strv_length() does not accept NULL
https://bugzilla.gnome.org/show_bug.cgi?id=795026

Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-04-10 11:04:07 +01:00
Xavier Claessens
dad4f956c5 Meson: Add carbon and cocoa flags into glib and gio pc files
https://bugzilla.gnome.org/show_bug.cgi?id=788773
2018-03-28 19:31:25 -04:00
Xavier Claessens
3c76114e73 Meson: Use pkgconfig module to generate all pc files
This requires improved pc file generator from meson 0.45.

https://bugzilla.gnome.org/show_bug.cgi?id=788773
2018-03-28 19:31:20 -04:00
Руслан Ижбулатов
a9c65317d3 Use a real test for G_HAVE_GNUC_VISIBILITY
Accurate G_HAVE_GNUC_VISIBILITY is needed to correctly
define G_GNUC_INTERNAL later on. Autotools did that,
meson currently doesn't and opts to just set
G_HAVE_GNUC_VISIBILITY to 1 for all compilers except MSVC.
This leads to MinGW GCC having G_HAVE_GNUC_VISIBILITY=1,
which results in G_GNUC_INTERNAL being defined to
__attribute__((visibility("hidden"))), which is not supported.

Because cc.compiles() does not support override_options or
anything like that, we just feed it '-Werror' as-is, since
MSVC is known as not supporting visibility attributes anyway.

https://bugzilla.gnome.org/show_bug.cgi?id=794636
2018-03-28 11:55:50 +00:00
Emmanuele Bassi
327c379862 Ignore GCC memory overflow warnings when testing overflows
We know we are overflowing the maximum allocation: it's what we're
testing for.

https://bugzilla.gnome.org/show_bug.cgi?id=794732
2018-03-28 11:49:59 +01:00
Matthew Leeds
1180649a08 docs: Fix a minor grammatical error 2018-03-27 15:20:16 -07:00
Philip Withnall
9dd8e833ef gmain: Fix some minor typos in the documentation
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-03-26 14:48:12 +01:00
Nirbheek Chauhan
e2bd6a6a8f gmacros: Don't define bogus __has_* macros
This pollutes the reserved compiler namespace and breaks applications
trying to do their own feature detection. For instance, this falsely
detects that alloca is not a builtin on gcc:

    #include <glib.h>
    #if defined(__has_builtin)
    # if !__has_builtin(alloca)
    #  error "wtf glib?"
    # endif
    #else
    /* version-checking to determine alloca existence */
    #endif

Instead, define our own g_macro__has_* versions that have the
behaviour that we need.

https://bugzilla.gnome.org/show_bug.cgi?id=794635
2018-03-26 17:12:32 +05:30
Philip Withnall
71eccfeec7 glib: Add (inout) annotations to g_[hmac|checksum]_get_digest()
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-03-20 20:21:32 +00:00
Emmanuele Bassi
c5ecf64948 meson: Bump up timeout for slow test
The 642026-ec test can reliably take more than 45 seconds to run if the
CI runner is overworked; let's give it some more breathing room.
2018-03-16 13:35:32 +00:00
Philip Withnall
46eedd12c0 tests: Add charset test to autotools and drop unnecessary undefs
Follow-ups from review in bug #751826.

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

https://bugzilla.gnome.org/show_bug.cgi?id=751826
2018-03-13 12:21:07 +00:00
Takao Fujiwara
e311a45653 gcharset: Add g_get_language_names_with_category
g_get_language_names() uses LC_MESSAGES and the fallback is useful
for other locale categories too.

https://bugzilla.gnome.org/show_bug.cgi?id=751826
2018-03-13 12:17:31 +00:00
Philip Withnall
affe33b7e7 gversionmacros: Add version macros for GLib 2.58
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-03-13 12:17:31 +00:00
Christoph Reiter
8e315bd8ae tests/date.c: include config.h to expose Vista+ macros
date.c uses SUBLANG_LITHUANIAN_LITHUANIA which is Vista+
Include config.h so that _WIN32_WINNT is defined and the newer macros
are exposed.

This fixes the build under MinGW.

https://bugzilla.gnome.org/show_bug.cgi?id=793729
2018-03-13 12:06:54 +00:00
Rafal Luzynski
987bf5bbeb gdatetime: Add missing #define WEEKDAY_FULL_IS_LOCALE
One more #define WEEKDAY_FULL_IS_LOCALE was missing from the commit
12f11090dc.

https://bugzilla.gnome.org/show_bug.cgi?id=793578
2018-03-13 10:52:08 +00:00
Rafal Luzynski
9cadb90b35 tests: Compare month names case-insensitively
This patch relaxes the comparison rules and allow the month names to be
in a mixed case.

Translators should be allowed to provide the month names in a different
case (lower/upper case, not grammatical case) from the content of glibc
because it is disputable at the moment whether the month names should
follow the language rules strictly and be titlecased only if it is
obligatory to titlecase them or they should be also titlecased in the
standalone case. Hopefully in future a conversion specifier will be
invented to control the upper/lower case individually.

https://bugzilla.gnome.org/show_bug.cgi?id=793645
2018-03-13 10:49:38 +00:00
Rafal Luzynski
7fe793e125 tests: Update month names
Update the abbreviated month names in the test to match the actual content
of the translated *.po files for Greek and Lithuanian.

https://bugzilla.gnome.org/show_bug.cgi?id=793645
2018-03-13 10:49:38 +00:00
Philip Withnall
c4f58e362e tests: Skip the gdatetime month names test when running uninstalled
It needs the translations to be installed. See the comment added to the
code.

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

https://bugzilla.gnome.org/show_bug.cgi?id=794180
2018-03-12 19:24:15 +00:00
Philip Withnall
36af567045 tests: Ensure gettext strings are loaded in UTF-8 in gdatetime.c
See the previous commit. By convention, GLib assumes strings loaded from
gettext are always in UTF-8, but we do need to tell gettext this. In
most other tests, it doesn’t matter; but in the gdatetime test, we test
re-encoding month names from EUC-JP, so we need to ensure the
translations start in UTF-8 correctly.

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

https://bugzilla.gnome.org/show_bug.cgi?id=793578
2018-03-12 19:22:13 +00:00
Philip Withnall
12f11090dc gdatetime: Fix locale handling for nl_langinfo() calls
With the various macros we use to provide fallbacks for missing
nl_langinfo() fields, the locale handling can become quite complex:
nl_langinfo() returns strings encoded in the current locale, but C_()
returns strings encoded in UTF-8 (by GLib convention — you do actually
need to call bind_textdomain_codeset() to achieve this).

There are various format specifiers, especially with the new %Ob, %OB,
%Oh specifiers, which conditionally call nl_langinfo() or something
based on C_(). This makes encoding handling difficult.

Add additional macros which indicate whether the macros they’re paired
with return something encoded in the current locale, or encoded in
UTF-8. The user of the macro can then use these to work out whether to
re-encode.

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

https://bugzilla.gnome.org/show_bug.cgi?id=793578
2018-03-12 19:22:13 +00:00
Philip Withnall
11909c67d1 gdatetime: Clarify documentation about clamping on addition
If adding months or years to a date, the day of the month of the result
is supposed to be the same as in the input — but that doesn’t work if
that day doesn’t exist in the result month.

Clarify the documentation about what happens here (the day of the month
is clamped to the length of that month).

Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-02-28 15:31:34 +00:00
Rafal Luzynski
2c15b903e2 date: Amend some comments about the month names
Some source code comments amended to avoid possible future confusion.
It has been explained that a month name is used in a genitive case
only if it is required by the language rules. Also it has been
explained that %OB is also supported by other platforms (e.g., BSD)
but for this test we are focused on glibc 2.27 vs. Windows.

https://bugzilla.gnome.org/show_bug.cgi?id=749206
2018-02-28 11:33:37 +00:00
Philip Withnall
90d3337e1d docs: Mention pointer semantics for g_array_set_clear_func()
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-02-23 19:23:27 +00:00
Ernestas Kulik
03e86d000f Remove HAVE_CONFIG_H defs and uses
Since GLib files are only meant to be built as part of GLib, config.h
always exists, so the checks are more or less pointless.

https://bugzilla.gnome.org/show_bug.cgi?id=793399
2018-02-21 13:57:10 +00:00
Emmanuele Bassi
8bfedb57cc Increase the timeout for some GLib tests
The CI infrastructure is shared and running inside a containerised
environment, which means tests may take more time to finish on it
than they would on a faster, personal machine.

https://bugzilla.gnome.org/show_bug.cgi?id=793635
2018-02-20 13:49:21 +00:00
Emmanuele Bassi
5459b345e1 Do not use g_test_incomplete() for missing locales
The "incomplete" test state matches the "expected to fail" state (or
"TODO", in TAP), but missing locales should just cause tests to be
skipped.

https://bugzilla.gnome.org/show_bug.cgi?id=793635
2018-02-20 13:49:21 +00:00
Philip Withnall
493d3438e8 tests: Disable /date/month_names test with older libc versions
The test for %OB with g_date_strftime() fails with old libc versions
which don’ŧ support the ‘O’ modifier. g_date_strftime() explicitly
doesn’t add additional format placeholders over what’s supported by the
system strftime(), so just disable the test in that case.

The test remains useful on systems with newer libc versions, or on
Windows, where the win32 fallback path is taken.

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

https://bugzilla.gnome.org/show_bug.cgi?id=749206
2018-02-20 12:05:11 +00:00
Rafal Luzynski
359768369d Add tests for formatting and parsing month names
Add tests for g_date_strftime() and g_dat_set_parse() formatting and parsing
month names in both nominative and genitive case in several locales, both
needing these two grammatical cases and not needing them.

https://bugzilla.gnome.org/show_bug.cgi?id=749206
2018-02-20 11:35:13 +00:00
Rafal Luzynski
fa12658809 win32_strftime_helper: Support nominative/genitive month names
A similar change to the commit be4f96b650,
supports %OB, %Ob, %Oh (alternative, standalone, nominative) month names
along with the old %B, %b, %h (primary, in full date format context,
genitive) month names.

https://bugzilla.gnome.org/show_bug.cgi?id=749206
2018-02-20 11:35:13 +00:00
Rafal Luzynski
5520a87930 win32_strftime_helper: Factor out the common code
Factor out the common code supporting "%B", "%b", and "%h" format
specifiers. It will be helpful for the next commit.

https://bugzilla.gnome.org/show_bug.cgi?id=749206
2018-02-20 11:35:13 +00:00
Rafal Luzynski
9152244828 g_date_set_parse: Also support nominative/genitive month names
As the support of two grammatical cases of month names has been introduced
try to find both forms when parsing a date.

https://bugzilla.gnome.org/show_bug.cgi?id=749206
2018-02-20 11:35:13 +00:00
George Barrett
9ae71e32e8 gutils: fix missing include
On platforms other than Win32, the g_abort symbol is #def'd to abort.
C99 specifies that this function prototype resides in stdlib.h, but the
required include is absent from gutils.h.

https://bugzilla.gnome.org/show_bug.cgi?id=793555
2018-02-19 11:35:47 +00:00
Ernestas Kulik
62e8168878 gatomic: fix -Wduplicated-branches
The checks that the argument passed is a pointer to an integer contain
duplicate branches, which GCC complains about very loudly as of version
7.

https://bugzilla.gnome.org/show_bug.cgi?id=793399
2018-02-16 15:43:11 +00:00
Ernestas Kulik
c97922c104 gtester: fix -Wduplicated-branches
One of the “quick” or “slow” test run modes is always added to the
argument list, making the branching pointless, which, coincidentally,
now causes a warning.

https://bugzilla.gnome.org/show_bug.cgi?id=793399
2018-02-16 15:14:39 +00:00
Rafal Luzynski
be4f96b650 g_date_time_format: Support nominative/genitive months
Supports %OB (alternative, standalone, nominative) month name along
with the old %B (primary, in a complete date format context, genitive)
month name.  Similarly %Ob and %Oh for abbreviated month names.
Depending on the underlying operating system uses nl_langinfo()
or provides our custom implementation.

(Tweaked by Philip Withnall <withnall@endlessm.com> to add test case
comment and bug reference.)

https://bugzilla.gnome.org/show_bug.cgi?id=749206
2018-02-16 14:37:51 +00:00
Natanael Copa
d933cf99bf gquark: simplify g_intern_string/g_intern_static_string
Move the common code to a quark_intern_string_locked function. This has
no effect on the generated code but makes codebase a bit cleaner.

https://bugzilla.gnome.org/show_bug.cgi?id=768507
2018-02-16 12:49:43 +00:00
Natanael Copa
2f07630b43 gquark: simplify g_quark_from_static_string/g_quark_from_string
Move common code to quark_from_string_locked  wrapper function. This has
no effect on generated code but it makes codebase a bit cleaner.

https://bugzilla.gnome.org/show_bug.cgi?id=768507
2018-02-16 12:49:43 +00:00
Emmanuele Bassi
77419cf578 docs: Mention the newly added return values
The return value of the g_hash_table_add(), g_hash_table_insert(), and
g_hash_table_replace() functions was changed from void to gboolean in
GLib 2.40, but it was not mentioned in the API reference or the release
notes.

https://bugzilla.gnome.org/show_bug.cgi?id=793300
2018-02-15 11:25:53 +00:00
Philip Withnall
4183cedbe2 tests: Use a different time for testing UNIX timestamps
The test_GDateTime_new_from_unix() test creates a UNIX timestamp
representing 1990-01-01 00:00:00 in the local timezone, and then turns
it into a GDateTime using g_date_time_new_from_unix_local(). This should
succeed regardless of the current local timezone (TZ environment
variable).

However, it was failing for TZ=America/Lima, and *only* for that
timezone.

As it turns out, Lima used to have a DST leap at exactly 00:00:00 on the
1st of January — but this stopped in 1994, which made investigation a
bit harder. See:
https://www.timeanddate.com/time/change/peru/lima?year=1990.

What was happening is that 1990-01-01 00:00:00 was being converted to
the timestamp 631170000, but GDateTime was converting that timestamp to
1990-01-01 01:00:00 when loading it. Both conversions are correct: a DST
leap creates an equivalence between an hour’s worth of timestamps.

We can somewhat validate this by seeing that timestamp 631169999 maps to
1989-12-31 23:59:59, and timestamp 631170001 maps to 1990-01-01
01:00:01.

Fix this by changing the date used by the test to one where no timezone
was undergoing a DST leap in 1990. This should never change, as all that
data is now historical.

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

https://bugzilla.gnome.org/show_bug.cgi?id=793319
2018-02-13 15:56:30 +00:00
Philip Withnall
644ecec971 gconvert: Fix some typos in documentation comments
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-02-13 14:49:20 +00:00
Mikhail Zabaluev
7f1fd247a7 gconvert: g_filename_from_utf8() returns (type filename)
The existing array annotation is inconsistent with the other
conversion functions. Now that the implementation guarantees
no embedded NULs, the return value can be re-annotated.

https://bugzilla.gnome.org/show_bug.cgi?id=756128
2018-02-09 13:05:22 +00:00
Mikhail Zabaluev
8a93e2d54e gconvert: Correctly annotate string types and output parameters
Note that the g_convert() API works with byte arrays. It's wrong to
default to utf8 there, because iconv can read and produce strings with
interior nul characters which are not allowed in (type utf8).
The documentation was misleading about that in some places, so that got
corrected as well.

Strings in the locale encoding are annotated as dynamic-length byte
arrays because they don't have any guaranteed format and can contain
nul bytes. For UTF-8 strings in g_*_{from,to}_utf8(), GLib assumes
no embedded nul bytes and the (type utf8) annotations on the UTF-8
parameters and return values remain as they were. Likewise for
(type filename).

https://bugzilla.gnome.org/show_bug.cgi?id=756128
2018-02-09 13:05:22 +00:00
Philip Withnall
565d8fa1ee docs: Add Markdown backticks around /dev/null in a few places
This improves the formatting of the documentation ever so slightly.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-02-08 16:39:32 +00:00
Philip Withnall
e9dd5e1819 gkeyfile: Fix -Wincompatible-pointer-types warning
Introduced in commit 1574321e51.

This fix introduces no functional changes (just a cast).

Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-02-08 12:29:57 +00:00
Matthias Clasen
a4fc4c1e6e trivial: add some helpful comments
Not everybody knows console color codes by heart.
2018-02-06 11:05:57 -05:00
Philip Withnall
79d9ea2598 gthread: Fix a typo in an #ifdef on the non-native mutex path
This seems to have been present since the code was introduced in commit
cedc82290f. The attr variable is defined
under one #ifdef, but destroyed under another, which doesn’t make any
sense. The second #ifdef variable is actually an enum value, rather than
the static initialiser value which makes more sense in the context.

Note that GMutex used to be statically initialised to the value of
PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP in gthread.h, before this was
reworked in commit e081eadda5.

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

https://bugzilla.gnome.org/show_bug.cgi?id=793026
2018-02-06 15:52:29 +00:00
Allison Lortie
1574321e51 GKeyFile: add API for getting locale of a string
g_key_file_get_locale_string() returns a translated string from the
keyfile.  In some cases, it may be useful to know the locale that that
string came from.

Add a new API, g_key_file_get_locale_for_key(), that returns the locale
of the string.

Include tests.

(Modified by Philip Withnall to rename the API and fix some minor review
issues. Squash in a separate test case commit.)

https://bugzilla.gnome.org/show_bug.cgi?id=605700
2018-02-06 15:51:33 +00:00
Patrick Griffis
1c0bed93a3 docs: Clarify dest requirements of g_utf8_strncpy()
(Minor wording tweak by Philip Withnall.)

https://bugzilla.gnome.org/show_bug.cgi?id=520116
2018-02-03 12:12:28 +01:00
Philip Withnall
32cc60dbff gmessages: Fix -Wformat warnings for g_message() and friends
When compiling with G_LOG_USE_STRUCTURED, g_message(), g_debug(), etc.
use g_log_structured(). The message format string and its format
arguments are passed as the final set of arguments in a longer varargs
list, which includes the log domain and level (and other) fields.
Passing the message format in this way means it’s not possible for the
compiler to know to check its format placeholders when compiling with
-Wformat.

Fix support for this by adding a new semi-private helper function,
_g_log_structured_standard(), which only uses varargs for the message
format and its arguments, and uses fixed arguments for the other fields.
This is then converted to a set of GLogFields and passed to
g_log_structured() as normal.

Support for -Wformat when compiling *without* G_LOG_USE_STRUCTURED was
never broken.

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

https://bugzilla.gnome.org/show_bug.cgi?id=793074
2018-02-02 10:10:43 +01:00
Philip Withnall
3a88ab6c25 tests: Add some documentation to the illegal sequence conversion test
Signed-off-by: Philip Withnall <withnall@endlessm.com>

https://bugzilla.gnome.org/show_bug.cgi?id=790698
2018-02-02 10:04:20 +01:00
Philip Withnall
8abf3a04e6 gconvert: Fix error handling for g_iconv() with unrepresentable chars
The behaviour of upstream iconv() when faced with a character which is
valid in the input encoding, but not representable in the output
encoding, is implementation defined:

http://pubs.opengroup.org/onlinepubs/9699919799/

Specifically:

   If iconv() encounters a character in the input buffer that is valid,
   but for which an identical character does not exist in the target
   codeset, iconv() shall perform an implementation-defined conversion
   on this character.

This behaviour was being exposed in our g_iconv() wrapper and also in
g_convert_with_iconv() — but users of g_convert_with_iconv() (both the
GLib unit tests, and the implementation of g_convert_with_fallback())
were assuming that iconv() would return EILSEQ if faced with an
unrepresentable character.

On platforms like NetBSD, this is not the case: NetBSD’s iconv()
finishes the conversion successfully, and outputs a string containing
replacement characters. It signals those replacements in its return
value from iconv(), which is positive (specifically, non-zero) in such a
case.

Let’s codify the existing assumed behaviour of g_convert_with_iconv(),
documenting that it will return G_CONVERT_ERROR_INVALID_SEQUENCE if
faced with an unrepresentable character. As g_iconv() is a thin wrapper
around iconv(), leave the behaviour there implementation-defined (but
document it as such).

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

https://bugzilla.gnome.org/show_bug.cgi?id=790698
2018-02-02 10:04:20 +01:00
Philip Withnall
a19eed4691 tests: Add a missing const to a variable in the GConvert tests
Also rename it to make it clearer how it’s encoded (as UTF-8).

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

https://bugzilla.gnome.org/show_bug.cgi?id=790698
2018-02-02 10:04:20 +01:00
Philip Withnall
19bc03ef65 docs: Minor wording improvements in GConvert documentation
Fix capitalisation of GLib, make some text less gender-specific, and add
some missing colons.

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

https://bugzilla.gnome.org/show_bug.cgi?id=790698
2018-02-02 10:04:20 +01:00
Philip Withnall
ad6afd0fc1 docs: Replace an XML entity with a UTF-8 character instead
Another part of the long tail of converting our documentation from
DocBook to Markdown.

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

https://bugzilla.gnome.org/show_bug.cgi?id=790698
2018-02-02 10:04:20 +01:00
Philip Withnall
38592939d7 docs: Clarify the definition of goffset
off64_t doesn’t exist in any standard (definitely not C99), and so
goffset is actually closer to off_t in 64-bit mode.

However, goffset is always defined as gint64, so make that clear.

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

https://bugzilla.gnome.org/show_bug.cgi?id=792856
2018-02-02 09:29:22 +01:00
Stewart Brodie
fc857073a0 gkeyfile: Fix FD validity test to be technically correct
The fd could be valid and zero.

https://bugzilla.gnome.org/show_bug.cgi?id=760324
2018-02-02 09:20:11 +01:00
Philip Withnall
b6d1c128b3 gcharset: Mention the environment variables queried by g_get_charset()
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-02-01 17:38:28 +00:00
Pavlo Solntsev
382d13b618 Clarification for memmory allocation function
Difference between g_try_... family of functions and their counterparts
has been clarified.

https://bugzilla.gnome.org/show_bug.cgi?id=792903
2018-01-31 22:10:51 +00:00
Christian Hergert
47b78e6d83 tests: additional test for g_bytes_new_from_bytes()
This adds two new tests for g_bytes_new_from_bytes().

One test ensures that when creating a new GBytes that is a slice of
the entire base bytes, we just return the base bytes with it's reference
count incremented by one.

The other test ensures that when performing sub-slices of GBytes, for
which the parent GBytes also references a GBytes, that we skip the
intermediate GBytes and reference the base GBytes. Additional testing
of the internal state of the GBytes structure is performed to prove
the correctness of the implementation.

https://bugzilla.gnome.org/show_bug.cgi?id=792780
2018-01-27 11:43:38 -08:00
Christian Hergert
4151bce6db bytes: avoid intermediate refs in g_bytes_new_from_bytes()
When referencing a GBytes that is already a slice of another GBytes, we
can avoid referencing the intermediate GBytes and instead reference the
root bytes.

Doing so helps avoid keeping N GBytes instances alive when the
intermediates would have otherwise been finalized.

https://bugzilla.gnome.org/show_bug.cgi?id=792780
2018-01-27 11:43:38 -08:00
Mikhail Zabaluev
52f98911df Test that g_convert() can handle embedded NUL bytes
https://bugzilla.gnome.org/show_bug.cgi?id=792516
2018-01-19 11:46:31 +00:00
Mikhail Zabaluev
f35a6a7031 gconvert: Consistently validate inputs and outputs for embedded NULs
String inputs to convenience conversion functions g_locale_from_utf8(),
g_filename_from_utf8(), and g_filename_to_utf8(), are annotated for the
bindings as NUL-terminated strings of (type utf8) or (type filename).
There is also a len parameter that allows converting part of the string,
but it is exposed to the bindings as a value independent from the string
buffer. Absent any more sophisticated ways to annotate, the way to
provide a safeguard against len argument values longer than the
string length is to check that no nul is encountered within the first
len bytes of the string. strdup_len() includes this check as part of
UTF-8 validation, but g_convert() permits embedded nuls.

For g_filename_from_utf8(), also check the output to prevent embedded NUL
bytes. It's not safe to allow embedded NULs in a string that is going
to be used as (type filename), and no known bytestring encoding for
file names allows them.

https://bugzilla.gnome.org/show_bug.cgi?id=792516
2018-01-19 11:46:31 +00:00
Mikhail Zabaluev
d584ff77f6 Test embedded NULs in input of g_{locale,filename}_to_utf8()
The tests exercise both g_strncpy() and g_convert() paths.

https://bugzilla.gnome.org/show_bug.cgi?id=792516
2018-01-19 11:46:31 +00:00
Mikhail Zabaluev
81cd815406 gconvert: Tighten, document embedded NUL behavior of UTF-8 conversions
The character encoding conversion utility functions g_locale_to_utf8()
and g_filename_to_utf8() had inconsistent behavior on producing strings
with inner NUL bytes: in the all-UTF-8 strdup path, the input string
validation prohibits embedded NULs, while g_convert(), using iconv(),
can produce UTF-8 output with NUL bytes inside the output buffer.
This, while valid UTF-8 per the Unicode standard, is not valid for
the nul-terminated (type utf8) return value format that the *_to_utf8()
functions are annotated with (as per discussion in bug 756128).

Check the output of g_convert() for embedded NUL bytes, and if any
are found, set the newly introduced error
G_CONVERT_ERROR_EMBEDDED_NUL.

Also document the error set by g_{locale,filename}_{from,to}_utf8()
when the input string contains nul bytes.

https://bugzilla.gnome.org/show_bug.cgi?id=792516
2018-01-19 11:46:31 +00:00
Mikhail Zabaluev
413605a6f3 gconvert: Optimize UTF-8 conversions, fix output on error
In the strdup_len() path, no need to do what g_utf8_validate()
already does: locate the string-terminating nul byte.

Also in strdup_len(), make the out parameter bytes_read receive the length
of the valid (meaning also nul-free) part of the input string, as the
documentation on g_{locale,filename}_{from,to}_utf8() says it does.

https://bugzilla.gnome.org/show_bug.cgi?id=792516
2018-01-19 11:46:31 +00:00
Philip Withnall
1e6803be3b gmain: Partial revert of recent wakeup changes to gmain.c
This reverts the following commits (but keeps the other recent changes
to gmain.c):
 • e4ee3079c Do not wake up main loop if change is from same thread
 • 208702404 main: Create a helper function for "owner wakeup" optimization
 • 0c0469b56 gmain: Signal wakeups if context has never been acquired as well
 • 9ba95e25b gmain: only signal GWakeup right before or during a blocking poll

Some combination of them is causing problems with LibreOffice and/or
WebKit, and the safest thing to do at the moment is revert them all
until we work out what’s going on. The previous revert (4976e8109) was
not sufficient (it fixed WebKit, but re-broken LibreOffice).

By reverting, we gain some spurious wakeups, but avoid dropping
necessary wakeups, which is presumably what’s causing problems in the
other modules.

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

https://bugzilla.gnome.org/show_bug.cgi?id=761102
2018-01-18 11:31:08 +00:00
Sébastien Wilmet
3ee859d5fc docs: GSequence: better document how to sort large amount of data
It was documented at strange places: in g_sequence_search*() and
g_sequence_lookup*(), but how to insert and sort data is not done by
those functions.

So instead, add the information to the class description (since it
involves several functions), and add also the information in
g_sequence_insert_sorted() and g_sequence_insert_sorted_iter() as a kind
of warning when using those functions.

Note that before this commit, it was not explained *why* it is better to
call g_sequence_sort() after doing a lot of unsorted insertions. Now it
is documented as "more efficient" (I think it's the only reason that
makes sense, otherwise why was it documented?).

https://bugzilla.gnome.org/show_bug.cgi?id=792455
2018-01-16 20:11:31 +01:00
Benjamin Berg
5fba62adec gmessages: Flush output stream after logging messages
When debug output is enabled then certain messages will be logged to
stdout. stdout however is block buffered by default when it isn't going
to a TTY meaning that debug logging will not be flushed out properly
when it is being redirected. One example of this happening may be tests
that rely on parsing g_debug messages.

Adding an explicit fflush ensures all log messages will reach the output.

https://bugzilla.gnome.org/show_bug.cgi?id=792432
2018-01-15 19:46:22 +01:00
Philip Withnall
051d69bbc8 gdataset: Fix a typo in a documentation comment
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-01-15 18:26:56 +00:00
Iain Lane
e2054240c2 gdatetime: Mark the usecs as volatile
On i386, we were seeing that this calculation was producing an incorrect
result, probably because usec was being stored in an 80-bit register
before being written back into a 64-bit float in memory. If we mark the
variables as volatile, they are not stored in registers and we avoid
this bug.
2018-01-15 11:54:47 +00:00
Robert Ancell
d870628782 gdatetime: Avoid repeated floating point multiplies with ISO 8601 parsing
This avoids any potential rounding errors.

https://bugzilla.gnome.org/show_bug.cgi?id=792410
2018-01-15 11:54:47 +00:00
Philip Withnall
e430541378 docs: Remove XML-style comments from documentation strings
gtk-doc doesn’t support them any more since it was ported to Markdown,
so they end up appearing in the generated documentation, which isn’t
great.

Mostly, they were used to split up things invisibly, which we can do in
other ways.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-01-12 15:29:29 +00:00
Garrett Regier
6aa19a26cf gsequence: Add seq_is_end()
This avoids calling is_end() when the
GSequence is already determined, thus
avoids having to walk the tree.

https://bugzilla.gnome.org/show_bug.cgi?id=749583
2018-01-11 12:47:18 +00:00
Garrett Regier
ee8f7be3df gsequence: Kill check_iter_access()
Generally the GSequence has already been
determined by the caller. This saves quite
a few calls to get_sequence().

https://bugzilla.gnome.org/show_bug.cgi?id=749583
2018-01-11 12:46:57 +00:00
Philip Withnall
d020766325 docs: Fix typos in GConvert documentation
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-01-11 11:54:14 +00:00
Tim-Philipp Müller
59c5b939e2 glib: fix compiler warning for g_unsetenv_utf8() on windows
"warning: 'void' function returning a value". Neither
g_unsetenv_utf8() nor g_unsetenv() return anything.
2018-01-10 17:24:36 +00:00
Christian Hergert
17e03effda gbookmarkfile: check length before dereferencing groups
There is no requirement that groups is NULL terminated, so we should check
that the bounds are within the specified length before checking for a
NULL terminating value.

https://bugzilla.gnome.org/show_bug.cgi?id=792351
2018-01-09 15:29:36 -08:00
Mikhail Zabaluev
6dafc1ce13 Move G_DIR_SEPARATOR* and G_SEARCHPATH_SEPARATOR* into glibconfig.h
As platform-dependent macros, they belong in glibconfig.h.
This also makes it one less place where g-ir-scanner picks definitions
from the wrong ifdef branch; see
https://bugzilla.gnome.org/show_bug.cgi?id=696935

Meson configuration support is also added in this commit.

https://bugzilla.gnome.org/show_bug.cgi?id=757284
2018-01-09 12:08:40 +00:00
Mikhail Zabaluev
ef65c160dc gbookmarkfile: fix up annotations
https://bugzilla.gnome.org/show_bug.cgi?id=756011
2018-01-08 18:26:25 +00:00
Philip Withnall
97d24b93ab glib: Fix strict-aliasing warnings with g_clear_pointer()
gpointer* cannot be aliased with arbitrary types. In order to fix
-Wstrict-aliasing=2 warnings with the g_clear_pointer() macro, we need
to cast through char*, which is allowed to alias with anything.

Even if we don’t make GLib strict-aliasing safe, it’s important to
ensure this macro is safe, since it could be used from projects which do
compile with -fstrict-aliasing.

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

https://bugzilla.gnome.org/show_bug.cgi?id=791622
2018-01-08 11:50:31 +00:00
Philip Withnall
d8fe926ba4 Fix various strict aliasing problems with sockaddr
Fix various strict aliasing problems caused by casting between (struct
sockaddr *) and (struct sockaddr_storage *): the correct code here is to
keep the two in a union.

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

https://bugzilla.gnome.org/show_bug.cgi?id=791622
2018-01-08 11:50:26 +00:00
Philip Withnall
8f7cc8cb75 gkeyfile: Document need for KEEP_TRANSLATIONS with get_locale_string()
When using g_key_file_get_locale_string() or get_locale_string_list(),
the GKeyFile must have been loaded with G_KEY_FILE_KEEP_TRANSLATIONS if
the lookup locale differs from the one which was current when the key
file was loaded.

Document that.

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

https://bugzilla.gnome.org/show_bug.cgi?id=792324
2018-01-08 10:55:42 +00:00
Simon McVittie
7f3bfcb891 cancellable: Don't assert if finalization races with cancellation
Commit 281e3010 narrowed the race between GCancellable::cancelled and
GCancellableSource's finalize(), but did not prevent it: there was
nothing to stop cancellation from occurring after the refcount drops
to 0, but before g_source_unref_internal() bumps it back up to 1 to
run finalize().

GCancellable cannot be expected to detect that situation, because the
only way it has to detect last-unref is finalize(), but in that
situation finalize() hasn't happened yet.

Instead of detecting last-unref, relax the precondition a little
to make it detect finalization: priv is only poisoned (set to NULL)
after the finalize() function has been called, so we can assume that
GCancellable has already seen finalize() by then.

Signed-off-by: Simon McVittie <smcv@collabora.com>
Bug: https://bugzilla.gnome.org/show_bug.cgi?id=791754
Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=884654
2018-01-05 20:42:06 +00:00
Simon McVittie
a4686b8ea1 g_source_set_ready_time: Move no-op fast-path under the lock
If we don't take the lock, then we don't have the necessary
"happens before" relationships to avoid this situation:

* source->priv->ready_time was equal to ready_time until recently
* another thread has set source->priv->ready_time to a different value
* that write hasn't become visible to this thread yet
* result: we should reset the ready_time, but we don't

Signed-off-by: Simon McVittie <smcv@collabora.com>
Bug: https://bugzilla.gnome.org/show_bug.cgi?id=791754
Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=884654
2018-01-05 20:42:06 +00:00
Philip Withnall
ca1aaccbff docs: Remove redundant sentence from g_prefix_error() documentation
Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2018-01-05 19:36:07 +00:00
Christoph Reiter
2939585bd6 meson: work around meson not passing on the threads dependency when link_with is used
When using link_with with declare_dependency() or executable() the threads
dependency is not passed on. To work around the issue add the threads dependency
manually. See https://github.com/mesonbuild/meson/issues/1426

This makes the static build on Linux work.

https://bugzilla.gnome.org/show_bug.cgi?id=788806
2018-01-05 15:29:00 +01:00
Christoph Reiter
cf93b27ceb meson: fix static build under Windows
Properly define GLIB/GOBJECT_STATIC_COMPILATION when static build is enabled.
Use library() instead of shared_library() to allow selecting static builds.

https://bugzilla.gnome.org/show_bug.cgi?id=784995
2018-01-04 22:21:40 +01:00
Christoph Reiter
aa7c5cbdcb meson: build Windows resource files
configure_file() forces utf-8 atm but .rc files are not utf-8.
To work around the issue just remove the only non-ASCII char.

https://bugzilla.gnome.org/show_bug.cgi?id=784995
2018-01-04 22:19:30 +01:00
Philip Withnall
e91c118418 Revert "gmain: only signal GWakeup right before or during a blocking poll"
This reverts commit 9ba95e25b7.

It is causing undiagnosed problems with WebKit and other users of GLib.
See https://bugzilla.gnome.org/show_bug.cgi?id=761102#c44 and
https://bugzilla.gnome.org/show_bug.cgi?id=761102#c46.

Reverting it until someone works out what the problem is.

https://bugzilla.gnome.org/show_bug.cgi?id=761102
2018-01-03 11:27:25 +00:00
Emmanuele Bassi
a07b57887d Do not expand autoptr macros when running introspection
The introspection scanner chokes fairly badly on the types we create,
and that got even worse when the autolist support landed. Now, every
time we declare a new GObject type we automatically get incomplete
aliases to container types that gobject-introspection and Vala do not
know how to handle.

Since the autoptr machinery is not really introspectable to begin with,
as it's a C utility extension that depends on the C compiler being used
to compile a C project that depends on GLib, we can mark the whole
section as non-introspectable using the __GI_SCANNER__ pre-processor
symbol.

https://bugzilla.gnome.org/show_bug.cgi?id=791342
2017-12-22 15:03:07 +00:00
Alexander Larsson
f49a93b207 Add support for g_auto[s]list(Type)
This lets you do g_autoptr style cleanup of GList that does deep freeing.

https://bugzilla.gnome.org/show_bug.cgi?id=791342
2017-12-21 16:12:55 +01:00
Xavier Claessens
62c4768423 Meson: Add missing options and conform to naming guidelines
https://bugzilla.gnome.org/show_bug.cgi?id=790837
2017-12-19 14:56:11 -05:00
Simon McVittie
95e2800591 testutils: Document what happens by default and how to change it
Signed-off-by: Simon McVittie <smcv@collabora.com>

https://bugzilla.gnome.org/show_bug.cgi?id=791745
2017-12-18 18:55:46 +00:00
Havard Graff
17bfc39ea7 meson: add carbon and cocoa libs when building for OSX
https://bugzilla.gnome.org/show_bug.cgi?id=791460
2017-12-14 16:21:46 +05:30
Simon McVittie
9c8c6094fd GTest: interpret child processes' wait status if we log their stdout/stderr
WCOREDUMP is not a separate "mode" as suggested by the previous
code to interpret wait status: instead, it is an extra bit of
information if the "mode" is WIFSIGNALED.

(Modified by Philip Withnall to fix a nitpick missing space.)

https://bugzilla.gnome.org/show_bug.cgi?id=748534
2017-12-13 17:27:19 +00:00
Simon McVittie
fa8b76ab98 g_test_subprocess: record raw wait status and interpret it later
This avoids losing information that might be useful for later debugging.

(Modified by Philip Withnall to add comments to child_status and
test_trap_last_status.)

https://bugzilla.gnome.org/show_bug.cgi?id=748534
2017-12-13 17:25:26 +00:00
Philip Withnall
6a597f93f6 gtestutils: Add missing include
memcmp() is used, which is declared in string.h. Include that.

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

https://bugzilla.gnome.org/show_bug.cgi?id=791532
2017-12-13 13:15:37 +00:00
Umang Jain
ed3d2d9c67 gbytes: Clarify nullability for g_bytes_unref() in docs
https://bugzilla.gnome.org/show_bug.cgi?id=791318
2017-12-07 10:27:59 +00:00
1a07e35b70 gtester-report: fix range usage when running as python3 app
When using python3 as interpreter, range only takes integer arguments or
it results in errors like:

   File "/usr/bin/gtester-report", line 78, in html_indent_string
     for i in range (0, (n + 1) / 2):
 TypeError: 'float' object cannot be interpreted as an integer

https://bugzilla.gnome.org/show_bug.cgi?id=791296
2017-12-06 10:07:10 +00:00
Nirbheek Chauhan
c9e6270568 libcharset: Don't try to include configmake.h
It's an internal gnulib thing which will never be available while
building glib. Always expect LIBDIR and fallback to using that for
compatibility with the existing MSVC projects:
https://mail.gnome.org/archives/gtk-devel-list/2017-December/msg00000.html

https://bugzilla.gnome.org/show_bug.cgi?id=346816
2017-12-04 18:40:35 +05:30
Philip Withnall
e45f99e3f6 gvariant: Clarify return docs for g_variant_get_normal_form()
Clarify that the return value may be floating, or may not be (depends
on whether the input @value was in normal form).

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

https://bugzilla.gnome.org/show_bug.cgi?id=741167
2017-12-03 20:01:39 +00:00
Руслан Ижбулатов
69ea026fbc Fix a 32-bit time_t cast
Divide first, *then* cast. Otherwise a very long "now", which is
64-bit, gets truncated into a 32-bit time_t, which can't hold the
value, and turns negative more often than not.

https://bugzilla.gnome.org/show_bug.cgi?id=791128
2017-12-02 13:15:30 +00:00
Philip Withnall
532f1edd88 gmain: Clarify documentation of g_source_remove()
To try and prevent a repeat of
https://stackoverflow.com/q/47569812/2931197.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
Reviewed-by: nobody
2017-12-01 10:24:36 +00:00
Michael Catanzaro
7f639fd5a0 gmain: Improve documentation of GSourceFuncs
We should more clearly indicate that a source ready time will result in
a source being dispatched even if prepare and check never return TRUE.

https://bugzilla.gnome.org/show_bug.cgi?id=790948
2017-11-29 13:20:40 -06:00
Philip Withnall
90dd9ff363 gmain: Unref GSourceCallbackFuncs _before_ finalising GSource
Rather than unreffing them _after_ finalising the GSource and freeing
its struct. This fixes the case where the GSourceCallbackFuncs data
contains a pointer to the GSource, and the unref() function operates on
that pointer, e.g. by calling g_source_destroy(). This happens when
using g_source_set_dummy_callback() on a GSource, as the generated
GClosure needs to destroy the GSource when it is invalidated, which
could happen (at latest) when the GSourceCallbackFuncs.unref() function
is called during finalisation of the GSource.

By moving the GSourceCallbackFuncs.unref() invocation higher up in
g_source_unref_internal(), it becomes re-entrancy-safe for GSource
methods.

https://bugzilla.gnome.org/show_bug.cgi?id=692034
2017-11-28 14:49:26 +00:00
Carlos Garcia Campos
ed620183cb gtester: do not consider skipped tests as failures
This is happening since f591366eee, that
changed the way tests were skipped to use g_test_skip() instead of just
ignoring them. They are now reported to the log with G_TEST_RUN_SKIPPED
as result.

https://bugzilla.gnome.org/show_bug.cgi?id=790934
2017-11-28 15:36:06 +01:00
Philip Withnall
643c2d590c gdatetime: Drop a duplicate #define
It’s exactly the same as the one on the next line.

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

https://bugzilla.gnome.org/show_bug.cgi?id=790416
2017-11-28 14:21:06 +00:00
Philip Withnall
bccc1057e3 gdatetime: Fix handling of unsupported nl_langinfo() items
If nl_langinfo() doesn’t support a particular item, it returns the empty
string. We should check for that and return NULL from
g_date_time_format() accordingly, otherwise the user could unwittingly
end up with a formatted date/time which is missing some or all of its
components.

This arose with %r in de_DE, which is unsupported by nl_langinfo()
because Germans almost never write time in 12-hour format.

Add a unit test.

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

https://bugzilla.gnome.org/show_bug.cgi?id=790416
2017-11-28 14:21:06 +00:00
Philip Withnall
ae7895002b gnode: Eliminate implicit signed-to-unsigned integer conversion
When doing a level traverse of a GNode with depth of -1, the depth was
implicitly being converted to an unsigned integer. This worked (making
the depth limit G_MAXUINT), but was a bit mystical.

Change g_node_depth_traverse_level() to explicitly take a signed depth
and handle it appropriately.

Coverity issue: #1159465

https://bugzilla.gnome.org/show_bug.cgi?id=732003
2017-11-28 14:16:25 +00:00
Philip Withnall
2cd26714e5 tests: Add tests to ensure g_[s]list_sort() are stable sorts
Given that we guarantee it in the API…

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

https://bugzilla.gnome.org/show_bug.cgi?id=508976
2017-11-28 14:11:30 +00:00
Philip Withnall
74cbd6c34f gslist: Document that g_slist_sort() is stable
Signed-off-by: Philip Withnall <withnall@endlessm.com>

https://bugzilla.gnome.org/show_bug.cgi?id=508976
2017-11-28 14:11:29 +00:00
Philip Withnall
9297a596d6 gmain: Mark some ref_count variables as volatile
To make it more obvious they should exclusively be accessed with atomic
functions.

https://bugzilla.gnome.org/show_bug.cgi?id=737677
2017-11-28 14:08:59 +00:00
Philip Withnall
d73f8eec48 gmain: Make GSourceCallback thread-safe
Otherwise there is a race in finalising the GSourceCallback if one
thread is finishing off a g_main_dispatch() while another thread is
destroying the GSource which owns the GSourceCallback.

A helgrind log:

==21707== Possible data race during write of size 4 at 0x54EACB0 by
thread #12
==21707== Locks held: none
==21707==    at 0x4ECC174: g_source_callback_unref (gmain.c:1528)
==21707==    by 0x4ECD953: g_main_dispatch (gmain.c:3081)
==21707==    by 0x4ECE667: g_main_context_dispatch (gmain.c:3673)
==21707==    by 0x4ECE859: g_main_context_iterate (gmain.c:3744)
==21707==    by 0x4ECEC7F: g_main_loop_run (gmain.c:3938)
==21707==    by 0x41C197: some_thread (some-code.c:224)
==21707==
==21707== This conflicts with a previous write of size 4 by thread #5
==21707== Locks held: 1, at address 0x54CF320
==21707==    at 0x4ECC174: g_source_callback_unref (gmain.c:1528)
==21707==    by 0x4ECB86F: g_source_destroy_internal (gmain.c:1178)
==21707==    by 0x4ECB9D4: g_source_destroy (gmain.c:1227)
==21707==    by 0x41CF09: some_other_thread (some-other-code.c:410)

https://bugzilla.gnome.org/show_bug.cgi?id=737677
2017-11-28 14:08:58 +00:00
Christian Hergert
d44afbadda macros: make G_GNUC_CHECK_VERSION() portable
This removes the use of defined() in a macro expansion, which may not be
portable to some pre-processors. Instead, we hoist the defined check
outside the macro expansion.

https://bugzilla.gnome.org/show_bug.cgi?id=790877
2017-11-27 02:07:27 -08:00
Nirbheek Chauhan
87122cae38 meson: Fix gnulib compilation on MSVC
glibinc is needed for including glibconfig.h, this was not noticed
during testing probably because a system-installed header got picked
up instead.
2017-11-24 12:41:53 +05:30
Nirbheek Chauhan
2e5bb92de6 meson: Use files() for headers and sources
This allows them to be fetched via subproject().get_variable(). Needed
for the gobject-introspection meson port.
2017-11-22 14:11:11 +05:30
Nirbheek Chauhan
c603ba301d meson: Add 'charsetalias-dir' option mirroring the autotools one
This fixes the build again.
2017-11-22 04:43:05 +05:30
Philip Withnall
4e5c6616f0 tests: Add tests for GArray constructors
Noticed these were missing when handling bug #733648. Add a few missing
tests to improve coverage.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2017-11-21 12:43:17 +00:00
Philip Withnall
0dc68e5d46 tests: Use g_test_skip() instead of a message in GDateTime tests
There are some GDateTime tests which need to be skipped if changing the
locale fails. Use g_test_skip() to do that, rather than just a
human-readable message.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2017-11-21 12:42:42 +00:00
Daniel Macks
6bcc8b4034 Add configuration option for charset.alias directory
Specifically controlling the location of this file, rather than simply
using $libdir, allows one to avoid conflicting with the same default
location as the gnulib localcharset module uses.

https://bugzilla.gnome.org/show_bug.cgi?id=346816
2017-11-20 11:27:21 +00:00
Luca Bruno
3b89702bcf glib/tests/mappedfile.c: Use temp dir instead of user runtime dir
Bug: https://bugzilla.gnome.org/show_bug.cgi?id=724412
2017-11-16 11:17:19 +00:00
Dan Winship
42d3ed0013 glib: document restrictions on various foreach() functions
Some foreach() functions allow you to modify the object they are
iterating, and others don't, but the docs were not generally clear
about this.

https://bugzilla.gnome.org/show_bug.cgi?id=724383
2017-11-16 11:12:32 +00:00
David Schleef
3cfac71d09 gdatetime: fix floating-point conversion
Conversion from floating point to integer requires special care.

https://bugzilla.gnome.org/show_bug.cgi?id=697715
2017-11-16 11:07:20 +00:00
Patrick Welche
b5733ecc76 Solaris build fix
On Solaris sigset_t is only defined in /usr/include/sys/signal.h
(included from /usr/include/signal.h) if _XPG4_2 is defined. If
it's not defined, you need to include /usr/include/sys/select.h.

http://bugzilla.gnome.org/show_bug.cgi?id=562334
2017-11-16 10:36:13 +00:00
Philip Withnall
880f07f94c gstrfuncs: Use curly quotes in a documentation comment
Nobody can argue with this: the documentation comment is about, and
contains, Unicode accents.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2017-11-13 10:37:11 +00:00
Philip Withnall
e61c3c628d gstrfuncs: Fix a typo in a documentation comment
Signed-off-by: Philip Withnall <withnall@endlessm.com>
2017-11-13 10:35:41 +00:00
Stefan Sauer
2812219adb docs: add missing '*' chars at start of doc-comments 2017-11-12 16:36:16 +01:00
Philip Withnall
63e9d109fd gmessages: Give examples of G_DEBUG with gdb in the documentation
Some of the documentation linked to information about G_DEBUG already,
but most of it didn’t, and there were no examples. People need obvious
examples.

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

https://bugzilla.gnome.org/show_bug.cgi?id=790157
2017-11-10 10:27:26 +00:00
Philip Withnall
b778ba3e64 gmessages: Improve formatting of a #define in the docs
Signed-off-by: Philip Withnall <withnall@endlessm.com>

https://bugzilla.gnome.org/show_bug.cgi?id=790157
2017-11-10 10:27:26 +00:00
Steve Lhomme
74c5e785d3 gmessages: Mark non-varargs log functions as static inline
Certain compilers warn about unused functions if they are declared in
the header but are not inline. We require `static inline` support from
all compilers now.

Typically, this code will not be used, as the compilers we care about
implement vararg macro support; but this code path can still be hit on
some compilers (probably; unverified).

(Commit message by Philip Withnall.)

https://bugzilla.gnome.org/show_bug.cgi?id=483341
2017-11-08 13:07:56 +00:00
Sanjeev
cd0bbbf1ef gvariant: Fix minor memory leak on error handling path
(Commit message by Philip Withnall.)

https://bugzilla.gnome.org/show_bug.cgi?id=760022
2017-11-08 12:36:26 +00:00
Cosimo Cecchi
5ebd8f6e88 gmain: add g_clear_handle_id API
It's a very common pattern to see code that looks like this in
dispose() or finalize() implementations:

if (priv->source_id > 0)
  {
    g_source_remove (priv->source_id);
    priv->source_id = 0;
  }

This API allows to accomplish the same goal with a single line:

g_clear_handle_id (&priv->source_id, (GClearHandleFunc) g_source_remove);

Thanks to Emmanuele Bassi <ebassi@gnome.org> for making the patch
generic.

https://bugzilla.gnome.org/show_bug.cgi?id=788489
2017-11-07 08:28:45 -08:00
Cosimo Cecchi
374ade1b68 glib: add g_build_filename_valist()
A new public API convenience to build a filename from a va_list.

https://bugzilla.gnome.org/show_bug.cgi?id=788488
2017-11-07 08:25:28 -08:00
Cosimo Cecchi
68d62c33fd gfileutils: factor out g_build_filename_va()
This will be used in a later commit.

https://bugzilla.gnome.org/show_bug.cgi?id=788488
2017-11-07 08:25:28 -08:00
Philip Withnall
8e8f4e6486 docs: Fix various minor syntax errors in gtk-doc comments
This will fix a few broken links in the documentation, and shut up a
load of gtk-doc warnings (but certainly not all of them).

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

https://bugzilla.gnome.org/show_bug.cgi?id=790015
2017-11-07 14:51:12 +00:00
Philip Withnall
fac219adf8 tests: Fix a couple of bug base URIs
bugs.gnome.org doesn’t redirect properly any more (and isn’t HTTPS).

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2017-11-07 11:45:53 +00:00
Philip Withnall
0d49cd1b11 gutils: Fix minor memory leak on error path
Introduced in commit d011223085.

Coverity CID: 1382472

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2017-11-06 10:31:52 +00:00
Daniel Macks
0091f7f212 Use __APPLE__ token to control OSX-specific tests
The carbon framework is deprecated and not really related to OSX's
printf features. Directly test compiler-defined token for the platform
itself rather than that autodetected framework as a proxy.

https://bugzilla.gnome.org/show_bug.cgi?id=731625
2017-11-03 20:19:58 +00:00
Martin
029cfa9109 build: Ensure .py files are generated at build time not install time
Otherwise installing with `sudo make install` fails.

https://bugzilla.gnome.org/show_bug.cgi?id=706667
2017-11-03 20:11:56 +00:00
Philip Withnall
fc817eb38a gthread: Emit a critical if g_rw_lock_reader_lock() fails
It can only fail if there’s been a leak or programmer error, so this is
really unlikely to happen. At least make it obvious something has gone
wrong, though, rather than silently carrying on and returning as if the
reader lock has been acquired.

Do the same for g_rw_lock_writer_lock().

It should be safe to use g_critical() for reporting the problems, since
GRWLock is not used in gmessages.c, and printing a critical seems better
than aborting, just in case we do hit the ‘maximum number of reader
locks’ error code.

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

https://bugzilla.gnome.org/show_bug.cgi?id=756430
2017-11-03 18:17:14 +00:00
Krzesimir Nowak
f5e229c76d convert: Fix tautological comparisons in tests
https://bugzilla.gnome.org/show_bug.cgi?id=767239
2017-11-03 16:43:23 +00:00
Philip Withnall
a6fc4daeb9 gmessages: Add timestamp to g_log_writer_format_fields()
Since journald adds a timestamp, it would be useful to add one to the
stdout/stderr output too — we do not want it to miss out on the
timestamping fun.

Make it blue, because we can.

https://bugzilla.gnome.org/show_bug.cgi?id=769846
2017-11-03 13:01:19 +00:00
Benoît Dejean
54f6c56235 utils: Add new G_FORMAT_SIZE_BITS flag for g_format_size_full()
It will return sizes in bits, rather than bytes.

https://bugzilla.gnome.org/show_bug.cgi?id=789170
2017-11-02 13:39:19 +00:00
Nirbheek Chauhan
953a51d97b meson: Fix installation of gdb autoload scripts v2
`install:` is not a valid keyword argument for configure_file()
2017-11-02 10:22:39 +05:30
Nirbheek Chauhan
625bfa0b36 meson: Fix comment explaining gdb hacks
https://bugzilla.gnome.org/show_bug.cgi?id=788772
2017-11-02 10:03:22 +05:30
Jan Alexander Steffens (heftig)
430e2dd3f5 meson: Fix GDB scripts install_dir for *nix
Disable installation on Windows for now as this would use a colon in the
directory name.

https://bugzilla.gnome.org/show_bug.cgi?id=788772
2017-11-02 09:58:17 +05:30
Tom Schoonjans
d011223085 g_get_host_name: ensure hostname has UTF8 encoding on Windows
Ensures that the hostname returned by g_get_host_name is always UTF8 encoded.
Previously, on Windows, the returned string would be encoded in the
current codepage, if it contained non-ASCII characters.

The unit test for g_get_host_name was updated with a check to ensure
that the hostname is indeed at UTF-8 string.

https://bugzilla.gnome.org/show_bug.cgi?id=789755
2017-11-01 15:46:07 +00:00
Руслан Ижбулатов
53bd6a359f W32: Add a stat() implementation for private use
This commit adds new W32-only functions to gstdio.c,
and a new header file, gstdioprivate.h.
These functions are:
g_win32_stat_utf8()
g_win32_lstat_utf8()
g_win32_fstat()
and they fill a private structure, GWin32PrivateStat,
which has all the fields that normal stat has, as well as some
extras.

These functions are then used throughout glib and gio to get better
data about the system. Specifically:
* Full, 64-bit size, guaranteed (g_stat() is forced to use 32-bit st_size)
* Full, 64-bit file identifier (st_ino is 0 when normal stat() is used, and still is)
* W32 File attributes (which stat() doesn't report); in particular, this allows
  symlinks to be correctly identified
* Full, 64-bit time, guaranteed (g_stat() uses 32-bit st_*time on 32-bit Windows)
* Allocated file size (as a W32 replacement for the missing st_blocks)

st_mode remains unchanged (thus, no S_ISLNK), so when these are given back to
glib users (via g_stat(), for example, which is now implemented by calling g_win32_stat_utf8),
this field does not contain anything unexpected.

g_lstat() now calls g_win32_lstat_utf8(), which works on symlinks the way it's supposed to.

Also adds the g_win32_readlink_utf8() function, which behaves like readlink()
(including its inability to return 0-terminated strings and inability to say how large
the output buffer should be; these limitations are purely for compatibility with
existing glib code).

Thus, symlink support should now be much better, although far from being complete.

A new W32-only test in gio/tests/file.c highlights the following features:
* allocated size
* 64-bit time
* unique file IDs

https://bugzilla.gnome.org/show_bug.cgi?id=788180
2017-11-01 12:46:38 +00:00
Benoît Dejean
7ccbd86537 utils: refactor g_format_size_full
Refactor g_format_size_full to avoid duplicate code and make it easier to
add more units.

https://bugzilla.gnome.org/show_bug.cgi?id=789170
2017-10-27 12:18:53 +01:00
Christoph Reiter
fed574a0c8 introspection: Add more filename type annotations for strings which can contain filenames
This continues the changes done in https://bugzilla.gnome.org/show_bug.cgi?id=767245

This makes it possible to pass Python path types as process arguments and env vars
in PyGObject and and makes it clear that the values are not strictly utf-8 and need
to be validated/converted first.

https://bugzilla.gnome.org/show_bug.cgi?id=788863
2017-10-26 18:51:51 +02:00
Philip Withnall
3d35379382 docs: Fix typo in documentation for G_PRIVATE_INIT
Signed-off-by: Philip Withnall <withnall@endlessm.com>
2017-10-26 13:55:46 +01:00
Philip Withnall
a71251dc40 gkeyfile: Add some examples to the documentation
Add some examples of loading and saving key files.

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

https://bugzilla.gnome.org/show_bug.cgi?id=330458
2017-10-26 12:58:59 +01:00
Philip Withnall
3eacec1587 Use hash tables as sets in various places
Where we were already treating GHashTables as sets, modify them to use
the set-specific APIs g_hash_table_add() and g_hash_table_contains(), to
make that usage more obvious and less prone to being broken.

Heavily based on patches by Garrett Regier <garrettregier@gmail.com>.

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

https://bugzilla.gnome.org/show_bug.cgi?id=749371
2017-10-26 12:27:17 +01:00
Philip Withnall
f43babfea3 Revert "utils: refactor g_format_size_full"
This reverts commit 51f9c95cf2.

It’s changed the set of translatable strings generated in the POT file.
Reverting until a fix can be found for that.

https://bugzilla.gnome.org/show_bug.cgi?id=789170
2017-10-26 00:01:21 +01:00
Benoît Dejean
51f9c95cf2 utils: refactor g_format_size_full
Refactor g_format_size_full to avoid duplicate code and make it easier to
add more units.

https://bugzilla.gnome.org/show_bug.cgi?id=789170
2017-10-25 16:09:58 +01:00
Ole André Vadla Ravnås
b829b762fd gutf8: Fix length handling in g_utf8_make_valid()
We cannot blindly append the remainder when a length was provided
because the string isn't nul-terminated.

https://bugzilla.gnome.org/show_bug.cgi?id=789444
2017-10-25 10:33:48 +01:00
Simon McVittie
6e480634c6 g_child_watch_source_new: Document restrictions for POSIX platforms
The warnings issued when dealing with waitpid() raising ECHILD are
somewhat misleading: there are lots of reasons why waitpid() might
fail in this way, and we can't tell which one has happened.
In particular, passing a non-child or a non-pid, waiting for the same
pid elsewhere, or creating a duplicate watch for the same pid would
all fail in the same way.

Consolidate the restrictions into one place, and change all the other
places they were (or should have been!) mentioned to point to
that one place.

Signed-off-by: Simon McVittie <smcv@collabora.com>
Reviewed-by: Philip Withnall <withnall@endlessm.com>
Bug: https://bugzilla.gnome.org/show_bug.cgi?id=723743
2017-10-12 12:22:27 +01:00
Руслан Ижбулатов
4a77eb16ce Replace all instances of ssize_t with gssize
ssize_t is supported widely, but not universally, so use gssize instead.
Currently only one piece of code actually *needs* this change to be compilable
with MSVC, the rest are mostly in *nix parts of the code, but these are changed
too, for symmetry.

https://bugzilla.gnome.org/show_bug.cgi?id=788180
2017-10-11 12:56:11 +01:00
Emmanuele Bassi
17e29bebd9 Document how to integrate GTest into your project
We are missing the documentation on how to use GTest inside a project.

While we mention in passing gtester and gtester-report, the reality is
that we don't tell anybody how to use them inside their own build
system. Additionally, gtester and gtester-report are deprecated and kind
of abandoned, in favour of tools native to common build systems, such as
the TAP harness in Autotools, and the test harness in Meson.

See also:

  https://stackoverflow.com/questions/19958861/how-to-properly-set-up-glib-testing-framework-with-autotools

https://bugzilla.gnome.org/show_bug.cgi?id=788561
2017-10-11 12:19:06 +01:00
Andrew Potter
5564ddef12 gdate: add g_date_copy()
This will allow passing invalid GDates through GValues.

https://bugzilla.gnome.org/show_bug.cgi?id=760109
2017-10-11 12:13:20 +01:00
Philip Withnall
652a47d1d1 docs: Fix a typo in the GSlice documentation
And in a few of its variable names. s/adress/address/.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2017-10-11 11:48:08 +01:00
Jason Conti
bf7fcd2559 gtester-report: Ignore package, version and revision info if missing
https://bugzilla.gnome.org/show_bug.cgi?id=668035
2017-10-11 10:42:20 +01:00
Nirbheek Chauhan
62dedcb099 gmacros: Fix deprecations support with ICC
ICC defines __GNUC__ (to emulate GCC), but has its own method of
disabling deprecations.

https://bugzilla.gnome.org/show_bug.cgi?id=776562
2017-10-11 09:47:02 +01:00
Emmanuele Bassi
dc39232ded Do not build journal integration on older Linux platforms
We need to add more checks for journal_sendv(), as we depend on the
presence of mkostemp() and O_CLOEXEC, which may not be available on
older Linux platforms, like RHEL 5.

https://bugzilla.gnome.org/show_bug.cgi?id=788705
2017-10-09 12:45:59 +01:00
Philip Withnall
860dc949ca tests: Add some assertions on some otherwise-unused variables
Signed-off-by: Philip Withnall <withnall@endlessm.com>

https://bugzilla.gnome.org/show_bug.cgi?id=751738
2017-10-06 12:57:06 +01:00
SilentFlame
bd2fa54637 glib: Correct typos of ‘character’
https://bugzilla.gnome.org/show_bug.cgi?id=774083
2017-10-06 12:49:12 +01:00
Christian Persch
2bdec0c2f2 gbytes: Fix check in try_steal_and_unref
Need to check if the user data is equal to the data, before
taking the data out of the GBytes!

Bug #670139.
2017-10-06 12:41:35 +01:00
Andrew Borodin
7895706c82 Type accuracy for result of strlen() in string utilities
https://bugzilla.gnome.org/show_bug.cgi?id=630983
2017-10-06 12:32:10 +01:00
Philip Withnall
5040de9fc7 docs: Mention gsize, goffset, etc. are in C99
Signed-off-by: Philip Withnall <withnall@endlessm.com>

https://bugzilla.gnome.org/show_bug.cgi?id=569375
2017-10-06 12:14:59 +01:00
Philip Withnall
493723b4d9 gmessages: Update advice for G_LOG_DOMAIN
Suggest defining it for all code — for applications as well as for
libraries. This allows G_MESSAGES_DEBUG=my-app to be used to filter out
all messages from libraries which it uses, for example.

https://bugzilla.gnome.org/show_bug.cgi?id=777956
2017-10-06 11:26:47 +01:00
Philip Withnall
8330b09d78 Bug 679467 — Mention translation in g_warning() documentation
Include a line in the documentation for g_warning(), g_error(), g_critical()
and g_debug() mentioning that the messages passed to them typically should not
be translated.

Closes: https://bugzilla.gnome.org/show_bug.cgi?id=679467
2017-10-06 11:23:01 +01:00
Volker Sobek
c7dc81ce78 docs: Escape some backslashes for markdown
These no longer showed up correctly in the documentation.

https://bugzilla.gnome.org/show_bug.cgi?id=727346
2017-10-05 15:07:09 +01:00
Martin Blanchard
d3745d14e1 gprintf: Add a reminder concerning <glib/gprintf.h>
g_printf(), g_fprintf(), g_sprintf(), g_vprintf(), g_vfprintf(),
() and g_vasprintf() require gprintf.h to be explicitly included
in order to be used. This patch adds a reminder in each function's
documentation abstract.

https://bugzilla.gnome.org/show_bug.cgi?id=760716
2017-10-05 15:02:39 +01:00
Martin Blanchard
c443adeffb gprintf: Fix documentation regarding <glib/gprintf.h>
g_snprintf() and g_vsnprintf() declarations were moved and
don't require gprintf.h to be included anymore but g_vasprintf()
is and requires gprintf.h to be explicitly included.

https://bugzilla.gnome.org/show_bug.cgi?id=760716
2017-10-05 15:01:28 +01:00
Philip Withnall
85680f4a06 docs: Rewrap line to avoid it being interpreted as a list
Signed-off-by: Philip Withnall <withnall@endlessm.com>

https://bugzilla.gnome.org/show_bug.cgi?id=767215
2017-10-05 14:49:49 +01:00
Aurélien Zanelli
21d2c64660 gfileutils: add some sanity checks
To avoid handling non-null GError or NULL filename.

https://bugzilla.gnome.org/show_bug.cgi?id=754026
2017-10-05 13:42:19 +01:00
Simon McVittie
733c7bd9c5 g_test_log: Consistently use GLib whitespace style
Bug: https://bugzilla.gnome.org/show_bug.cgi?id=788467
Signed-off-by: Simon McVittie <smcv@collabora.com>
Reviewed-by: Philip Withnall <withnall@endlessm.com>
2017-10-03 17:22:48 +01:00
Simon McVittie
23ba8aec92 testutils: Report fatal errors and warnings as TAP
Lines starting with "Bail out!" are special TAP syntax: they mark
the entire test execution (one binary or script) as failed, and stop
processing. Automake's parallel test harness knows this, and will print
the diagnostic in the test results, leading to clearer output.

Without this change, having changed glib/tests/bytes.c to emit a
spurious g_warning():

ERROR: bytes - too few tests run (expected 15, got 0)
ERROR: bytes - exited with status 133 (terminated by signal 5?)

With this change, it's clearer what has happened:

ERROR: bytes - Bail out! FATAL-WARNING: I broke this as a demonstration

Bug: https://bugzilla.gnome.org/show_bug.cgi?id=788467
Signed-off-by: Simon McVittie <smcv@collabora.com>
Reviewed-by: Philip Withnall <withnall@endlessm.com>
2017-10-03 15:16:15 +01:00
Philip Withnall
81d7af312e gmem: Make it more obvious that g_mem_set_vtable() does nothing
Clarify the big deprecation warning in the documentation.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2017-10-03 09:36:08 +01:00
Philip Withnall
702b6af87c gtestutils: Explicitly cast args to g_assertion_message_cmpnum()
This avoids warnings when compiling with -Wconversion on 32-bit
architectures, as the conversion to (long double) is not necessarily
lossless. We don’t care about that, though, since the actual comparison
was done with the correct types, and g_assertion_message_cmpnum() is
only used to print failure information.

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

https://bugzilla.gnome.org/show_bug.cgi?id=788385
2017-10-02 15:32:46 +01:00
Philip Withnall
0e888bdf52 gtypes: Fix signedness of __builtin_bswap() usage
In GUINT64_TO_BE(), for example, when compiling with -Wsign-conversion,
we get a warning due to an implicit cast from (gint64) to (guint64) when
passing the argument to __builtin_bswap64().

According to the GCC documentation, __builtin_bswap64() takes an
unsigned argument:

https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html

Cast the input appropriately.

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

https://bugzilla.gnome.org/show_bug.cgi?id=788384
2017-10-02 15:31:20 +01:00
Philip Withnall
1304197ed0 gmessages: Fix a typo in the documentation for g_log_set_handler_full()
Signed-off-by: Philip Withnall <withnall@endlessm.com>
2017-09-22 13:34:19 +01:00
Chun-wei Fan
4fd056a5f5 glib/glibconfig.h.win32.in: Update and clean up
Make the entries in here more consistent with what Meson produces with
its Visual Studio builds.  Also fix the macros [GSIZE|GSSIZE]_TO_[LE|BE]
for x64 builds.
2017-09-15 12:50:50 +08:00
Robert Ancell
db2ae64636 Fix comment/docs grammar: incase -> in case 2017-09-15 13:50:41 +12:00
Chun-wei Fan
a7a6449f4d meson: Install items according to their relevance
The m4 and bash completion items are usable and relevant
depending on the host system's configuration.  So, we check for the
presence of the programs that these items depend on, and only install
them when those programs are found.

For the Valgrind suppression files, we don't install them on Windows as
Valgrind is currently not supported on Windows.

Als fix the path where the GDB helpers are installed, as the path is
incorrectly constructed.

This will fix the "install" stage when building on Visual Studio at
least as there are some post-install steps that are related to them,
which will make use of these programs.

https://bugzilla.gnome.org/show_bug.cgi?id=783270
2017-09-14 16:02:03 +08:00
Chun-wei Fan
4c417c4965 build: Define G_HAVE_GNUC_[VARARGS|VISIBILITY] conditionally
They are not supported by Visual Studio, so only define them in
glibconfig.h.in when not on Visual Studio.  Fixes builds of GTK+-2.x
against Meson/MSVC builds of GLib.

https://bugzilla.gnome.org/show_bug.cgi?id=783270
2017-09-14 10:23:34 +08:00
Philip Withnall
015ab311f8 gmessages: Add IDs for documentation headers
This fixes some broken cross-references between various places in the
logging documentation.

Signed-off-by: Philip Withnall <withnall@endlessm.com>
2017-09-13 17:07:29 +01:00
Philip Withnall
a2cf4806a4 tests: Add tests for g_slist_copy() and g_slist_copy_deep()
This gives us 100% coverage of GSList (when running `make lcov`).

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

https://bugzilla.gnome.org/show_bug.cgi?id=787581
2017-09-13 13:37:13 +01:00
Philip Withnall
1a5cebec39 docs: Discourage use of gstdio.h and clarify its header requirements
Signed-off-by: Philip Withnall <withnall@endlessm.com>

https://bugzilla.gnome.org/show_bug.cgi?id=781598
2017-09-12 12:20:18 +01:00
Philip Withnall
39469aa7bb Revert "gstdio: #include fcntl.h on UNIX in gstdio.h"
This reverts commit 6f8073d44a.

As per further discussion on bug #781598, we can’t do this in GLib,
since fcntl.h is not guaranteed to be present on all Unix systems. Users
of GLib *must* do a header check (for example, using AC_CHECK_HEADERS)
and #include fcntl.h themselves.
2017-09-12 12:12:27 +01:00
Christian Schramm
54e3ed17f0 gslist: Simplified node removal and got rid of some code duplication
Merged two almost identical functions for removing at most one
or all nodes containing some data. Also simplified the code a bit
by using a pointer to a pointer (see
http://wordaligned.org/articles/two-star-programming).

(Modified by Philip Withnall to fix two code formatting nitpicks.)

https://bugzilla.gnome.org/show_bug.cgi?id=722256
2017-09-12 12:11:06 +01:00
Reuben Thomas
6f8073d44a gstdio: #include fcntl.h on UNIX in gstdio.h
https://bugzilla.gnome.org/show_bug.cgi?id=781598
2017-09-12 11:10:54 +01:00
Mikhail Zabaluev
48cf1d32c6 Fix up closure annotations for GSpawnChildSetupFunc
https://bugzilla.gnome.org/show_bug.cgi?id=738176
2017-09-11 21:07:08 +01:00
Mikhail Zabaluev
3ee5bb1120 Annotate g_bookmark_file_new() as a constructor
https://bugzilla.gnome.org/show_bug.cgi?id=756011
2017-09-11 21:01:15 +01:00
Mikhail Zabaluev
7759542ee3 gconvert: Skip the GIConv API from introspection
It's ugly:
- The core method, g_iconv(), can't be annotated with good semantics.
- The error value of g_iconv_open() is not representable in today's
  introspection.

https://bugzilla.gnome.org/show_bug.cgi?id=756128
2017-09-11 20:47:11 +01:00
Mikhail Zabaluev
01544c9269 Skip g_base64_decode_step() in introspection
The length of the caller-allocated (that flag was missing; added as well)
output array is calculated by a formula, so none of the usual array length
annotations apply. The state parameters need to be initialized with zero.

Just let them use the basic API.

https://bugzilla.gnome.org/show_bug.cgi?id=756103
2017-09-11 20:44:39 +01:00
Mikhail Zabaluev
28e8684168 gdataset: Skip problematic functions in the introspection
The functions with a GDestroyNotify to the data, or other ill-fitting
allocation semantics, are not currently introspectable.

The effect for the binding user would be that they're unable to
create or destroy a GData list, but they might still have an API
to poke at some data pointers from it.

In fact, none of the functions dealing with GData** or a dataset
location pointer are likely to get sensible bindings anyway;
the annotations added are mostly to avoid memory unsafety
and leaks.

https://bugzilla.gnome.org/show_bug.cgi?id=756470
2017-09-11 20:26:53 +01:00
Mikhail Zabaluev
a3ba8ea7d3 gdataset: Annotate the closures
Annotate the closure parameters in GDataForeachFunc, GDuplicateFunc,
and the functions using them.

https://bugzilla.gnome.org/show_bug.cgi?id=756470
2017-09-11 20:26:53 +01:00
Mikhail Zabaluev
2a0e1c8422 gdataset: Correct (nullable) and (transfer none) annotations
https://bugzilla.gnome.org/show_bug.cgi?id=756470
2017-09-11 20:26:53 +01:00
Mikhail Zabaluev
595a7e3bb2 g_datalist_id_replace_data: Annotate the out parameter
https://bugzilla.gnome.org/show_bug.cgi?id=756470
2017-09-11 20:26:52 +01:00
Robert Ancell
491f835c17 GDateTime: Support parsing ISO 8601 strings
This supports a subset of ISO 8601 since that is a commonly used standard for
storing date and time information. We support only ISO 8601 strings that contain
full date and time information as this would otherwise not map to GDateTime.
This subset includes all of RFC 3339 which is commonly used on the Internet and
the week and ordinal day formats as these are supported in the GDateTime APIs.

(Minor modification by Philip Withnall to change API versions from 2.54
to 2.56.)

https://bugzilla.gnome.org/show_bug.cgi?id=753459
2017-09-11 19:29:34 +01:00
Philip Withnall
0c15e9cd56 gversionmacros: Add version macros for GLib 2.56
Signed-off-by: Philip Withnall <withnall@endlessm.com>
2017-09-11 19:24:06 +01:00
INSUN PYO
61cb8b232b GMainLoop: match of parameter pair of LOCK_CONTEXT/UNLOCK_CONTEXT
There is no reason to use source->context as as parameter of UNLOCK_CONTEXT.
To avoid confusion, change to the parameter used in LOCK_CONTEXT.

https://bugzilla.gnome.org/show_bug.cgi?id=787146
2017-09-08 15:57:59 +01:00
Bastien Nocera
f813ce6abe glib: Slightly update GIOChannel documentation
Explain the default values of _{get,set}_close_on_unref() in the main
description rather than the argument one, link to the GIOChannel
structure when talking about it, and mention the default value of
"close on unref" in g_io_channel_unix_new().

https://bugzilla.gnome.org/show_bug.cgi?id=787123
2017-09-08 15:40:15 +01:00
Armin K
414225d7b3 meson: Compile guuid.c into libglib-2.0
https://bugzilla.gnome.org/show_bug.cgi?id=786807
2017-08-29 12:54:51 +03:00
Philip Withnall
2586eb9921 docs: Clarify lack of threading guarantees in GArray
Signed-off-by: Philip Withnall <withnall@endlessm.com>

https://bugzilla.gnome.org/show_bug.cgi?id=786555
2017-08-22 15:58:18 +01:00
INSUN PYO
15faf0ef62 glog: fix crash on Linux without stderr stream
0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:58
1  0xb67c43f0 in __GI_abort () at abort.c:89
2  0xb69ee9d8 in _g_log_abort (breakpoint=2, breakpoint@entry=1) at gmessages.c:548
3  0xb69ef692 in g_logv (log_domain=0xb6a1dfc8 "GLib", log_level=-1254563840, log_level@entry=G_LOG_LEVEL_CRITICAL, format=format@entry=0xb6a26a48 "%s: assertion '%s' failed", args=..., args@entry=...) at gmessages.c:1357
4  0xb69ef728 in g_log (log_domain=<optimized out>, log_level=log_level@entry=G_LOG_LEVEL_CRITICAL, format=0xb6a26a48 "%s: assertion '%s' failed") at gmessages.c:1398
5  0xb69efa5a in g_return_if_fail_warning (log_domain=<optimized out>, pretty_function=<optimized out>, expression=<optimized out>) at gmessages.c:2687
6  0xb69efe7c in g_log_writer_is_journald (output_fd=-1) at gmessages.c:2122
7  0xb69f02a2 in g_log_writer_default (log_level=G_LOG_LEVEL_CRITICAL, fields=0xbedc9d00, n_fields=4, user_data=0x0) at gmessages.c:2584
8  0xb69ef21a in g_log_structured_array (log_level=G_LOG_LEVEL_CRITICAL, fields=0xbedc9d00, n_fields=4) at gmessages.c:1933
9  0xb69ef47e in g_log_default_handler (log_domain=0xb6a1dfc8 "GLib", log_level=G_LOG_LEVEL_CRITICAL, message=<optimized out>, unused_data=<optimized out>) at gmessages.c:3036
10 0xb69ef5fc in g_logv (log_domain=0xb6a1dfc8 "GLib", log_level=log_level@entry=G_LOG_LEVEL_CRITICAL, format=format@entry=0xb6a26a48 "%s: assertion '%s' failed", args=..., args@entry=...) at gmessages.c:1336
11 0xb69ef728 in g_log (log_domain=<optimized out>, log_level=log_level@entry=G_LOG_LEVEL_CRITICAL, format=0xb6a26a48 "%s: assertion '%s' failed") at gmessages.c:1398
12 0xb69efa5a in g_return_if_fail_warning (log_domain=<optimized out>, pretty_function=<optimized out>, expression=<optimized out>) at gmessages.c:2687

If stderr is not associated with an output stream, the fileno(stderr) returned is -1.
So, g_return_if_fail_warning is recursively called and the abort occurs on the second call.

Modified by Philip Withnall to include mention this in the
documentation.

https://bugzilla.gnome.org/show_bug.cgi?id=786452
2017-08-18 09:26:12 +01:00
Chun-wei Fan
ea6ac5f71e meson/Windows: Check whether system PCRE is a static build
Instead of hardcoding -DPCRE_STATIC into the CFLAGS of GLib, do the
following on Windows only (since PCRE_STATIC only matters on Windows):

-If there is no installed PCRE, use the included PCRE copy and
 enable -DPCRE_STATIC, as we did before.
-If there is a installed PCRE, check whether the PCRE build is a static
 or DLL build by checking the linkage against pcre_free() with
 PCRE_STATIC defined works.  If it does, enable -DPCRE_STATIC.
-On non-Windows builds, do not enable -DPCRE_STATIC

https://bugzilla.gnome.org/show_bug.cgi?id=783270
2017-08-17 18:26:02 +08:00
Chun-wei Fan
72528938b7 Meson: Check for HAVE_GOOD_PRINTF
The HAVE_GOOD_PRINTF config variable determines whether we are able to
use the CRT-supplied *printf() functions directly, by determining whether
the CRT-supplied vsnprintf() and snprintf() functions support C99 well
enough.

This means, we need to build the gnulib subdir as a static lib in GLib, and use
the gnulib *printf() functions when:

-We are on Windows
-The CRT's vsnprintf() and snprintf() is not sufficiently C99-compliant.

This will fix the problem when the *printf() functions cause a CRT
abort() call on pre-2015 Visual Studio builds at least, and ensures that
the Visual Studio 2015+ builds will pass the printf tests in GLib, since
the *printf() in Visual Studio 2015/2017's CRT does not support the %n
format specifier, nor the positional parameters (which requires
different _*printf_p*() functions), as indicated by
glib/tests/test-printf.c.

https://bugzilla.gnome.org/show_bug.cgi?id=783270
2017-08-17 17:46:37 +08:00
Robert Ancell
947fea1d16 GDateTime: Reject days outside of month limits
The previous code allowed February 30th.
2017-08-16 11:47:32 +12:00
Руслан Ижбулатов
788705633e W32: Support XDG_* environment variables
Try to get XDG_* environment variables and, if they are available, use their
contents to initialize various directories the same way this happens on *nix.
When these variables are not available, fall back to the W32-specific APIs for
getting directories.

https://bugzilla.gnome.org/show_bug.cgi?id=766358
2017-08-14 15:45:01 +01:00
Philip Withnall
fac7f2be2e gsequence: Add introspection annotations to Return values
Signed-off-by: Philip Withnall <withnall@endlessm.com>

https://bugzilla.gnome.org/show_bug.cgi?id=786060
2017-08-10 16:38:41 +01:00
Daniel Boles
f6aa8c3988 GSList: Note that using ->next directly is OK
as for GList
2017-08-07 20:39:06 +01:00
Daniel Boles
a2ec32833e GList: Fix typo of member ->prev in documentation
It said list->previous, which is not a thing that exists.
2017-08-07 20:33:25 +01:00
Tim-Philipp Müller
a1fdae8afc meson: don't error out if xmllint is not found
Only needed for glib/tests and entirely optional.
2017-08-03 19:23:25 +01:00
Daniel Boles
e02e3540ab gspawn: Don’t mention removed gdk_spawn functions
Mention alternatives that actually still exist instead.

https://bugzilla.gnome.org/show_bug.cgi?id=785520
2017-08-03 14:44:40 +01:00