added more functionality to arp
- display correct interface index
- delete all hosts with -d *
- display informative error messages
- better argument control
- clean up formatting
Modified: trunk/reactos/apps/utils/net/arp/arp.c
Deleted: trunk/reactos/apps/utils/net/arp/trace.c
Deleted: trunk/reactos/apps/utils/net/arp/trace.h
_____
Modified: trunk/reactos/apps/utils/net/arp/arp.c
--- trunk/reactos/apps/utils/net/arp/arp.c 2005-09-25 16:56:52 UTC
(rev 18056)
+++ trunk/reactos/apps/utils/net/arp/arp.c 2005-09-25 17:01:24 UTC
(rev 18057)
@@ -1,4 +1,23 @@
-/*
+/*
+ * ReactOS Win32 Applications
+ * Copyright (C) 2005 ReactOS Team
+ *
+ * This program is free software; you can redistribute it and/or
modify
+ * it under the terms of the GNU General Public License as published
by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS arp utility
* FILE: apps/utils/net/arp/arp.c
@@ -9,7 +28,6 @@
*
*/
-#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
@@ -19,27 +37,102 @@
#include <winsock2.h>
#include <iphlpapi.h>
-
+#define WIN32_LEAN_AND_MEAN
+#define UNICODE
+#define _UNICODE
+
/*
* Globals
- */
+ */
const char SEPERATOR = '-';
-
-
-
+int _CRT_glob = 0; // stop * from listing dir files in arp -d *
+
+
/*
* function declerations
- */
+ */
+DWORD DoFormatMessage(DWORD ErrorCode);
+INT PrintEntries(PMIB_IPNETROW pIpAddRow);
INT DisplayArpEntries(PTCHAR pszInetAddr, PTCHAR pszIfAddr);
-INT PrintEntries(PMIB_IPNETROW pIpAddRow);
INT Addhost(PTCHAR pszInetAddr, PTCHAR pszEthAddr, PTCHAR pszIfAddr);
INT Deletehost(PTCHAR pszInetAddr, PTCHAR pszIfAddr);
VOID Usage(VOID);
-
-
-
+
+
/*
+ * convert error code into meaningful message
+ */
+DWORD DoFormatMessage(DWORD ErrorCode)
+{
+ LPVOID lpMsgBuf;
+ DWORD RetVal;
+ /* double brackets to silence the assignment warning message */
+ if ((RetVal = FormatMessage(
+ FORMAT_MESSAGE_ALLOCATE_BUFFER |
+ FORMAT_MESSAGE_FROM_SYSTEM |
+ FORMAT_MESSAGE_IGNORE_INSERTS,
+ NULL,
+ ErrorCode,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default
language */
+ (LPTSTR) &lpMsgBuf,
+ 0,
+ NULL ))) {
+ _tprintf(_T("%s"), (LPTSTR)lpMsgBuf);
+
+ LocalFree(lpMsgBuf);
+ /* return number of TCHAR's stored in output buffer
+ * excluding '\0' - as FormatMessage does*/
+ return RetVal;
+ }
+ else
+ return 0;
+}
+
+
+
+/*
*
+ * Takes an ARP entry and prints the IP address,
+ * the MAC address and the entry type to screen
+ *
+ */
+INT PrintEntries(PMIB_IPNETROW pIpAddRow)
+{
+ IN_ADDR inaddr;
+ TCHAR cMacAddr[20];
+
+ /* print IP addresses */
+ inaddr.S_un.S_addr = pIpAddRow->dwAddr;
+ _tprintf(_T(" %-22s"), inet_ntoa(inaddr));
+
+ /* print MAC address */
+ _stprintf(cMacAddr, _T("%02x-%02x-%02x-%02x-%02x-%02x"),
+ pIpAddRow->bPhysAddr[0],
+ pIpAddRow->bPhysAddr[1],
+ pIpAddRow->bPhysAddr[2],
+ pIpAddRow->bPhysAddr[3],
+ pIpAddRow->bPhysAddr[4],
+ pIpAddRow->bPhysAddr[5]);
+ _tprintf(_T("%-22s"), cMacAddr);
+
+ /* print cache type */
+ switch (pIpAddRow->dwType)
+ {
+ case MIB_IPNET_TYPE_DYNAMIC : _tprintf(_T("dynamic\n"));
+ break;
+ case MIB_IPNET_TYPE_STATIC : _tprintf(_T("static\n"));
+ break;
+ case MIB_IPNET_TYPE_INVALID : _tprintf(_T("invalid\n"));
+ break;
+ case MIB_IPNET_TYPE_OTHER : _tprintf(_T("other\n"));
+ break;
+ }
+ return EXIT_SUCCESS;
+}
+
+
+/*
+ *
* Takes optional parameters of an internet address and interface
address.
* Retrieve all entries in the ARP cache. If an internet address is
* specified, display the ARP entry relating to that address. If an
@@ -59,136 +152,99 @@
DWORD dwSize = 0;
PTCHAR pszIpAddr;
TCHAR szIntIpAddr[20];
-
+
/* Return required buffer size */
GetIpNetTable(NULL, &ulSize, 0);
-
+
/* allocate memory for ARP address table */
pIpNetTable = (PMIB_IPNETTABLE) malloc(ulSize * sizeof(BYTE));
ZeroMemory(pIpNetTable, sizeof(*pIpNetTable));
-
+
/* get Arp address table */
- if (pIpNetTable != NULL) {
+ if (pIpNetTable != NULL)
GetIpNetTable(pIpNetTable, &ulSize, TRUE);
- } else {
+ else
+ {
_tprintf(_T("failed to allocate memory for GetIpNetTable\n"));
free(pIpNetTable);
- return -1;
+ exit(EXIT_FAILURE);
}
-
- /* check there are entries in the table */
- if (pIpNetTable->dwNumEntries == 0) {
+
+ /* check there are entries in the table */
+ if (pIpNetTable->dwNumEntries == 0)
+ {
_tprintf(_T("No ARP entires found\n"));
free(pIpNetTable);
- return -1;
+ exit(EXIT_FAILURE);
}
-
-
-
+
+
+
/* try doing this in the way it's done above, it's clearer */
/* Retrieve the interface-to-ip address mapping
- * table to get the IP address for adapter */
+ * table to get the IP address for adapter */
pIpAddrTable = (MIB_IPADDRTABLE *) malloc(dwSize);
GetIpAddrTable(pIpAddrTable, &dwSize, 0); // NULL ?
-
+
pIpAddrTable = (MIB_IPADDRTABLE *) malloc(dwSize);
//ZeroMemory(pIpAddrTable, sizeof(*pIpAddrTable));
-
- if ((iRet = GetIpAddrTable(pIpAddrTable, &dwSize, TRUE)) !=
NO_ERROR) { // NO_ERROR = 0
+
+ if ((iRet = GetIpAddrTable(pIpAddrTable, &dwSize, TRUE)) !=
NO_ERROR)
+ {
_tprintf(_T("GetIpAddrTable failed: %d\n"), iRet);
_tprintf(_T("error: %d\n"), WSAGetLastError());
}
-
-
- for (k=0; k < pIpAddrTable->dwNumEntries; k++) {
- if (pIpNetTable->table[0].dwIndex ==
pIpAddrTable->table[k].dwIndex) {
- //printf("printing pIpAddrTable->table[?].dwIndex = %lx\n",
pIpNetTable->table[k].dwIndex);
+
+
+ for (k=0; k < pIpAddrTable->dwNumEntries; k++)
+ {
+ if (pIpNetTable->table[0].dwIndex ==
pIpAddrTable->table[k].dwIndex)
+ {
+ //printf("debug print: pIpAddrTable->table[?].dwIndex =
%lx\n", pIpNetTable->table[k].dwIndex);
inaddr2.s_addr = pIpAddrTable->table[k].dwAddr;
pszIpAddr = inet_ntoa(inaddr2);
strcpy(szIntIpAddr, pszIpAddr);
}
- }
-
-
+ }
+
+
/* print header, including interface IP address and index number */
_tprintf(_T("\nInterface: %s --- 0x%lx \n"), szIntIpAddr,
pIpNetTable->table[0].dwIndex);
_tprintf(_T(" Internet Address Physical Address
Type\n"));
-
+
/* go through all ARP entries */
- for (i=0; i < pIpNetTable->dwNumEntries; i++) {
-
+ for (i=0; i < pIpNetTable->dwNumEntries; i++)
+ {
+
/* if the user has supplied their own internet addesss *
* only print the arp entry which matches that */
- if (pszInetAddr) {
- inaddr.S_un.S_addr = pIpNetTable->table[i].dwAddr;
+ if (pszInetAddr)
+ {
+ inaddr.S_un.S_addr = pIpNetTable->table[i].dwAddr;
pszIpAddr = inet_ntoa(inaddr);
-
+
/* check if it matches, print it */
- if (strcmp(pszIpAddr, pszInetAddr) == 0) {
+ if (strcmp(pszIpAddr, pszInetAddr) == 0)
PrintEntries(&pIpNetTable->table[i]);
- }
- } else {
+ }
+ else
/* if an address is not supplied, print all entries */
PrintEntries(&pIpNetTable->table[i]);
- }
-
}
-
+
free(pIpNetTable);
free(pIpAddrTable);
-
- return 0;
+
+ return EXIT_SUCCESS;
}
-
-
-
+
+
/*
*
- * Takes an ARP entry and prints the IP address,
- * the MAC address and the entry type to screen
- *
- */
-INT PrintEntries(PMIB_IPNETROW pIpAddRow)
-{
- IN_ADDR inaddr;
- TCHAR cMacAddr[20];
-
- /* print IP addresses */
- inaddr.S_un.S_addr = pIpAddRow->dwAddr;
- _tprintf(_T(" %-22s"), inet_ntoa(inaddr)); //error checking
-
- /* print MAC address */
- _stprintf(cMacAddr, _T("%02x-%02x-%02x-%02x-%02x-%02x"),
- pIpAddRow->bPhysAddr[0],
- pIpAddRow->bPhysAddr[1],
- pIpAddRow->bPhysAddr[2],
- pIpAddRow->bPhysAddr[3],
- pIpAddRow->bPhysAddr[4],
- pIpAddRow->bPhysAddr[5]);
- _tprintf(_T("%-22s"), cMacAddr);
-
- /* print cache type */
- switch (pIpAddRow->dwType) {
- case MIB_IPNET_TYPE_DYNAMIC : _tprintf(_T("dynamic\n"));
- break;
- case MIB_IPNET_TYPE_STATIC : _tprintf(_T("static\n"));
- break;
- case MIB_IPNET_TYPE_INVALID : _tprintf(_T("invalid\n"));
- break;
- case MIB_IPNET_TYPE_OTHER : _tprintf(_T("other\n"));
- break;
- }
- return 0;
-}
-
-
-
-/*
- *
* Takes an internet address, a MAC address and an optional interface
* address as arguments and checks their validity.
- * Fill out an MIB_IPNETROW structure and insert the data into the
+ * Fill out an MIB_IPNETROW structure and insert the data into the
* ARP cache as a static entry.
*
*/
@@ -196,73 +252,101 @@
{
PMIB_IPNETROW pAddHost;
PMIB_IPADDRTABLE pIpAddrTable;
+ PMIB_IPNETTABLE pIpNetTable;
DWORD dwIpAddr;
DWORD dwSize = 0;
+ ULONG ulSize = 0;
INT iRet, i, val;
TCHAR c;
-
+
/* error checking */
-
+
/* check IP address */
- if (pszInetAddr != NULL) {
- if ((dwIpAddr = inet_addr(pszInetAddr)) == INADDR_NONE) {
+ if (pszInetAddr != NULL)
+ {
+ if ((dwIpAddr = inet_addr(pszInetAddr)) == INADDR_NONE)
+ {
_tprintf(_T("ARP: bad IP address: %s\n"), pszInetAddr);
- return -1;
+ exit(EXIT_FAILURE);
}
- } else {
+ }
+ else
+ {
Usage();
- return -1;
+ exit(EXIT_FAILURE);
}
-
+
/* check MAC address */
- if (strlen(pszEthAddr) != 17) {
+ if (strlen(pszEthAddr) != 17)
+ {
_tprintf(_T("ARP: bad argument: %s\n"), pszEthAddr);
- return -1;
+ exit(EXIT_FAILURE);
}
- for (i=0; i<17; i++) {
- if (pszEthAddr[i] == SEPERATOR) {
+ for (i=0; i<17; i++)
+ {
+ if (pszEthAddr[i] == SEPERATOR)
continue;
- }
- if (!isxdigit(pszEthAddr[i])) {
+
+ if (!isxdigit(pszEthAddr[i]))
+ {
_tprintf(_T("ARP: bad argument: %s\n"), pszEthAddr);
- return -1;
+ exit(EXIT_FAILURE);
}
}
-
+
+ /* We need the IpNetTable to get the adapter index */
+ /* Return required buffer size */
+ GetIpNetTable(NULL, &ulSize, 0);
+ /* allocate memory for ARP address table */
+ pIpNetTable = (PMIB_IPNETTABLE) malloc(ulSize * sizeof(BYTE));
+ ZeroMemory(pIpNetTable, sizeof(*pIpNetTable));
+ /* get Arp address table */
+ if (pIpNetTable != NULL)
+ GetIpNetTable(pIpNetTable, &ulSize, TRUE);
+ else
+ {
+ _tprintf(_T("failed to allocate memory for GetIpNetTable\n"));
+ free(pIpNetTable);
+ return -1;
+ }
+
+
/* reserve memory on heap and zero */
pAddHost = (MIB_IPNETROW *) malloc(sizeof(MIB_IPNETROW));
ZeroMemory(pAddHost, sizeof(MIB_IPNETROW));
-
-
-
-
- /* set dwIndex field to the index of a local IP address to
+
+ /* set dwIndex field to the index of a local IP address to
* indicate the network on which the ARP entry applies */
- if (pszIfAddr) {
+ if (pszIfAddr)
sscanf(pszIfAddr, "%lx", &pAddHost->dwIndex);
- } else {
- /* map the IP to the index */
+ else
+ {
+ /* map the IP to the index */
pIpAddrTable = (MIB_IPADDRTABLE *) malloc(dwSize);
GetIpAddrTable(pIpAddrTable, &dwSize, 0);
-
+
pIpAddrTable = (MIB_IPADDRTABLE *) malloc(dwSize);
-
- if ((iRet = GetIpAddrTable(pIpAddrTable, &dwSize, TRUE)) !=
NO_ERROR) { // NO_ERROR = 0
+
+ if ((iRet = GetIpAddrTable(pIpAddrTable, &dwSize, TRUE)) !=
NO_ERROR)
+ {
_tprintf(_T("GetIpAddrTable failed: %d\n"), iRet);
_tprintf(_T("error: %d\n"), WSAGetLastError());
}
- printf("printing pIpAddrTable->table[0].dwIndex = %lx\n",
pIpAddrTable->table[0].dwIndex);
- pAddHost->dwIndex = 4;
+ //printf("debug print: pIpNetTable->table[0].dwIndex = %lx\n",
pIpNetTable->table[0].dwIndex);
+ /* needs testing. I get the correct index on my machine, but
need others
+ * to test their card index. Any problems and we can use
GetAdaptersInfo instead */
+ pAddHost->dwIndex = pIpNetTable->table[0].dwIndex;
free(pIpAddrTable);
}
-
+
/* Set MAC address to 6 bytes (typical) */
pAddHost->dwPhysAddrLen = 6;
-
-
+
+
/* Encode bPhysAddr into correct byte array */
- for (i=0; i<6; i++) {
+ for (i=0; i<6; i++)
+ {
val =0;
c = toupper(pszEthAddr[i*3]);
c = c - (isdigit(c) ? '0' : ('A' - 10));
@@ -272,103 +356,155 @@
c = c - (isdigit(c) ? '0' : ('A' - 10));
val += c;
pAddHost->bPhysAddr[i] = val;
-
}
-
-
+
+
/* copy converted IP address */
pAddHost->dwAddr = dwIpAddr;
-
-
+
+
/* set type to static */
pAddHost->dwType = MIB_IPNET_TYPE_STATIC;
-
-
+
+
/* Add the ARP entry */
- if ((iRet = SetIpNetEntry(pAddHost)) != NO_ERROR) {
- _tprintf(_T("The ARP entry addition failed: %d\n"), iRet);
- return -1;
+ if ((iRet = SetIpNetEntry(pAddHost)) != NO_ERROR)
+ {
+ DoFormatMessage(iRet);
+ free(pAddHost);
+ exit(EXIT_FAILURE);
}
-
+
free(pAddHost);
-
- return 0;
+
+ return EXIT_SUCCESS;
}
-
-
-
+
+
/*
*
- * Takes an internet address and an optional interface address as
+ * Takes an internet address and an optional interface address as
* arguments and checks their validity.
- * Add the interface number and IP to an MIB_IPNETROW structure
- * and remove the entrty from the ARP cache.
+ * Add the interface number and IP to an MIB_IPNETROW structure
+ * and remove the entry from the ARP cache.
*
*/
INT Deletehost(PTCHAR pszInetAddr, PTCHAR pszIfAddr)
{
PMIB_IPNETROW pDelHost;
PMIB_IPADDRTABLE pIpAddrTable;
+ PMIB_IPNETTABLE pIpNetTable;
+ ULONG ulSize = 0;
DWORD dwIpAddr;
DWORD dwSize = 0;
- INT iret;
-
+ INT iRet;
+ BOOL bFlushTable = FALSE;
+
/* error checking */
-
+
/* check IP address */
- if (pszInetAddr != NULL) {
- if ((dwIpAddr = inet_addr(pszInetAddr)) == INADDR_NONE) {
+ if (pszInetAddr != NULL)
+ {
+ /* if wildcard is given, set flag to delete all hosts */
+ if (strncmp(pszInetAddr, "*", 1) == 0)
+ bFlushTable = TRUE;
+ else if ((dwIpAddr = inet_addr(pszInetAddr)) == INADDR_NONE)
+ {
_tprintf(_T("ARP: bad IP address: %s\n"), pszInetAddr);
- return -1;
+ exit(EXIT_FAILURE);
}
- } else {
+ }
+ else
+ {
Usage();
+ exit(EXIT_FAILURE);
+ }
+
+ /* We need the IpNetTable to get the adapter index */
+ /* Return required buffer size */
+ GetIpNetTable(NULL, &ulSize, 0);
+ /* allocate memory for ARP address table */
+ pIpNetTable = (PMIB_IPNETTABLE) malloc(ulSize * sizeof(BYTE));
+ ZeroMemory(pIpNetTable, sizeof(*pIpNetTable));
+ /* get Arp address table */
+ if (pIpNetTable != NULL)
+ GetIpNetTable(pIpNetTable, &ulSize, TRUE);
+ else
+ {
+ _tprintf(_T("failed to allocate memory for GetIpNetTable\n"));
+ free(pIpNetTable);
return -1;
}
-
-
+
+
pIpAddrTable = (MIB_IPADDRTABLE*) malloc(sizeof(MIB_IPADDRTABLE));
pDelHost = (MIB_IPNETROW *) malloc(sizeof(MIB_IPNETROW));
ZeroMemory(pIpAddrTable, sizeof(MIB_IPADDRTABLE));
ZeroMemory(pDelHost, sizeof(MIB_IPNETROW));
- /* set dwIndex field to the index of a local IP address to
+ /* set dwIndex field to the index of a local IP address to
* indicate the network on which the ARP entry applies */
- if (pszIfAddr) {
+ if (pszIfAddr)
sscanf(pszIfAddr, "%lx", &pDelHost->dwIndex);
- } else {
+ else
+ {
/* map the IP to the index */
- if (GetIpAddrTable(pIpAddrTable, &dwSize, 0) ==
ERROR_INSUFFICIENT_BUFFER) {
+ if (GetIpAddrTable(pIpAddrTable, &dwSize, 0) ==
ERROR_INSUFFICIENT_BUFFER)
pIpAddrTable = (MIB_IPADDRTABLE *) malloc(dwSize);
- }
- if ((iret = GetIpAddrTable(pIpAddrTable, &dwSize, TRUE)) !=
NO_ERROR) {
- _tprintf(_T("GetIpAddrTable failed: %d\n"), iret);
+
+ if ((iRet = GetIpAddrTable(pIpAddrTable, &dwSize, TRUE)) !=
NO_ERROR)
+ {
+ _tprintf(_T("GetIpAddrTable failed: %d\n"), iRet);
_tprintf(_T("error: %d\n"), WSAGetLastError());
}
- pDelHost->dwIndex = 4; //pIpAddrTable->table[0].dwIndex;
- }
-
- /* copy converted IP address */
- pDelHost->dwAddr = dwIpAddr;
-
+ /* needs testing. I get the correct index on my machine, but
need others
+ * to test their card index. Any problems and we can use
GetAdaptersInfo instead */
+ pDelHost->dwIndex = pIpNetTable->table[0].dwIndex;
+ }
+
+ if (bFlushTable == TRUE)
+ {
+ /* delete arp cache */
+ if ((iRet = FlushIpNetTable(pDelHost->dwIndex)) != NO_ERROR)
+ {
+ DoFormatMessage(iRet);
+ free(pIpAddrTable);
+ free(pDelHost);
+ return EXIT_FAILURE;
+ }
+ else
+ {
+ free(pIpAddrTable);
+ free(pDelHost);
+ return EXIT_SUCCESS;
+ }
+ }
+ else
+ /* copy converted IP address */
+ pDelHost->dwAddr = dwIpAddr;
+
/* Add the ARP entry */
- if ((iret = DeleteIpNetEntry(pDelHost)) != NO_ERROR) {
- _tprintf(_T("The ARP entry deletion failed: %d\n"), iret);
- return -1;
+ if ((iRet = DeleteIpNetEntry(pDelHost)) != NO_ERROR)
+ {
+
+ DoFormatMessage(iRet);
+ free(pIpAddrTable);
+ free(pDelHost);
+ exit(EXIT_FAILURE);
}
-
+
free(pIpAddrTable);
free(pDelHost);
-
- return 0;
+
+ return EXIT_SUCCESS;
}
-
-
-
+
+
+
/*
*
* print program usage to screen
*
- */
+ */
VOID Usage(VOID)
{
_tprintf(_T("\nDisplays and modifies the IP-to-Physical address
translation tables used by\n"
@@ -401,10 +537,10 @@
" > arp -s 157.55.85.212 00-aa-00-62-c6-09 ....
Adds a static entry.\n"
" > arp -a ....
Displays the arp table.\n\n"));
}
-
-
-
-/*
+
+
+
+/*
*
* Program entry.
* Parse command line and call the required function
@@ -412,35 +548,37 @@
*/
INT main(int argc, char* argv[])
{
- const char N[] = "-N";
-
- if ((argc < 2) || (argc > 5))
+ if ((argc < 2) || (argc > 5))
{
Usage();
- return FALSE;
+ return EXIT_FAILURE;
}
-
-
- if (argv[1][0] == '-') {
- switch (argv[1][1]) {
- /* FIX ME */
- /* need better control for -a, as -N might not be arg 4 */
- case 'a': if (argc == 2)
+
+ if (argv[1][0] == '-')
+ {
+ switch (argv[1][1])
+ {
+ case 'a': /* fall through */
+ case 'g':
+ if (argc == 2)
DisplayArpEntries(NULL, NULL);
else if (argc == 3)
DisplayArpEntries(argv[2], NULL);
- else if ((argc == 5) && ((strcmp(argv[3], N)) ==
0))
+ else if ((argc == 4) && ((strcmp(argv[2], "-N"))
== 0))
+ DisplayArpEntries(NULL, argv[3]);
+ else if ((argc == 5) && ((strcmp(argv[3], "-N"))
== 0))
DisplayArpEntries(argv[2], argv[4]);
else
Usage();
+ return EXIT_FAILURE;
break;
- case 'g': break;
case 'd': if (argc == 3)
Deletehost(argv[2], NULL);
else if (argc == 4)
Deletehost(argv[2], argv[3]);
else
Usage();
+ return EXIT_FAILURE;
break;
case 's': if (argc == 4)
Addhost(argv[2], argv[3], NULL);
@@ -448,15 +586,17 @@
Addhost(argv[2], argv[3], argv[4]);
else
Usage();
+ return EXIT_FAILURE;
break;
default:
Usage();
- return -1;
+ return EXIT_FAILURE;
}
- } else {
+ }
+ else
Usage();
- return -1;
- }
-
- return 0;
-}
+
+ return EXIT_SUCCESS;
+} /*
+warning: suggest parentheses around assignment used as truth value
+warning: char format, void arg (arg 2)*/
_____
Deleted: trunk/reactos/apps/utils/net/arp/trace.c
--- trunk/reactos/apps/utils/net/arp/trace.c 2005-09-25 16:56:52 UTC
(rev 18056)
+++ trunk/reactos/apps/utils/net/arp/trace.c 2005-09-25 17:01:24 UTC
(rev 18057)
@@ -1,53 +0,0 @@
-///////////////////////////////////////////////////////////////////////
//////
-// Diagnostic Trace
-//
-#include <stdio.h>
-#include <stdarg.h>
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#include <tchar.h>
-#include "trace.h"
-
-
-#ifdef _DEBUG
-
-#undef THIS_FILE
-static char THIS_FILE[] = __FILE__;
-
-void _DebugBreak(void)
-{
- DebugBreak();
-}
-
-void Trace(TCHAR* lpszFormat, ...)
-{
- va_list args;
- int nBuf;
- TCHAR szBuffer[512];
-
- va_start(args, lpszFormat);
- nBuf = _vsntprintf(szBuffer, sizeof(szBuffer)/sizeof(TCHAR),
lpszFormat, args);
- OutputDebugString(szBuffer);
- // was there an error? was the expanded string too long?
- //ASSERT(nBuf >= 0);
- va_end(args);
-}
-
-void Assert(void* assert, TCHAR* file, int line, void* msg)
-{
- if (msg == NULL) {
- printf("ASSERT -- %s occured on line %u of file %s.\n",
- assert, line, file);
- } else {
- printf("ASSERT -- %s occured on line %u of file %s: Message =
%s.\n",
- assert, line, file, msg);
- }
-}
-
-#else
-
-void Trace(TCHAR* lpszFormat, ...) { };
-void Assert(void* assert, TCHAR* file, int line, void* msg) { };
-
-#endif //_DEBUG
-///////////////////////////////////////////////////////////////////////
//////
_____
Deleted: trunk/reactos/apps/utils/net/arp/trace.h
--- trunk/reactos/apps/utils/net/arp/trace.h 2005-09-25 16:56:52 UTC
(rev 18056)
+++ trunk/reactos/apps/utils/net/arp/trace.h 2005-09-25 17:01:24 UTC
(rev 18057)
@@ -1,61 +0,0 @@
-///////////////////////////////////////////////////////////////////////
//////
-// Diagnostic Trace
-//
-#ifndef __TRACE_H__
-#define __TRACE_H__
-
-#ifdef _DEBUG
-
-#ifdef _X86_
-#define BreakPoint() _asm { int 3h }
-#else
-#define BreakPoint() _DebugBreak()
-#endif
-
-#ifndef ASSERT
-#define ASSERT(exp) \
-{ \
- if (!(exp)) { \
- Assert(#exp, __FILE__, __LINE__, NULL); \
- BreakPoint(); \
- } \
-} \
-
-#define ASSERTMSG(exp, msg) \
-{ \
- if (!(exp)) { \
- Assert(#exp, __FILE__, __LINE__, msg); \
- BreakPoint(); \
- } \
-}
-#endif
-
-//=====================================================================
========
-// MACRO: TRACE()
-//=====================================================================
========
-
-#define TRACE Trace
-
-
-#else // _DEBUG
-
-//=====================================================================
========
-// Define away MACRO's ASSERT() and TRACE() in non debug builds
-//=====================================================================
========
-
-#ifndef ASSERT
-#define ASSERT(exp)
-#define ASSERTMSG(exp, msg)
-#endif
-
-#define TRACE 0 ? (void)0 : Trace
-
-#endif // !_DEBUG
-
-
-void Assert(void* assert, TCHAR* file, int line, void* msg);
-void Trace(TCHAR* lpszFormat, ...);
-
-
-#endif // __TRACE_H__
-///////////////////////////////////////////////////////////////////////
//////