Commit e53caad4 makes _g_log_abort() noreturn by calling abort()
unconditionally.
However, it is useful to be able to skip some log_abort() with a
debugger, to reach a point of interest. Revert back to previous
behaviour. Make g_assert_warning() noreturn by calling abort().
https://bugzilla.gnome.org/show_bug.cgi?id=711800
g_test_init() was calling _g_messages_set_exit_on_fatal() from
subprocesses, to make fatal log messages call _exit() rather than
abort(), but the function name is sort of confusing, and we don't
really need it anyway, since g_log() can just call g_test_subprocess()
instead and decide for itself.
Likewise, update g_assertion_message() to do the check itself, rather
than calling into gmessages to do it, and fix
g_assertion_message_expr() to also check whether it should exit or
abort. (Previously it always called abort(), although this didn't
actually matter since that was dead code until
test_nonfatal_assertions was added.)
https://bugzilla.gnome.org/show_bug.cgi?id=711800
In Windows development environments that have it, <unistd.h> is mostly
just a wrapper around several other native headers (in particular,
<io.h>, which contains read(), close(), etc, and <process.h>, which
contains getpid()). But given that some Windows dev environments don't
have <unistd.h>, everything that uses those functions on Windows
already needed to include the correct Windows header as well, and so
there is never any point to including <unistd.h> on Windows.
Also, remove some <unistd.h> includes (and a few others) that were
unnecessary even on unix.
https://bugzilla.gnome.org/show_bug.cgi?id=710519
Debug messages are meant to give insight into how a process is
proceeding, and are unpredictable in nature. They also often have
line numbers in them.
This patch ignores debug messages in g_test_assert_expected_messages().
https://bugzilla.gnome.org/show_bug.cgi?id=710991
Allow passing a NULL domain to g_test_expect_message(), and more
importantly, don't crash if a message with a NULL domain gets logged
while there is an expected message.
Back in the far-off twentieth century, it was normal on unix
workstations for U+0060 GRAVE ACCENT to be drawn as "‛" and for U+0027
APOSTROPHE to be drawn as "’". This led to the convention of using
them as poor-man's ‛smart quotes’ in ASCII-only text.
However, "'" is now universally drawn as a vertical line, and "`" at a
45-degree angle, making them an `odd couple' when used together.
Unfortunately, there are lots of very old strings in glib, and also
lots of new strings in which people have kept up the old tradition,
perhaps entirely unaware that it used to not look stupid.
Fix this by just using 'dumb quotes' everywhere.
https://bugzilla.gnome.org/show_bug.cgi?id=700746
Since we expect them to crash, let's not spam the system
core dump collection (systemd, abrt). At the moment
systemd is not very robust against programs crashing
in loops.
Instead of aborting, we exit(1).
https://bugzilla.gnome.org/show_bug.cgi?id=700714
g_test_trap_fork() doesn't work on Windows and is potentially flaky on
unix anyway given the fork-but-don't-exec. Replace it with
g_test_trap_subprocess(), which re-spawns the same program with
arguments telling it to run a specific (otherwise-ignored) test case.
Make the existing g_test_trap_fork() unit tests be unix-only (they
never passed on Windows anyway), and add a parallel set of
g_test_trap_subprocess() tests.
Also fix the logic of gtestutils's "-p" argument (which is used by the
subprocess tests); previously if you had tests "/foo/bar" and
"/foo/bar/baz", and ran the test program with "-p /foo/bar/baz", it
would run "/foo/bar" too. Fix that and add tests.
https://bugzilla.gnome.org/show_bug.cgi?id=679683
g_test_trap_fork() doesn't work on Windows and is potentially flaky on
unix anyway given the fork-but-don't-exec. Replace it with
g_test_trap_subprocess(), which re-spawns the same program with
arguments telling it to run a specific (otherwise-ignored) test case.
Make the existing g_test_trap_fork() unit tests be unix-only (they
never passed on Windows anyway), and add a parallel set of
g_test_trap_subprocess() tests.
https://bugzilla.gnome.org/show_bug.cgi?id=679683
When running a test program (ie, if g_test_init() has been called),
don't pop up a dialog box when a fatal error occurs. Just print the
message to stderr and exit.
https://bugzilla.gnome.org/show_bug.cgi?id=679683
We check if the log level is in the "prefixed" list by checking it
against the g_log_msg_prefix bitfield.
Unfortunately we were failing to mask by G_LOG_LEVEL_MASK first, so if
the FATAL bit was set (for example) then it would never match. This was
the case for g_error().
https://bugzilla.gnome.org/show_bug.cgi?id=672026
Make sure that it calls absolutely nothing that may ever recurse back
into GLib again:
- g_ascii_strcasecmp() is unsafe because it has g_return_if_fail() at
the top. As far as I know, the only ASCII character letter that
would get special treatment here is "i" and that appears in neither
"help" nor "all".
- g_getenv() is very complicated on Windows, so use a simple version
that is sufficient for our purposes.
Now that it's completely safe, we can just call it from g_logv() in the
usual way without all of the hacks.
https://bugzilla.gnome.org/show_bug.cgi?id=660744
All locks are now zero-initialised, so we can drop the G_*_INIT macros
for them.
Adjust various users around GLib accordingly and change the docs.
https://bugzilla.gnome.org/show_bug.cgi?id=659866
Take out the half-private g_private_init() stuff and replace it with a
G_PRIVATE_INIT macro that allows specifying a GDestroyNotify.
Expose the GPrivate structure in a public header.
Add a g_private_replace() to (sort of) match the functionality of
g_static_mutex_set().
Improve the documentation.
Deprecate g_private_new().
We remove the macros while at the same time switching all libglib users
from g_private_new() to g_private_init(). We deal with the strange
expectations of the libglib code that g_private_* should work before the
GPrivate has been initialised with a temporary shim.
On Linux with gdb, it's much more convenient to debug programs using
G_DEBUG=fatal-warnings if we send SIGTRAP instead of abort() by
default. The default handler for both is to terminate the process.
In particular this makes it more easily possible to debug a warning
that's not the first in a program; you can skip past it and
go to the warning you care about.
The "aborting..." message is removed since it's no longer accurate,
and anyways was never very useful; crashes should show up in ABRT/apport
type crash catching systems.
https://bugzilla.gnome.org/show_bug.cgi?id=648423
Implement g_test_log_set_fatal_handler which is a function similar to
g_log_set_default_handler but for use in unit tests where certain
errors have to be ignored because it is not possible to fix or avoid
them otherwise. A unit test is added.
2007-12-10 15:08:59 Tim Janik <timj@imendio.com>
* let g_warn_if_fail replace g_assert as discussed here:
http://mail.gnome.org/archives/gtk-devel-list/2007-October/msg00089.html
* fix bug #502498: Test framework assertion failures should follow
gcc error format.
* gmessages.h, gmessages.c: deprecated g_assert_warning() which is
unused now. removed g_assert*() definitions whcih are provided by
gtestutils.h now. added g_warn_if_reached() and g_warn_if_fail()
which are recommended as g_assert/g_assert_not_reached replacements
for non-test programs.
added g_warn_message() to implement g_warn_*() macros.
use emacs-next-error friendly formatting for file:line: for warnings.
* gtestutils.h, gtestutils.c: use emacs-next-error friendly formatting.
implement g_assert_not_reached() with g_assertion_message() and
g_assert() in terms of g_assertion_message_expr() so we'll be able to
provide assertion messages in test logs.
* gkeyfile.c, gbookmarkfile.c: changed g_assert*() to g_warn_if_fail()
or g_return_if_fail() where suitable.
* gio/: changed g_assert to g_warn_if_fail.
svn path=/trunk/; revision=6086
2007-01-26 Matthias Clasen <mclasen@redhat.com>
* gmem.c:
* gslice.c:
* gmessages.c:
* gutils.c: Make some structs which are used only once
non-static.
svn path=/trunk/; revision=5316
2006-12-28 Tor Lillqvist <tml@novell.com>
* glib/gmessages.c (g_logv): On Win32, if we get a fatal error
message while being debugged we break into the debugger with
G_BREAKPOINT(). Don't call abort() if the user is foolhardy enough
to continue after the breakpoint. The user presumably knows what
he is doing and deserves what he gets. (#376645, Andreas Köhler)
2006-05-09 Sebastian Wilhelmi <wilhelmi@google.com>
* glib/gthreadinit.h: Renamed to glib/gthreadprivate.h and moved
system thread identifier comparision and assignment macros from
glib/gthread.c to glib/gthreadprivate.h.
* glib/Makefile.am, glib/gatomic.c, glib/gconvert.c, glib/gmain.c,
glib/gmem.c, glib/gmessages.c, glib/grand.c, glib/gslice.c,
glib/gthread.c, glib/gutils.c, gthread/gthread-impl.c: Use
glib/gthreadprivate.h instead of glib/gthreadinit.h.
* gthread/gthread-impl.c: Use GSystemThread instead of GThread for
owner determination. This fixes#311043 and is mostly modeled
after the patch from jylefort@FreeBSD.org.
Thu Dec 1 17:32:46 2005 Tim Janik <timj@imendio.com>
* glib/gslice.[hc]: new slice allocator implementation.
* tests/slice-test.c: added random slice allocation test.
* glib/gthread.[hc]: removed newly added private thread mem API.
* glib/gthreadinit.h:
* glib/gmessages.c:
* glib/gthread.c:
* glib/gmem.c: divided glib threading initialisation into three phases,
initialisation where private keys and messaging are not available (only
needed by gmem.c), initialisation without messaging but private keys
available (gslice.c, gmessage.c), and full fledged initialisers that
server the rest of glib. initialisation functions got renamed to reflect
the limitations of their corresponding phases.
* glib/gmem.c: removed memchunk code, defer allocations to
g_slice_* instead.
* glib/gmem.[hc]: removed g_slice_* skeletons.
* glib/glib.symbols: added g_slice_* symbols.
* configure.in: check for availability of posix_memalign(3), memalign(3)
and valloc(3).
* glib/Makefile.am: added gslice.[hc].
2005-11-04 Matthias Clasen <mclasen@redhat.com>
* glib/gdebug.h: add new GDebugFlag for fatal_criticals
* glib/gmessages.c: (_g_debug_init): handle G_DEBUG=fatal_criticals,
to help find critical warnings in applications. (#320017,
Vincent Untz)
2005-07-01 Hans Breuer <hans@breuer.org>
* glib/gmessages.c : include <process.h> for getpid()
* glib/gmappedfile.c : include <io.h> for close() etc.
* glib/makefile.msc.in : add gmappedfile.obj
2005-03-20 Tor Lillqvist <tml@novell.com>
* glib/gmessages.c (g_log_default_handler)
* glib/gutils.c (g_get_prgname): Move the Win32 code that asks the
program name from the system to g_get_prgname(). Do output the pid
also on Win32 (useful in case there are several instances of the
same program running).
2005-03-13 Matthias Clasen <mclasen@redhat.com>
Make PLT-reduction work with gcc4, and don't include
everything in galias.h:
* glib/glib.symbols: Group symbols by header and source file.
* glib/makegalias.pl: Protect definitions by the same
preprocessor symbols used to guard the headers. Move
the alias declarations to a separate file which is
produced when calling makegalias.pl -def
* glib/Makefile.am (galiasdef.c): Add a rule to generate this
file.
* glib/*.c: Include galias.h after the other GLib headers,
include galiasdef.c at the bottom.
2005-01-19 Tor Lillqvist <tml@novell.com>
* glib/gbacktrace.c (g_on_error_stack_trace): On Win32 call
G_BREAKPOINT() if being debugged.
* glib/gmessages.c (g_logv): For fatal messages on Win32, use
G_BREAKPOINT() also without G_ENABLE_DEBUG, but only if being
debugged. Suggestion by Ulf Lamping. Otherwise use FatalAppExit().
Thu Nov 25 14:02:43 2004 Manish Singh <yosh@gimp.org>
* glib/abicheck.sh: filter out G_GNUC stuff when doing the compare.
* glib/gmessages.c (g_assert_warning): call abort() at the end, so
gcc doesn't warn.
2004-09-29 Matthias Clasen <mclasen@redhat.com>
* glib/glib.symbols: Add g_assert_warning.
* glib/gmessages.h:
* glib/gmessages.c (g_assert_warning): Treat g_assert
in the same way as g_return_if_fail and move the string
constants into a helper function, which also takes
care of removing the "IA__" prefix from internal aliases.
2004-09-22 Tor Lillqvist <tml@iki.fi>
* glib/gmessages.c: [Win32] Don't open a console window if
standard output or standard error are invalid (as they are for GUI
applications). These console windows that open up unexpectedly
have caused endless amounts of confusion among end-users.
Don't output the process id on Windows. Only output the program
name. If not set with g_set_prgname(), fetch the application
executable's name and use that.
Sun Sep 19 23:52:35 2004 Matthias Clasen <maclas@gmx.de>
* glib/gmessages.c (mklevel_prefix):
* glib/gmessages.c (g_logv): Fix the types of some variables
to be GLogLevelFlags instead of guint. (#153042, Philippe Blain)
2004-09-09 Matthias Clasen <mclasen@redhat.com>
* glib/gmessages.c (g_return_if_fail_warning): Strip the
prefix "IA__" from function names, since that is what
GTK+ uses for the PLT-reduction aliases.
Thu Sep 9 13:52:26 2004 Owen Taylor <otaylor@redhat.com>
* glib/gmessages.c (g_return_if_fail_warning):
Include implementation of g_return_if_fail_internal().
Sun Mar 14 13:56:48 2004 Owen Taylor <otaylor@redhat.com>
* glib/gmessages.c (escape_string): Handle invalid
UTF-8. (#131218, patch from Matthias Clasen)
2003-08-19 Tor Lillqvist <tml@iki.fi>
* glib/gmessages.c (g_logv): [Win32] Make the fatal error message
box easier to notice with MB_SETFOREGROUND. Also use MB_ICONERROR
to get a nice stop-sign icon.
2003-02-14 Sebastian Wilhelmi <seppi@seppi.de>
Fixes for #101264 and #99372:
* glib/gconvert.h, glib/gmain.c, glib/gmem.c, glib/gmessages.c,
glib/grand.c: Include gthreadinit.h and rename the thread
initialization functions a bit and let them start with _, so that
later we can stop exporting them.
* glib/gmem.c, glib/gmessages.c: Move the g_private_new() calls to
new functions. They have to be called after setting
g_threads_got_initialized to TRUE (see #101264).
* glib/gthread.c: Include gthreadinit.h. Renamed g_mutex_init() to
g_thread_init_glib(). Call the thread initialization functions
(which are not allowed to call g_private_new), then set
g_threads_got_initialized to TRUE, then call the other thread
initialization functions (which must not call anything but
g_private_new()).
* glib/gthreadinit.h: New private header to cleanly declare all
thread initialization functions.
* gthread/gthread-impl.c: Include gthreadinit.h. In
g_thread_init() just call g_thread_init_glib(), which in turn calls the
other functions (see #99372).
* glib/Makefile.am: Added gthreadinit.h.
2003-01-01 Tor Lillqvist <tml@iki.fi>
* glib/gmessages.c (ensure_stdout_valid, ensure_stderr_valid):
Check the C stdout and stderr streams for validity, instead of
what GetStdHandle() returns.
2003-01-01 Tor Lillqvist <tml@iki.fi>
* glib/gmessages.c (ensure_stderr_valid, ensure_stdout_valid): Move the
alloc_console_called static flag inside these two functions.
2003-01-01 Tor Lillqvist <tml@iki.fi>
* glib/gmessages.c (ensure_stderr_valid): New function, parallel
to ensure_stdout_valid(). #defined as empty on Unix.
(mklevel_prefix): Do use either stderr or stdout on Windows,
too. Otherwise g_warning() messages (that are just warnings, by
definition) will get mixed with proper stdout output. Noticed in
GIMP's gimpconfig-dump.
(strdup_convert, mklevel_prefix, g_printerr): Call
ensure_stderr_valid() before trying to use stderr.
(g_logv): [Win32] Convert message to current codepage before
display with MessageBox().
positional parameters: (#79488)
* glib/gstrfuncs.c:
* glib/gspawn-win32.c:
* glib/gscanner.c:
* glib/gconvert.c:
* glib/gbacktrace.c: Use _g_printf wrappers.
* glib/gutils.c (g_vsnprintf): Simplify, since we can assume C99
snprintf semantics now.
* glib/gmessages.c (printf_string_upper_bound): No longer needed,
since we can assume C99 snprintf semantics now.
(g_logv): Simplify.
* acinclude.m4 (AC_FUNC_PRINTF_UNIX98): New macro to check wether
printf supports SUS positional parameters.
* configure.in: New option --enable-included-printf to force
compilation of trio; otherwise trio is compiled if the system
printf misses either C99 snprintf semantics of SUS positional
parameters.
* glib/Makefile.am (SUBDIRS): Conditionally compile trio.
(libglib_2_0_la_SOURCES): Add gprintf.c and gprintfint.h.
(glibsubinclude_HEADERS): Add gprintf.h.
* glib/gprintfint.h: New private wrapping either system printf
or trio printf variants in _g_printf wrappers for use inside glib.
* glib/gprintf.h: New public header declaring g_printf variants.
* glib/gprintf.c: Corresponding implementations.
* glib/trio/*: New directory, containing the trio-1.9 sources.
* glib/tmpl/string_utils.sgml: Add note on including gprintf.h,
move some docs inline.
* glib/glib-sections.txt: Add g_printf, g_vprintf, g_fprintf,
g_vfprintf, g_sprintf, g_vsprintf.
Mon May 13 11:42:23 2002 Owen Taylor <otaylor@redhat.com>
* glib/libcharset/*: Update from libcharset CVS.
Includes additional encodings for Solaris (#80396,
Qingjiang Yuan)
* configure.in: Add getc_unlocked to CHECK_FUNCS().
* glib/gmessages.c (strdup_convert): If
g_convert_with_fallback() fails, print the error
message to stderr the first time, then return
the original string. (#78197)
Thu Mar 28 18:22:53 2002 Owen Taylor <otaylor@redhat.com>
* README: Remove warning about g_print, etc, encoding.
* NEWS: Updates.
* glib/gmessages.c (g_log_default_handler): Use %lu
(plus a cast) when printing out pid_t arguments.
(#76770, Morten Welinder)
* glib/gstrfuncs.c (g_strdup_vprintf): Check the
result of vasprintf(), return NULL on failure.
(#76802, Akira Tagoh)
* tests/testglib.c (TEST): Supress a warning with
some GCC versions.
Thu Mar 28 20:31:51 2002 Tim Janik <timj@gtk.org>
* glib/gmessages.c:
(g_print):
(g_printerr): convert prtinf() strings to local charset
when writing them to stdout or stderr.
Wed Mar 27 18:42:22 2002 Tim Janik <timj@gtk.org>
* gmessages.[hc]:
major cleanups. introduced _g_log_fallback_handler() to handle
recursive messages which really doesn't call any GLib functions.
this allowes the default handler to use normal GLib functions and
also fixes user supplied log level handlers.
fixed locking issues, based on a patch from Sebastian Willhelmi,
attached to #74356. translate log messages from UTF-8, based
on the same patch. save fatal and recursion flags across flag
loop. use new integer format code from above patch.
move GLib functions out of locked mutex state to avoid deadlocks.
move the level prefix and filedescriptor logic into mklevel_prefix().
move _g_debug_init() into a place where we can figure and handle
recursion.
2002-03-14 Sebastian Wilhelmi <wilhelmi@ira.uka.de>
* glib/gmessages.c: Fixed threading issues brought up by
#74577. Make g_log_find_domain, g_log_domain_new,
g_log_domain_check_free and g_log_domain_get_handler require being
called with g_messages_lock held and remove all internal locking
in them. Then added proper locking to g_log_set_handler,
g_log_remove_handler and g_logv. Problem spotted by Miroslaw
Dobrzanski-Neumann <mne@mosaic-ag.com>. (#74577)
* glib/gdebug.h: New header containing GTK_DEBUG-style debugging
support for GLib. Currently only the fatal_warnings debug option exists.
* glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
for parsing G_MESSAGES_PREFIXED.
(_g_debug_init): New one-shot function for parsing G_DEBUG.
(g_log_write_prefix): Use g_log_msg_prefix_init().
(g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
* glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
* glib/Makefile.am (IGNORE_HFILES): Add gdebug.h.
* glib/running.sgml: Document the G_DEBUG environment variable.
* glib/tmpl/threads.sgml: Replace g_thread_wait() by
g_thread_join() in two places.
2002-02-14 Tor Lillqvist <tml@iki.fi>
* glib/gmessages.c (g_logv): Use the #if branch with
G_BREAKPOINT() also on Win32. Remove the separate __asm int 3 for
MSVC, G_BREAKPOINT() does exactly that.
2002-01-23 Laszlo Peter <laca@ireland.sun.com>
* glib/gmessages.c (g_printf_string_upper_bound): return 1 more
for the trailing \0 when using vsnprintf. (#69474)
The following patch corrects some function attributes. (#61780)
* glib/ghash.h (g_int_equal, g_int_hash): These are not const.
* glib/glibintl.h (_glib_gettext): Add G_GNUC_FORMAT(1).
* glib/gmacros.h: Use reserved symbols in function attribute macros.
The following patch avoids manual printf()-format parsing
if a C99-conforming vsnprintf() is available. (#55106)
* acinclude.m4 (AC_FUNC_VSNPRINTF_C99): New macro to test for a
C99 conforming vsnprintf.
* configure.in: Use AC_FUNC_VSNPRINTF_C99.
* glib/gmessages.c (g_printf_string_upper_bound): Use C99 vsnprintf().
Sat Nov 17 17:21:57 2001 Owen Taylor <otaylor@redhat.com>
* glib/Makefile.am glib/*.c glib/gmessages.h: Get
rid fo g_log_domain_glib variable in favor of just
using a string constant.
2001-10-29 Daniel Egger <degger@fhm.edu>
* glib/gbacktrace.h: Fix non-Intel/-Alpha version of the
G_BREAKPOINT macro to include <signal.h> and use SIGTRAP.
* glib/gmessages.c: Conditionalise definition of args2
depending on the definition of HAVE_VSNPRINTF to avoid
compiler warning.
* gobject/testgruntime.c
* tests/patterntest.c: Include <string.h> to avoid warnings.
Wed Sep 19 14:17:31 2001 Owen Taylor <otaylor@redhat.com>
Patch from Matthias Clasen (#59806)
* configure.in: Check for vasprintf().
* glib/gmem.[ch]: Add g_mem_vtable_is_set() to be used
for efficiency hacks to avoid extra copies when not
needed.
* glib/gstrfuncs.c: Use vasprintf() to implement
g_strdup_printf() when available.
* glib/gmessages.c (g_logv): Avoid using
printf_string_upper_bound() when we have have vsnprintf.
* glib/gmessages.c (printf_string_upper_bound): Don't
segfault when warning about positional parameters.