Index: uspace/srv/fs/exfat/exfat_dentry.c
===================================================================
--- uspace/srv/fs/exfat/exfat_dentry.c	(revision e0d98b28a0e0aacac781d5016c0a045b0a2558df)
+++ uspace/srv/fs/exfat/exfat_dentry.c	(revision b4af12852e207c1a94d709941536572a682eddce)
@@ -70,13 +70,20 @@
 }
 
-uint16_t exfat_name_hash(const uint16_t *name)
+uint16_t exfat_name_hash(const uint16_t *name, const uint16_t *uctable, size_t chars)
 {
-	/* TODO */
-	return 0;
-}
+	uint16_t hash = 0;
+	uint16_t ch;
+	while (*name) {
+		if (*name < chars)
+			ch = uint16_t_le2host(uctable[*name]);
+		else
+			ch = *name;
+		name++;
 
-void exfat_set_checksum(const exfat_dentry_t *d, uint16_t *chksum)
-{
-	/* TODO */
+		hash = ((hash << 15) | (hash >> 1)) + (ch & 0xff);
+		hash = ((hash << 15) | (hash >> 1)) + (ch >> 8);
+	}
+
+	return hash;
 }
 
@@ -90,15 +97,4 @@
 	}
 	dst[*offset] = '\0';
-}
-
-void exfat_dentry_set_name(const uint16_t *src, size_t *offset, exfat_name_dentry_t *name)
-{
-	/* TODO */
-	size_t idx=0;
-	while (src[*offset] && idx < EXFAT_NAME_PART_LEN) {
-		name->name[idx] = src[*offset];
-		(*offset)++;
-		idx++;
-	}
 }
 
@@ -115,4 +111,14 @@
 }
 
+size_t utf16_length(const uint16_t *wstr)
+{
+	size_t len = 0;
+	
+	while (*wstr++ != 0)
+		len++;
+	
+	return len;
+}
+
 /**
  * @}
Index: uspace/srv/fs/exfat/exfat_dentry.h
===================================================================
--- uspace/srv/fs/exfat/exfat_dentry.h	(revision e0d98b28a0e0aacac781d5016c0a045b0a2558df)
+++ uspace/srv/fs/exfat/exfat_dentry.h	(revision b4af12852e207c1a94d709941536572a682eddce)
@@ -151,12 +151,15 @@
 extern exfat_dentry_clsf_t exfat_classify_dentry(const exfat_dentry_t *d);
 
-extern uint16_t exfat_name_hash(const uint16_t *name);
-extern void exfat_set_checksum(const exfat_dentry_t *d, uint16_t *chksum);
+extern uint16_t exfat_name_hash(const uint16_t *name, const uint16_t *uctable, 
+    size_t chars);
 
-extern void exfat_dentry_get_name(const exfat_name_dentry_t *name, size_t size, uint16_t *dst, size_t *offset);
-extern void exfat_dentry_set_name(const uint16_t *src, size_t *offset, exfat_name_dentry_t *name);
+extern void exfat_dentry_get_name(const exfat_name_dentry_t *name, size_t size, 
+    uint16_t *dst, size_t *offset);
+
 
 extern bool exfat_valid_char(wchar_t ch);
 extern bool exfat_valid_name(const char *name);
+
+extern size_t utf16_length(const uint16_t *wstr);
 
 
