Fixed a few bugs in network interface handling (code & test).

diff --git a/dlls/iphlpapi/iphlpapi_main.c b/dlls/iphlpapi/iphlpapi_main.c
index 829ec76..2ef5b31 100644
--- a/dlls/iphlpapi/iphlpapi_main.c
+++ b/dlls/iphlpapi/iphlpapi_main.c
@@ -352,7 +352,7 @@
               toIPAddressString(getInterfaceMaskByIndex(table->indexes[ndx]),
                ptr->IpAddressList.IpMask.String);
               if (ndx < table->numIndexes + 1)
-                ptr->Next = &pAdapterInfo[ndx + 1];
+                ptr->Next = (ndx == table->numIndexes - 1) ? NULL : &pAdapterInfo[ndx + 1];
             }
             ret = NO_ERROR;
           }
diff --git a/dlls/netapi32/tests/wksta.c b/dlls/netapi32/tests/wksta.c
index 2b99f2a..12e278b 100644
--- a/dlls/netapi32/tests/wksta.c
+++ b/dlls/netapi32/tests/wksta.c
@@ -162,7 +162,7 @@
         ok(bufPtr != NULL, "got data back");
         ok(entriesRead > 0, "read at least one transport");
         ok(totalEntries > 0, "at least one transport");
-        NetApiBufferFree(bufPtr);
+        pNetApiBufferFree(bufPtr);
     }
 }
 
diff --git a/dlls/netapi32/wksta.c b/dlls/netapi32/wksta.c
index 32adb7c..0c61e00 100644
--- a/dlls/netapi32/wksta.c
+++ b/dlls/netapi32/wksta.c
@@ -156,9 +156,9 @@
 
             for (n_adapt = 0, ptr = info; ptr; ptr = ptr->Next)
               n_adapt++;
-  	    size_needed = n_adapt * (sizeof(WKSTA_TRANSPORT_INFO_0) 
+  	    size_needed = n_adapt * sizeof(WKSTA_TRANSPORT_INFO_0) 
 	     + n_adapt * TRANSPORT_NAME_LEN * sizeof (WCHAR)
-	     + n_adapt * 13 * sizeof (WCHAR));
+	     + n_adapt * 13 * sizeof (WCHAR);
   	    if (prefmaxlen == MAX_PREFERRED_LENGTH)
   	      NetApiBufferAllocate( size_needed, (LPVOID *) pbuf);
   	    else