Added support for anonymous structs/unions on compilers that implement it.

diff --git a/files/drive.c b/files/drive.c
index 5b53e66..dc06cfe 100644
--- a/files/drive.c
+++ b/files/drive.c
@@ -678,10 +678,10 @@
 #  error "statfs has no bfree/bavail member!"
 # endif
 #endif
-    size->LowPart = (DWORD)bigsize;
-    size->HighPart = (DWORD)(bigsize>>32);
-    available->LowPart = (DWORD)bigavail;
-    available->HighPart = (DWORD)(bigavail>>32);
+    size->s.LowPart = (DWORD)bigsize;
+    size->s.HighPart = (DWORD)(bigsize>>32);
+    available->s.LowPart = (DWORD)bigavail;
+    available->s.HighPart = (DWORD)(bigavail>>32);
     return 1;
 }
 
@@ -755,37 +755,37 @@
     if (!DRIVE_GetFreeSpace(drive, &size, &available)) return FALSE;
 
     /* Cap the size and available at 2GB as per specs.  */
-    if ((size.HighPart) ||(size.LowPart > 0x7fffffff))
+    if ((size.s.HighPart) ||(size.s.LowPart > 0x7fffffff))
 	{
-	  size.HighPart = 0;
-	  size.LowPart = 0x7fffffff;
+	  size.s.HighPart = 0;
+	  size.s.LowPart = 0x7fffffff;
 	}
-    if ((available.HighPart) ||(available.LowPart > 0x7fffffff))
+    if ((available.s.HighPart) ||(available.s.LowPart > 0x7fffffff))
       {
-	available.HighPart =0;
-	available.LowPart = 0x7fffffff;
+	available.s.HighPart =0;
+	available.s.LowPart = 0x7fffffff;
       }
     if (DRIVE_GetType(drive)==TYPE_CDROM) {
 	if (sector_bytes)
 	*sector_bytes    = 2048;
-	size.LowPart            /= 2048;
-	available.LowPart       /= 2048;
+	size.s.LowPart            /= 2048;
+	available.s.LowPart       /= 2048;
     } else {
 	if (sector_bytes)
 	*sector_bytes    = 512;
-	size.LowPart            /= 512;
-	available.LowPart       /= 512;
+	size.s.LowPart            /= 512;
+	available.s.LowPart       /= 512;
     }
     /* fixme: probably have to adjust those variables too for CDFS */
     cluster_sec = 1;
-    while (cluster_sec * 65536 < size.LowPart) cluster_sec *= 2;
+    while (cluster_sec * 65536 < size.s.LowPart) cluster_sec *= 2;
 
     if (cluster_sectors)
 	*cluster_sectors = cluster_sec;
     if (free_clusters)
-	*free_clusters   = available.LowPart / cluster_sec;
+	*free_clusters   = available.s.LowPart / cluster_sec;
     if (total_clusters)
-	*total_clusters  = size.LowPart / cluster_sec;
+	*total_clusters  = size.s.LowPart / cluster_sec;
     return TRUE;
 }
 
@@ -846,14 +846,14 @@
 
     if (total)
     {
-        total->HighPart = size.HighPart;
-        total->LowPart = size.LowPart ;
+        total->s.HighPart = size.s.HighPart;
+        total->s.LowPart = size.s.LowPart ;
     }
 
     if (totalfree)
     {
-        totalfree->HighPart = available.HighPart;
-        totalfree->LowPart = available.LowPart ;
+        totalfree->s.HighPart = available.s.HighPart;
+        totalfree->s.LowPart = available.s.LowPart ;
     }
 
     if (avail)
@@ -877,8 +877,8 @@
 
         /* Quick hack, should eventually be fixed to work 100% with
            Windows2000 (see comment above). */
-        avail->HighPart = available.HighPart;
-        avail->LowPart = available.LowPart ;
+        avail->s.HighPart = available.s.HighPart;
+        avail->s.LowPart = available.s.LowPart ;
     }
 
     return TRUE;