Update exFAT to 1.0

Change-Id: I059cf52c41e76c584f76534b84af8b398d9e4617
diff --git a/exfat/libexfat/node.c b/exfat/libexfat/node.c
index bacb01d..ff2cea9 100644
--- a/exfat/libexfat/node.c
+++ b/exfat/libexfat/node.c
@@ -2,7 +2,7 @@
 	node.c (09.10.09)
 	exFAT file system implementation library.
 
-	Copyright (C) 2010-2012  Andrew Nayenko
+	Copyright (C) 2010-2013  Andrew Nayenko
 
 	This program is free software: you can redistribute it and/or modify
 	it under the terms of the GNU General Public License as published by
@@ -486,7 +486,7 @@
 	reset_cache(ef, ef->root);
 }
 
-void next_entry(struct exfat* ef, const struct exfat_node* parent,
+static void next_entry(struct exfat* ef, const struct exfat_node* parent,
 		cluster_t* cluster, off64_t* offset)
 {
 	*offset += sizeof(struct exfat_entry);
@@ -908,6 +908,23 @@
 		exfat_put_node(ef, node);
 		return rc;
 	}
+
+	/* check that target is not a subdirectory of the source */
+	if (node->flags & EXFAT_ATTRIB_DIR)
+	{
+		struct exfat_node* p;
+
+		for (p = dir; p; p = p->parent)
+			if (node == p)
+			{
+				if (existing != NULL)
+					exfat_put_node(ef, existing);
+				exfat_put_node(ef, dir);
+				exfat_put_node(ef, node);
+				return -EINVAL;
+			}
+	}
+
 	if (existing != NULL)
 	{
 		/* remove target if it's not the same node as source */