Pull fix for exFAT from original source

http://code.google.com/p/exfat/source/detail?r=336

Change-Id: Ie8453770a4dcb31283012550f28483ad88bdc267
diff --git a/exfat/exfat-fuse/main.c b/exfat/exfat-fuse/main.c
index 6771096..e50c14a 100644
--- a/exfat/exfat-fuse/main.c
+++ b/exfat/exfat-fuse/main.c
@@ -154,19 +154,25 @@
 static int fuse_exfat_read(const char* path, char* buffer, size_t size,
 		off64_t offset, struct fuse_file_info* fi)
 {
+	ssize_t ret;
+
 	exfat_debug("[%s] %s (%zu bytes)", __func__, path, size);
-	if (exfat_generic_pread(&ef, get_node(fi), buffer, size, offset) != size)
-		return EOF;
-	return size;
+	ret = exfat_generic_pread(&ef, get_node(fi), buffer, size, offset);
+	if (ret < 0)
+		return -EIO;
+	return ret;
 }
 
 static int fuse_exfat_write(const char* path, const char* buffer, size_t size,
 		off64_t offset, struct fuse_file_info* fi)
 {
+	ssize_t ret;
+
 	exfat_debug("[%s] %s (%zu bytes)", __func__, path, size);
-	if (exfat_generic_pwrite(&ef, get_node(fi), buffer, size, offset) != size)
-		return EOF;
-	return size;
+	ret = exfat_generic_pwrite(&ef, get_node(fi), buffer, size, offset);
+	if (ret < 0)
+		return -EIO;
+	return ret;
 }
 
 static int fuse_exfat_unlink(const char* path)
diff --git a/exfat/libexfat/io.c b/exfat/libexfat/io.c
index 65df63a..1be028c 100644
--- a/exfat/libexfat/io.c
+++ b/exfat/libexfat/io.c
@@ -341,7 +341,7 @@
 	}
 	if (!ef->ro && !ef->noatime)
 		exfat_update_atime(node);
-	return size - remainder;
+	return MIN(size, node->size - offset) - remainder;
 }
 
 ssize_t exfat_generic_pwrite(struct exfat* ef, struct exfat_node* node,