Index: uspace/app/sysinst/futil.c
===================================================================
--- uspace/app/sysinst/futil.c	(revision 5126f801cf167ce675ecc93b5079c64358dcbacb)
+++ uspace/app/sysinst/futil.c	(revision 8e9b253438734085e2e5bb51464bb58685d0bd8f)
@@ -60,4 +60,5 @@
 	ssize_t nr, nw;
 	int rc;
+	aoff64_t posr = 0, posw = 0;
 
 	printf("Copy '%s' to '%s'.\n", srcp, destp);
@@ -72,5 +73,5 @@
 
 	do {
-		nr = read(sf, buf, BUF_SIZE);
+		nr = read(sf, &posr, buf, BUF_SIZE);
 		if (nr == 0)
 			break;
@@ -78,5 +79,5 @@
 			return EIO;
 
-		nw = write(df, buf, nr);
+		nw = write(df, &posw, buf, nr);
 		if (nw <= 0)
 			return EIO;
@@ -157,7 +158,7 @@
 	int sf;
 	ssize_t nr;
-	off64_t off;
 	size_t fsize;
 	char *data;
+	struct stat st;
 
 	sf = open(srcp, O_RDONLY);
@@ -165,21 +166,23 @@
 		return ENOENT;
 
-	off = lseek(sf, 0, SEEK_END);
-	if (off == (off64_t)-1)
+	if (fstat(sf, &st) != EOK) {
+		close(sf);
 		return EIO;
+	}	
 
-	fsize = (size_t)off;
-
-	off = lseek(sf, 0, SEEK_SET);
-	if (off == (off64_t)-1)
-		return EIO;
+	fsize = st.size;
 
 	data = calloc(fsize, 1);
-	if (data == NULL)
+	if (data == NULL) {
+		close(sf);
 		return ENOMEM;
+	}
 
-	nr = read(sf, data, fsize);
-	if (nr != (ssize_t)fsize)
+	nr = read(sf, (aoff64_t []) { 0 }, data, fsize);
+	if (nr != (ssize_t)fsize) {
+		close(sf);
+		free(data);
 		return EIO;
+	}
 
 	(void) close(sf);
