another update from CVS HEAD, for QA
[alioth/jupp.git] / win32.c
1 /*-
2  * Copyright (c) 2016, 2017
3  *      mirabilos <m@mirbsd.org>
4  *
5  * Provided that these terms and disclaimer and all copyright notices
6  * are retained or reproduced in an accompanying document, permission
7  * is granted to deal in this work without restriction, including un-
8  * limited rights to use, publicly perform, distribute, sell, modify,
9  * merge, give away, or sublicence.
10  *
11  * This work is provided "AS IS" and WITHOUT WARRANTY of any kind, to
12  * the utmost extent permitted by applicable law, neither express nor
13  * implied; without malicious intent or gross negligence. In no event
14  * may a licensor, author or contributor be held liable for indirect,
15  * direct, other damage, loss, or other issues arising in any way out
16  * of dealing in the work, even if advised of the possibility of such
17  * damage or existence of a defect, except proven that it results out
18  * of said person's immediate fault when using the work as intended.
19  */
20
21 #include "config.h"
22
23 __RCSID("$MirOS: contrib/code/jupp/win32.c,v 1.4 2017/12/02 02:07:39 tg Exp $");
24
25 #ifdef __CYGWIN__
26
27 #include <cygwin/version.h>
28 #include <windows.h>
29
30 #if JUPP_WIN32RELOC
31 /*
32  * Retrieve the realpath of the program (what could be argv[0] if the
33  * Unix designers had wanted it).
34  */
35 char *
36 cygwin32_argv0(void)
37 {
38         DWORD res;
39         /* plus one to detect truncation */
40         char buf[MAX_PATH + 1];
41
42         if (!(res = GetModuleFileName(NULL, buf, sizeof(buf))) ||
43             ((size_t)res > (size_t)(MAX_PATH)))
44                 return (NULL);
45         buf[res] = '\0';
46         return (strdup(buf));
47 }
48 #endif
49
50 /* return command line as passed to the .EXE (just like cygwin32’s dcrt0.cc) */
51 unsigned char *
52 cygwin32_cmdline(void)
53 {
54         char *cp;
55
56         cp = strdup(GetCommandLineA());
57         if (!AreFileApisANSI())
58                 CharToOemA(cp, cp);
59         return ((unsigned char *)cp);
60 }
61
62 /* Cygwin before 1.7.2 did not have locale support */
63 #if defined(CYGWIN_VERSION_API_MAJOR) && (CYGWIN_VERSION_API_MAJOR < 1) && \
64     defined(CYGWIN_VERSION_API_MINOR) && (CYGWIN_VERSION_API_MINOR < 222)
65 /*
66  * Mirror get_cp() in winsup/cygwin/miscfuncs.cc as used by
67  * dev_console::str_to_con() in winsup/cygwin/fhandler_console.cc
68  */
69 unsigned int
70 cygwin32_get_cp(void)
71 {
72         return (AreFileApisANSI() ? GetACP() : GetOEMCP());
73 }
74 #endif
75
76 #endif /* __CYGWIN__ */