ReactOS 0.4.15-dev-7842-g558ab78
hostname.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Hostname Command
3 * LICENSE: LGPL-2.1+ (https://spdx.org/licenses/LGPL-2.1+)
4 * PURPOSE: Retrieves the current DNS host name of the computer.
5 * COPYRIGHT: Copyright 2005-2019 Emanuele Aliberti (ea@reactos.com)
6 * Copyright 2019 Hermes Belusca-Maito
7 */
8
9#include <stdlib.h>
10#include <conio.h>
11
12#include <windef.h>
13#include <winbase.h>
14#include <winuser.h>
15
16#include "resource.h"
17
18int wmain(int argc, WCHAR* argv[])
19{
20 WCHAR Msg[100];
21
22 if (argc == 1)
23 {
25 WCHAR LocalHostName[256] = L""; // MAX_COMPUTERNAME_LENGTH + 1 for NetBIOS name.
26 DWORD HostNameSize = _countof(LocalHostName);
27 PWSTR HostName = LocalHostName;
28
29 /* Try to retrieve the host name using the local buffer */
30 bSuccess = GetComputerNameExW(ComputerNameDnsHostname, HostName, &HostNameSize);
32 {
33 /* Retry with a larger buffer since the local buffer was too small */
34 HostName = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, HostNameSize * sizeof(WCHAR));
35 if (HostName)
36 bSuccess = GetComputerNameExW(ComputerNameDnsHostname, HostName, &HostNameSize);
37 }
38
39 if (bSuccess)
40 {
41 /* Print out the host name */
42 _cwprintf(L"%s\n", HostName);
43 }
44
45 /* If a larger buffer has been allocated, free it */
46 if (HostName && (HostName != LocalHostName))
47 HeapFree(GetProcessHeap(), 0, HostName);
48
49 if (!bSuccess)
50 {
51 /* Fail in case of error */
53 _cwprintf(L"%s %lu.\n", Msg, GetLastError());
54 return 1;
55 }
56 }
57 else
58 {
59 if ((wcsicmp(argv[1], L"-s") == 0) || (wcsicmp(argv[1], L"/s") == 0))
60 {
61 /* The program doesn't allow the user to set the host name */
63 _cwprintf(L"%s\n", Msg);
64 return 1;
65 }
66 else
67 {
68 /* Let the user know what the program does */
70 _cwprintf(L"\n%s\n\n", Msg);
71 }
72 }
73
74 return 0;
75}
76
77/* EOF */
static int argc
Definition: ServiceArgs.c:12
#define IDS_USAGE
Definition: resource.h:3
#define IDS_ERROR
Definition: resource.h:18
#define IDS_NOSET
Definition: resource.h:4
struct @1627 Msg[]
BOOL WINAPI GetComputerNameExW(COMPUTER_NAME_FORMAT NameType, LPWSTR lpBuffer, LPDWORD nSize)
Definition: compname.c:216
#define ERROR_MORE_DATA
Definition: dderror.h:13
#define NULL
Definition: types.h:112
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
#define wcsicmp
Definition: compat.h:15
static BOOLEAN bSuccess
Definition: drive.cpp:433
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
int __cdecl _cwprintf(const MSVCRT_wchar_t *,...)
Definition: _cwprintf.c:14
#define argv
Definition: mplay32.c:18
#define L(x)
Definition: ntvdm.h:50
int wmain()
#define _countof(array)
Definition: sndvol32.h:68
uint16_t * PWSTR
Definition: typedefs.h:56
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
#define GetModuleHandle
Definition: winbase.h:3762
int WINAPI LoadStringW(_In_opt_ HINSTANCE hInstance, _In_ UINT uID, _Out_writes_to_(cchBufferMax, return+1) LPWSTR lpBuffer, _In_ int cchBufferMax)
__wchar_t WCHAR
Definition: xmlstorage.h:180