2011-10-04 15:30:39 -04:00
|
|
|
/*
|
|
|
|
* Copyright © 2011 Canonical Limited
|
|
|
|
*
|
2022-05-18 09:15:38 +01:00
|
|
|
* SPDX-License-Identifier: LGPL-2.1-or-later
|
|
|
|
*
|
2017-01-05 12:47:07 +01:00
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
2011-10-04 15:30:39 -04:00
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful, but
|
|
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
2014-01-23 12:58:29 +01:00
|
|
|
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
2011-10-04 15:30:39 -04:00
|
|
|
*
|
|
|
|
* Author: Ryan Lortie <desrt@desrt.ca>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __GLIB_INIT_H__
|
|
|
|
#define __GLIB_INIT_H__
|
|
|
|
|
|
|
|
#include "gmessages.h"
|
|
|
|
|
2012-11-28 12:00:40 -05:00
|
|
|
extern GLogLevelFlags g_log_always_fatal;
|
|
|
|
extern GLogLevelFlags g_log_msg_prefix;
|
2011-10-04 15:30:39 -04:00
|
|
|
|
2015-10-06 19:45:38 -04:00
|
|
|
void glib_init (void);
|
2015-09-11 23:59:27 -04:00
|
|
|
void g_quark_init (void);
|
2019-12-25 13:07:32 +01:00
|
|
|
void g_error_init (void);
|
2015-09-11 23:59:27 -04:00
|
|
|
|
2011-10-04 15:30:39 -04:00
|
|
|
#ifdef G_OS_WIN32
|
|
|
|
#include <windows.h>
|
|
|
|
|
2015-04-07 20:05:45 +00:00
|
|
|
void g_thread_win32_process_detach (void);
|
2012-11-28 12:00:40 -05:00
|
|
|
void g_thread_win32_thread_detach (void);
|
|
|
|
void g_thread_win32_init (void);
|
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
2017-11-26 18:27:51 +00:00
|
|
|
void g_console_win32_init (void);
|
2012-11-28 12:00:40 -05:00
|
|
|
void g_clock_win32_init (void);
|
W32: Add a simple exception handler
Install a Vectored Exception Handler[0]. Its sole purpose is to catch
some exceptions (access violations, stack overflows, illegal
instructions and debug breaks - by default, but it can be made to catch
any exception for which a code is known) and run a debugger in response.
This allows W32 glib applications to be run without a debugger,
but at the same time allows a debugger to be attached in case
something happens.
The debugger is run with a new console, unless an environment variable
is set to allow it to inherit the console of the crashing process.
The short list of handleable exceptions is there to ensure that
this handler won't run a debugger to "handle" utility exceptions,
such as the one that is used to communicate thread names to a debugger.
The handler is installed to be called last, and shouldn't interfere
with any user-installed handlers.
There's nothing fancy about the way it runs a debugger (it doesn't even
support unicode in paths), and it deliberately avoids using glib code.
The handler will also print a bit of information about the exception
that it caught, and even more information for well-known exceptions,
such as access violation.
The whole scheme is similar to AeDebug[1] and, in fact, the signal-event
gdb command was originally implemented for this very purpose.
[0]: https://docs.microsoft.com/en-us/windows/desktop/debug/vectored-exception-handling
[1]: https://docs.microsoft.com/en-us/windows/desktop/debug/configuring-automatic-debugging
2019-01-13 11:21:04 +00:00
|
|
|
void g_crash_handler_win32_init (void);
|
|
|
|
void g_crash_handler_win32_deinit (void);
|
2021-11-19 11:50:26 +08:00
|
|
|
gboolean _g_win32_call_rtl_version (OSVERSIONINFOEXW *info);
|
2022-01-05 18:06:01 +01:00
|
|
|
|
2012-11-28 12:00:40 -05:00
|
|
|
extern HMODULE glib_dll;
|
2022-01-05 18:06:01 +01:00
|
|
|
gchar *g_win32_find_helper_executable_path (const gchar *process_name, void *dll_handle);
|
2022-04-07 17:53:54 +04:00
|
|
|
int g_win32_reopen_noninherited (int fd, int mode, GError **err);
|
2022-04-08 14:49:49 +04:00
|
|
|
gboolean g_win32_handle_is_socket (void *h);
|
2022-04-07 17:53:54 +04:00
|
|
|
|
2011-10-04 15:30:39 -04:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif /* __GLIB_INIT_H__ */
|