Import Upstream version 2.72.4
This commit is contained in:
commit
4ef3ff9793
2003 changed files with 1332420 additions and 0 deletions
78
glib/gwin32-private.c
Normal file
78
glib/gwin32-private.c
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
/* gwin32-private.c - private glib functions for gwin32.c
|
||||
*
|
||||
* Copyright 2019 Руслан Ижбулатов
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* 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 License
|
||||
* along with this library; if not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/* Copy @cmdline into @debugger, and substitute @pid for `%p`
|
||||
* and @event for `%e`.
|
||||
* If @debugger_size (in wchar_ts) is overflowed, return %FALSE.
|
||||
* Also returns %FALSE when `%` is followed by anything other
|
||||
* than `e` or `p`.
|
||||
*/
|
||||
static gboolean
|
||||
_g_win32_subst_pid_and_event_w (wchar_t *local_debugger,
|
||||
gsize debugger_size,
|
||||
const wchar_t *cmdline,
|
||||
DWORD pid,
|
||||
guintptr event)
|
||||
{
|
||||
gsize i = 0, dbg_i = 0;
|
||||
/* These are integers, and they can't be longer than 20 characters
|
||||
* even when they are 64-bit and in decimal notation.
|
||||
* Use 30 just to be sure.
|
||||
*/
|
||||
#define STR_BUFFER_SIZE 30
|
||||
wchar_t pid_str[STR_BUFFER_SIZE] = {0};
|
||||
gsize pid_str_len;
|
||||
wchar_t event_str[STR_BUFFER_SIZE] = {0};
|
||||
gsize event_str_len;
|
||||
|
||||
_snwprintf_s (pid_str, STR_BUFFER_SIZE, G_N_ELEMENTS (pid_str), L"%lu", pid);
|
||||
pid_str[G_N_ELEMENTS (pid_str) - 1] = 0;
|
||||
pid_str_len = wcslen (pid_str);
|
||||
_snwprintf_s (event_str, STR_BUFFER_SIZE, G_N_ELEMENTS (pid_str), L"%Iu", event);
|
||||
event_str[G_N_ELEMENTS (pid_str) - 1] = 0;
|
||||
event_str_len = wcslen (event_str);
|
||||
#undef STR_BUFFER_SIZE
|
||||
|
||||
while (cmdline[i] != 0 && dbg_i < debugger_size)
|
||||
{
|
||||
if (cmdline[i] != L'%')
|
||||
local_debugger[dbg_i++] = cmdline[i++];
|
||||
else if (cmdline[i + 1] == L'p')
|
||||
{
|
||||
gsize j = 0;
|
||||
while (j < pid_str_len && dbg_i < debugger_size)
|
||||
local_debugger[dbg_i++] = pid_str[j++];
|
||||
i += 2;
|
||||
}
|
||||
else if (cmdline[i + 1] == L'e')
|
||||
{
|
||||
gsize j = 0;
|
||||
while (j < event_str_len && dbg_i < debugger_size)
|
||||
local_debugger[dbg_i++] = event_str[j++];
|
||||
i += 2;
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
if (dbg_i < debugger_size)
|
||||
local_debugger[dbg_i] = 0;
|
||||
else
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue