2 * Hostname display utility
4 * Copyright 2008 Andrew Riedi
5 * Copyright 2010-2011 Andrew Nguyen
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
23 #include "wine/port.h"
26 #if defined(__MINGW32__) || defined (_MSC_VER)
28 #elif defined(HAVE_UNISTD_H)
38 #include <wine/unicode.h>
42 static int hostname_vprintfW(const WCHAR
*msg
, va_list va_args
)
46 WCHAR msg_buffer
[8192];
48 wlen
= vsprintfW(msg_buffer
, msg
, va_args
);
50 ret
= WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE
), msg_buffer
, wlen
, &count
, NULL
);
56 /* On Windows WriteConsoleW() fails if the output is redirected. So fall
57 * back to WriteFile(), assuming the console encoding is still the right
60 len
= WideCharToMultiByte(GetConsoleOutputCP(), 0, msg_buffer
, wlen
,
62 msgA
= HeapAlloc(GetProcessHeap(), 0, len
);
66 WideCharToMultiByte(GetConsoleOutputCP(), 0, msg_buffer
, wlen
, msgA
, len
,
68 WriteFile(GetStdHandle(STD_OUTPUT_HANDLE
), msgA
, len
, &count
, FALSE
);
69 HeapFree(GetProcessHeap(), 0, msgA
);
75 static int hostname_printfW(const WCHAR
*msg
, ...)
80 va_start(va_args
, msg
);
81 len
= hostname_vprintfW(msg
, va_args
);
87 static int hostname_message_printfW(int msg
, ...)
90 WCHAR msg_buffer
[8192];
93 LoadStringW(GetModuleHandleW(NULL
), msg
, msg_buffer
,
94 sizeof(msg_buffer
)/sizeof(WCHAR
));
96 va_start(va_args
, msg
);
97 len
= hostname_vprintfW(msg_buffer
, va_args
);
103 static int hostname_message(int msg
)
105 static const WCHAR formatW
[] = {'%','s',0};
106 WCHAR msg_buffer
[8192];
108 LoadStringW(GetModuleHandleW(NULL
), msg
, msg_buffer
,
109 sizeof(msg_buffer
)/sizeof(WCHAR
));
111 return hostname_printfW(formatW
, msg_buffer
);
114 static void display_computer_name(void)
116 static const WCHAR fmtW
[] = {'%','s','\r','\n',0};
121 gethostname(nameA
, sizeof(nameA
));
122 MultiByteToWideChar(CP_UNIXCP
, 0, nameA
, sizeof(nameA
), nameW
, sizeof(nameW
)/sizeof(WCHAR
));
124 hostname_printfW(fmtW
, nameW
);
127 int wmain(int argc
, WCHAR
*argv
[])
131 static const WCHAR slashHelpW
[] = {'/','?',0};
135 if (!strncmpW(argv
[1], slashHelpW
, sizeof(slashHelpW
)/sizeof(WCHAR
) - 1))
137 hostname_message(STRING_USAGE
);
141 for (i
= 1; i
< argc
; i
++)
143 if (argv
[i
][0] == '-')
148 /* Ignore the option and continue processing. */
151 hostname_message(STRING_USAGE
);
154 hostname_message_printfW(STRING_INVALID_OPTION
, argv
[i
][1]);
155 hostname_message(STRING_USAGE
);
161 hostname_message(STRING_CANNOT_SET_HOSTNAME
);
162 hostname_message(STRING_USAGE
);
168 display_computer_name();