diff options
author | ng0 <ng0@n0.is> | 2019-09-10 16:59:32 +0000 |
---|---|---|
committer | ng0 <ng0@n0.is> | 2019-09-10 16:59:32 +0000 |
commit | 04b6df21cd281e8cd540139f8d9ae85defc1961c (patch) | |
tree | 6357199445df8d5c0c631bc8f10aef838b1f9f1e /src/util/w32cat.c | |
parent | 483b0139a218a5f8a8311bda3eb23bcd88f57688 (diff) | |
download | gnunet-04b6df21cd281e8cd540139f8d9ae85defc1961c.tar.gz gnunet-04b6df21cd281e8cd540139f8d9ae85defc1961c.zip |
remove CYGWIN codeblocks, drop vendored Windows openvpn, drop win32 specific files.
configures and builds okay.
testsuite wasn't checked, will be checked.
diff including the plibc removal is now around 14370 lines of code less.
Diffstat (limited to 'src/util/w32cat.c')
-rw-r--r-- | src/util/w32cat.c | 154 |
1 files changed, 0 insertions, 154 deletions
diff --git a/src/util/w32cat.c b/src/util/w32cat.c deleted file mode 100644 index fa7637d38..000000000 --- a/src/util/w32cat.c +++ /dev/null | |||
@@ -1,154 +0,0 @@ | |||
1 | /* | ||
2 | W32 version of 'cat' program | ||
3 | Copyright (C) 2012 LRN | ||
4 | |||
5 | cat is free software; you can redistribute it and/or modify | ||
6 | it under the terms of the GNU General Public License as published | ||
7 | by the Free Software Foundation; either version 3, or (at your | ||
8 | option) any later version. | ||
9 | |||
10 | cat is distributed in the hope that it will be useful, but | ||
11 | WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
13 | General Public License for more details. | ||
14 | |||
15 | You should have received a copy of the GNU General Public License | ||
16 | along with cat; see the file COPYING. If not, write to the | ||
17 | Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, | ||
18 | Boston, MA 02110-1301, USA. | ||
19 | |||
20 | SPDX-License-Identifier: AGPL3.0-or-later | ||
21 | */ | ||
22 | |||
23 | #include <stdio.h> | ||
24 | #include <windows.h> | ||
25 | #include <stdint.h> | ||
26 | #include <signal.h> | ||
27 | |||
28 | DWORD WINAPI | ||
29 | parent_control_thread(LPVOID lpParameter) | ||
30 | { | ||
31 | HANDLE h = (HANDLE)lpParameter; | ||
32 | |||
33 | while (TRUE) | ||
34 | { | ||
35 | DWORD dw; | ||
36 | BOOL b; | ||
37 | unsigned char c; | ||
38 | b = ReadFile(h, &c, 1, &dw, NULL); | ||
39 | if (!b) | ||
40 | { | ||
41 | ExitProcess(0); | ||
42 | } | ||
43 | raise((int)c); | ||
44 | } | ||
45 | } | ||
46 | |||
47 | void | ||
48 | install_parent_control_handler() | ||
49 | { | ||
50 | const char *env_buf; | ||
51 | char *env_buf_end; | ||
52 | uint64_t pipe_fd; | ||
53 | HANDLE pipe_handle; | ||
54 | |||
55 | env_buf = getenv("GNUNET_OS_CONTROL_PIPE"); | ||
56 | if ((NULL == env_buf) || (strlen(env_buf) <= 0)) | ||
57 | return; | ||
58 | errno = 0; | ||
59 | pipe_fd = strtoull(env_buf, &env_buf_end, 16); | ||
60 | if ((0 != errno) || (env_buf == env_buf_end)) | ||
61 | return; | ||
62 | /* Gcc will issue a warning here. What to do with it? */ | ||
63 | pipe_handle = (HANDLE)(uintptr_t)pipe_fd; | ||
64 | CreateThread(NULL, 0, parent_control_thread, (LPVOID)pipe_handle, 0, NULL); | ||
65 | } | ||
66 | |||
67 | int | ||
68 | main(int argc, char **argv) | ||
69 | { | ||
70 | HANDLE stdi, stdo; | ||
71 | BOOL b; | ||
72 | wchar_t *commandlinew, **argvw; | ||
73 | int argcw; | ||
74 | int i; | ||
75 | |||
76 | stdo = GetStdHandle(STD_OUTPUT_HANDLE); | ||
77 | if (stdo == INVALID_HANDLE_VALUE || stdo == NULL) | ||
78 | return 1; | ||
79 | |||
80 | commandlinew = GetCommandLineW(); | ||
81 | argvw = CommandLineToArgvW(commandlinew, &argcw); | ||
82 | if (argvw == NULL) | ||
83 | return 1; | ||
84 | |||
85 | install_parent_control_handler(); | ||
86 | |||
87 | for (i = 1; i < argcw || argcw == 1; i++) | ||
88 | { | ||
89 | DWORD r, w; | ||
90 | int is_dash = wcscmp(NULL == argvw[i] ? L"-" : argvw[i], L"-") == 0; | ||
91 | if (argcw == 1 || is_dash) | ||
92 | { | ||
93 | stdi = GetStdHandle(STD_INPUT_HANDLE); | ||
94 | if (stdi == INVALID_HANDLE_VALUE) | ||
95 | { | ||
96 | fprintf(stderr, "cat: Failed to obtain stdin handle.\n"); | ||
97 | return 4; | ||
98 | } | ||
99 | if (stdi == NULL) | ||
100 | { | ||
101 | fprintf(stderr, "cat: Have no stdin.\n"); | ||
102 | return 5; | ||
103 | } | ||
104 | } | ||
105 | else | ||
106 | { | ||
107 | stdi = CreateFileW(argvw[i], GENERIC_READ, FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL); | ||
108 | if (stdi == INVALID_HANDLE_VALUE) | ||
109 | { | ||
110 | wchar_t *msgbuf; | ||
111 | DWORD le = GetLastError(); | ||
112 | if (0 < FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 0, le, 0, (wchar_t *)&msgbuf, 0, NULL)) | ||
113 | { | ||
114 | fprintf(stderr, "cat: Failed to open file `%S'. Error %lu.\n", argvw[i], le); | ||
115 | return 3; | ||
116 | } | ||
117 | fprintf(stderr, "cat: Failed to open file `%S'. Error %lu: %S\n", argvw[i], le, msgbuf); | ||
118 | if (msgbuf != NULL) | ||
119 | LocalFree(msgbuf); | ||
120 | return 2; | ||
121 | } | ||
122 | } | ||
123 | do | ||
124 | { | ||
125 | unsigned char c; | ||
126 | b = ReadFile(stdi, &c, 1, &r, NULL); | ||
127 | if (b && r > 0) | ||
128 | { | ||
129 | b = WriteFile(stdo, &c, 1, &w, NULL); | ||
130 | if (b == 0) | ||
131 | { | ||
132 | wchar_t *msgbuf; | ||
133 | DWORD le = GetLastError(); | ||
134 | if (0 < FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 0, le, 0, (wchar_t *)&msgbuf, 0, NULL)) | ||
135 | { | ||
136 | fprintf(stderr, "cat: Failed to write into stdout. Error %lu.\n", le); | ||
137 | return 3; | ||
138 | } | ||
139 | fprintf(stderr, "cat: Failed to write into stdout. Error %lu: %S\n", le, msgbuf); | ||
140 | if (msgbuf != NULL) | ||
141 | LocalFree(msgbuf); | ||
142 | return 6; | ||
143 | } | ||
144 | } | ||
145 | } | ||
146 | while (b && r > 0); | ||
147 | if (argcw == 1) | ||
148 | break; | ||
149 | if (!is_dash) | ||
150 | CloseHandle(stdi); | ||
151 | } | ||
152 | LocalFree(argvw); | ||
153 | return 0; | ||
154 | } | ||