--- samba-3.5.8/source3/client/client.c.orig	2011-06-04 20:18:58.000000000 +0200
+++ samba-3.5.8/source3/client/client.c	2011-06-05 20:22:21.000000000 +0200
@@ -274,9 +274,23 @@
  Check the space on a device.
 ****************************************************************************/
 
+#define	MODE1
+#define	MODE2
+#define	MODE3
 static int do_dskattr(void)
 {
+#ifdef	MODE1
 	int total, bsize, avail;
+#endif
+#ifdef	MODE2
+	uint64_t utotal, ualloc, uactual, spu, bps;
+#endif
+#ifdef	MODE3
+	uint64_t xtotal, xavail;
+	uint32_t xspu, xbps;
+#endif
+
+	int ret=0;
 	struct cli_state *targetcli = NULL;
 	char *targetpath = NULL;
 	TALLOC_CTX *ctx = talloc_tos();
@@ -286,15 +300,40 @@
 		return 1;
 	}
 
+#ifdef	MODE1
 	if (!NT_STATUS_IS_OK(cli_dskattr(targetcli, &bsize, &total, &avail))) {
 		d_printf("Error in dskattr: %s\n",cli_errstr(targetcli));
-		return 1;
+		ret=1;
+	} else {
+		d_printf("\n\t\t(a) %d blocks of size %d. %d blocks available\n",
+			total, bsize, avail);
+	}
+#endif
+
+#ifdef	MODE2
+	if(!cli_get_fs_full_size_info(targetcli, &utotal, &ualloc, &uactual,
+				&spu, &bps)) {
+		d_printf("Error in get_fs_full_size_info: %s\n",
+						cli_errstr(targetcli));
+		ret=1;
+	} else {
+		d_printf("\t\t(b) %ld units of size %ld*%ld. %ld units available\n",
+		utotal, spu, bps, uactual);
 	}
+#endif
 
-	d_printf("\n\t\t%d blocks of size %d. %d blocks available\n",
-		 total, bsize, avail);
+#ifdef	MODE3
+	if (!cli_filesystem_size(targetcli, &xtotal, &xavail, &xspu, &xbps)) {
+                d_printf("Error in filesystem_size: %s\n",
+						cli_errstr(targetcli));
+		ret=1;
+	} else {
+		d_printf("\t\t(c) %ld units of size %d*%d. %ld units available\n",
+			 xtotal, xspu, xbps, xavail);
+        }
+#endif
 
-	return 0;
+	return ret;
 }
 
 /****************************************************************************
