fixed some memory leaks and build it as unicode by default
Modified: trunk/reactos/apps/utils/net/route/route.c
Modified: trunk/reactos/apps/utils/net/route/route.xml
_____
Modified: trunk/reactos/apps/utils/net/route/route.c
--- trunk/reactos/apps/utils/net/route/route.c 2005-10-01 18:41:02 UTC
(rev 18196)
+++ trunk/reactos/apps/utils/net/route/route.c 2005-10-01 19:01:07 UTC
(rev 18197)
@@ -22,69 +22,120 @@
int Usage()
{
- fprintf( stderr,
- "route usage:\n"
- "route print\n"
- " prints the route table\n"
- "route add <target> [mask <mask>] <gw> [metric
<m>]\n"
- " adds a route\n"
- "route delete <target> <gw>\n"
- " deletes a route\n" );
+ _ftprintf( stderr,
+ _T("route usage:\n"
+ "route print\n"
+ " prints the route table\n"
+ "route add <target> [mask <mask>] <gw> [metric
<m>]\n"
+ " adds a route\n"
+ "route delete <target> <gw>\n"
+ " deletes a route\n") );
return 1;
}
int PrintRoutes()
{
PMIB_IPFORWARDTABLE IpForwardTable = NULL;
- PIP_ADAPTER_INFO pAdapterInfo = NULL;
+ PIP_ADAPTER_INFO pAdapterInfo;
+ ULONG Size = 0;
DWORD Error = 0;
- ULONG Size = 0;
- ULONG adaptOutBufLen;
+ ULONG adaptOutBufLen = sizeof(IP_ADAPTER_INFO);
TCHAR DefGate[16];
- char Destination[IPBUF], Gateway[IPBUF], Netmask[IPBUF];
+ TCHAR Destination[IPBUF], Gateway[IPBUF], Netmask[IPBUF];
unsigned int i;
/* set required buffer size */
- pAdapterInfo = (IP_ADAPTER_INFO *) malloc( sizeof(IP_ADAPTER_INFO)
);
- if (GetAdaptersInfo( pAdapterInfo, &adaptOutBufLen) ==
ERROR_INSUFFICIENT_BUFFER)
+ pAdapterInfo = (IP_ADAPTER_INFO *) malloc( adaptOutBufLen );
+ if (pAdapterInfo == NULL)
+ {
+ Error = ERROR_NOT_ENOUGH_MEMORY;
+ goto Error;
+ }
+ if (GetAdaptersInfo( pAdapterInfo, &adaptOutBufLen) ==
ERROR_BUFFER_OVERFLOW)
+ {
+ free (pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) malloc (adaptOutBufLen);
+ if (pAdapterInfo == NULL)
+ {
+ Error = ERROR_NOT_ENOUGH_MEMORY;
+ goto Error;
+ }
+ }
if( (GetIpForwardTable( NULL, &Size, TRUE )) ==
ERROR_INSUFFICIENT_BUFFER )
- IpForwardTable = malloc( Size );
+ {
+ if (!(IpForwardTable = malloc( Size )))
+ {
+ free(pAdapterInfo);
+ Error = ERROR_NOT_ENOUGH_MEMORY;
+ goto Error;
+ }
+ }
- if ((Error = (GetAdaptersInfo(pAdapterInfo, &adaptOutBufLen) ==
NO_ERROR)) &&
- (Error = (GetIpForwardTable(IpForwardTable, &Size, TRUE) ==
NO_ERROR)))
+ if (((Error = GetAdaptersInfo(pAdapterInfo, &adaptOutBufLen)) ==
NO_ERROR) &&
+ ((Error = GetIpForwardTable(IpForwardTable, &Size, TRUE)) ==
NO_ERROR))
{
- _tcsncpy(DefGate, pAdapterInfo->GatewayList.IpAddress.String,
16);
+ _stprintf(DefGate,
+#if UNICODE
+ _T("%hs"),
+#else
+ _T("%s"),
+#endif
+ pAdapterInfo->GatewayList.IpAddress.String);
_tprintf(_T("===========================================================
================\n"));
_tprintf(_T("Interface List\n"));
+ /* FIXME - sort by the index! */
while (pAdapterInfo)
{
- _tprintf(_T("0x%lu ........................... %s\n"),
pAdapterInfo->Index, pAdapterInfo->Description);
+ _tprintf(_T("0x%lu ........................... "
+#if UNICODE
+ "%hs\n"),
+#else
+ "%s\n"),
+#endif
+ pAdapterInfo->Index, pAdapterInfo->Description);
pAdapterInfo = pAdapterInfo->Next;
}
_tprintf(_T("===========================================================
================\n"));
_tprintf(_T("===========================================================
================\n"));
_tprintf(_T("Active Routes:\n"));
- printf( "%-27s%-17s%-14s%-11s%-10s\n",
- "Network Destination",
- "Netmask",
- "Gateway",
- "Interface",
- "Metric" );
+ _tprintf( _T("%-27s%-17s%-14s%-11s%-10s\n"),
+ _T("Network Destination"),
+ _T("Netmask"),
+ _T("Gateway"),
+ _T("Interface"),
+ _T("Metric") );
for( i = 0; i < IpForwardTable->dwNumEntries; i++ )
{
- strcpy( Destination, inet_ntoa(
IN_ADDR_OF(IpForwardTable->table[i].dwForwardDest) ) );
- strcpy( Netmask, inet_ntoa(
IN_ADDR_OF(IpForwardTable->table[i].dwForwardMask) ) );
- strcpy( Gateway, inet_ntoa(
IN_ADDR_OF(IpForwardTable->table[i].dwForwardNextHop) ) );
+ _stprintf( Destination,
+#if UNICODE
+ _T("%hs"),
+#else
+ _T("%s"),
+#endif
+ inet_ntoa(
IN_ADDR_OF(IpForwardTable->table[i].dwForwardDest) ) );
+ _stprintf( Netmask,
+#if UNICODE
+ _T("%hs"),
+#else
+ _T("%s"),
+#endif
+ inet_ntoa(
IN_ADDR_OF(IpForwardTable->table[i].dwForwardMask) ) );
+ _stprintf( Gateway,
+#if UNICODE
+ _T("%hs"),
+#else
+ _T("%s"),
+#endif
+ inet_ntoa(
IN_ADDR_OF(IpForwardTable->table[i].dwForwardNextHop) ) );
- printf( "%17s%17s%17s%16ld%9ld\n",
- Destination,
- Netmask,
- Gateway,
- IpForwardTable->table[i].dwForwardIfIndex,
- IpForwardTable->table[i].dwForwardMetric1 );
+ _tprintf( _T("%17s%17s%17s%16ld%9ld\n"),
+ Destination,
+ Netmask,
+ Gateway,
+ IpForwardTable->table[i].dwForwardIfIndex,
+ IpForwardTable->table[i].dwForwardMetric1 );
}
_tprintf(_T("Default Gateway:%18s\n"), DefGate);
_tprintf(_T("===========================================================
================\n"));
@@ -97,98 +148,159 @@
}
else
{
- fprintf( stderr, "Route enumerate failed\n" );
+Error:
+ _ftprintf( stderr, _T("Route enumerate failed\n") );
return Error;
}
}
int convert_add_cmd_line( PMIB_IPFORWARDROW RowToAdd,
- int argc, char **argv ) {
+ int argc, TCHAR **argv ) {
int i;
+#if UNICODE
+ char addr[16];
+#endif
if( argc > 1 )
+ {
+#if UNICODE
+ sprintf( addr, "%ls", argv[0] );
+ RowToAdd->dwForwardDest = inet_addr( addr );
+#else
RowToAdd->dwForwardDest = inet_addr( argv[0] );
+#endif
+ }
else
return FALSE;
for( i = 1; i < argc; i++ )
{
- if( !strcasecmp( argv[i], "mask" ) )
+ if( !_tcscmp( argv[i], _T("mask") ) )
{
i++; if( i >= argc ) return FALSE;
+#if UNICODE
+ sprintf( addr, "%ls", argv[i] );
+ RowToAdd->dwForwardDest = inet_addr( addr );
+#else
RowToAdd->dwForwardMask = inet_addr( argv[i] );
+#endif
}
- else if( !strcasecmp( argv[i], "metric" ) )
+ else if( !_tcscmp( argv[i], _T("metric") ) )
{
i++;
if( i >= argc )
return FALSE;
- RowToAdd->dwForwardMetric1 = atoi( argv[i] );
+ RowToAdd->dwForwardMetric1 = _ttoi( argv[i] );
}
else
+ {
+#if UNICODE
+ sprintf( addr, "%ls", argv[i] );
+ RowToAdd->dwForwardNextHop = inet_addr( addr );
+#else
RowToAdd->dwForwardNextHop = inet_addr( argv[i] );
+#endif
+ }
}
return TRUE;
}
-int add_route( int argc, char **argv ) {
+int add_route( int argc, TCHAR **argv ) {
MIB_IPFORWARDROW RowToAdd = { 0 };
DWORD Error;
if( argc < 2 || !convert_add_cmd_line( &RowToAdd, argc, argv ) )
{
- fprintf( stderr,
- "route add usage:\n"
- "route add <target> [mask <mask>] <gw> [metric
<m>]\n"
- " Adds a route to the IP route table.\n"
- " <target> is the network or host to add a route to.\n"
- " <mask> is the netmask to use (autodetected if
unspecified)\n"
- " <gw> is the gateway to use to access the network\n"
- " <m> is the metric to use (lower is preferred)\n" );
+ _ftprintf( stderr,
+ _T("route add usage:\n"
+ "route add <target> [mask <mask>] <gw>
[metric
<m>]\n"
+ " Adds a route to the IP route table.\n"
+ " <target> is the network or host to add a route
to.\n"
+ " <mask> is the netmask to use (autodetected
if unspecified)\n"
+ " <gw> is the gateway to use to access the
network\n"
+ " <m> is the metric to use (lower is
preferred)\n") );
return 1;
}
if( (Error = CreateIpForwardEntry( &RowToAdd )) == ERROR_SUCCESS )
return 0;
- fprintf( stderr, "Route addition failed\n" );
+ _ftprintf( stderr, _T("Route addition failed\n") );
return Error;
}
-int del_route( int argc, char **argv )
+int del_route( int argc, TCHAR **argv )
{
MIB_IPFORWARDROW RowToDel = { 0 };
DWORD Error;
if( argc < 2 || !convert_add_cmd_line( &RowToDel, argc, argv ) )
{
- fprintf( stderr,
- "route delete usage:\n"
- "route delete <target> <gw>\n"
- " Removes a route from the IP route table.\n"
- " <target> is the network or host to add a route to.\n"
- " <gw> is the gateway to remove the route from.\n" );
+ _ftprintf( stderr,
+ _T("route delete usage:\n"
+ "route delete <target> <gw>\n"
+ " Removes a route from the IP route table.\n"
+ " <target> is the network or host to add a
route to.\n"
+ " <gw> is the gateway to remove the route
from.\n") );
return 1;
}
if( (Error = DeleteIpForwardEntry( &RowToDel )) == ERROR_SUCCESS )
return 0;
- fprintf( stderr, "Route addition failed\n" );
+ _ftprintf( stderr, _T("Route addition failed\n") );
return Error;
}
-int main( int argc, char **argv )
+int _tmain( int argc, TCHAR **argv )
{
if( argc < 2 )
return Usage();
- else if ( !strcasecmp( argv[1], "print" ) )
+ else if ( !_tcscmp( argv[1], _T("print") ) )
return PrintRoutes();
- else if( !strcasecmp( argv[1], "add" ) )
+ else if( !_tcscmp( argv[1], _T("add") ) )
return add_route( argc-2, argv+2 );
- else if( !strcasecmp( argv[1], "delete" ) )
+ else if( !_tcscmp( argv[1], _T("delete") ) )
return del_route( argc-2, argv+2 );
else
return Usage();
}
+
+#if defined(_UNICODE) && defined(__GNUC__)
+/* HACK - MINGW HAS NO OFFICIAL SUPPORT FOR wmain()!!! */
+int main( int argc, char **argv )
+{
+ WCHAR **argvW;
+ int i, j, Ret = 1;
+
+ if ((argvW = malloc(argc * sizeof(WCHAR*))))
+ {
+ /* convert the arguments */
+ for (i = 0, j = 0; i < argc; i++)
+ {
+ if (!(argvW[i] = malloc((strlen(argv[i]) + 1) *
sizeof(WCHAR))))
+ {
+ j++;
+ }
+ swprintf(argvW[i], L"%hs", argv[i]);
+ }
+
+ if (j == 0)
+ {
+ /* no error converting the parameters, call wmain() */
+ Ret = wmain(argc, argvW);
+ }
+
+ /* free the arguments */
+ for (i = 0; i < argc; i++)
+ {
+ if (argvW[i])
+ free(argvW[i]);
+ }
+ free(argvW);
+ }
+
+ return Ret;
+}
+#endif
_____
Modified: trunk/reactos/apps/utils/net/route/route.xml
--- trunk/reactos/apps/utils/net/route/route.xml 2005-10-01
18:41:02 UTC (rev 18196)
+++ trunk/reactos/apps/utils/net/route/route.xml 2005-10-01
19:01:07 UTC (rev 18197)
@@ -1,6 +1,8 @@
-<module name="route" type="win32cui"
installbase="system32"
installname="route.exe" allowwarnings="true">
+<module name="route" type="win32cui"
installbase="system32"
installname="route.exe">
<include base="route">.</include>
<define name="__USE_W32API" />
+ <define name="UNICODE" />
+ <define name="_UNICODE" />
<library>kernel32</library>
<library>ws2_32</library>
<library>iphlpapi</library>