1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2008-2011, 2013, 2016-2017 - TortoiseGit
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
23 #define MAX_ERROR_STR_SIZE 512
24 extern "C" char g_last_error
[MAX_ERROR_STR_SIZE
]={0};
25 extern "C" int close_all();
26 static int dyingRecCnt
= 0;
28 static void reset_dll_state()
34 static void set_last_error(const char *err
, va_list params
)
36 memset(g_last_error
, 0, MAX_ERROR_STR_SIZE
);
37 vsnprintf(g_last_error
, MAX_ERROR_STR_SIZE
- 1, err
, params
);
40 extern "C" [[noreturn
]] void die_dll(const char* err
, va_list params
)
42 set_last_error(err
, params
);
47 [[noreturn
]] void die(const char* err
, ...)
50 va_start(params
, err
);
51 set_last_error(err
, params
);
59 extern "C" void handle_error(const char*, va_list)
64 extern "C" void handle_warning(const char*, va_list)
69 extern "C" [[noreturn
]] void vc_exit(int code
)
71 if (strlen(g_last_error
))
73 char old_err
[MAX_ERROR_STR_SIZE
];
74 memcpy(old_err
, g_last_error
, MAX_ERROR_STR_SIZE
);
75 die("libgit called \"exit(%d)\". Last error was:\n%s", code
, old_err
);
78 die("libgit called \"exit(%d)\".", code
);
81 extern "C" int die_is_recursing_dll()