Fix _zip_set_name for empty name.
Add more test cases to name_locate.test.
diff --git a/TODO b/TODO
index 15b4a2c..13d9e8c 100644
--- a/TODO
+++ b/TODO
@@ -52,7 +52,6 @@
 
 Bugs
 ====
-! D name_locate("") fails
 ! D zip64 extra field not removed from local extra fields (extra_count_ignore_zip64.test)
 ! D check for off_t overflow
 ! D fix OpenSUSE i686 regression failures
diff --git a/lib/zip_set_name.c b/lib/zip_set_name.c
index dc62c74..bf9801c 100644
--- a/lib/zip_set_name.c
+++ b/lib/zip_set_name.c
@@ -89,10 +89,10 @@
 	e->changes->changed &= ~ZIP_DIRENT_FILENAME;
     }
 
-    if (e->orig && e->orig->filename)
+    if (e->orig)
 	changed = !_zip_string_equal(e->orig->filename, str);
     else
-	changed = (str != NULL);
+	changed = 1;
 	
     if (changed) {
         if (e->changes == NULL) {
diff --git a/regress/name_locate.c b/regress/name_locate.c
index 22f3fc0..eb3b9de 100644
--- a/regress/name_locate.c
+++ b/regress/name_locate.c
@@ -91,14 +91,20 @@
     zip_delete(z, 0);
     fail += find_fail(z, "test", 0, ZIP_ER_NOENT);
     fail += find_success(z, "test", ZIP_FL_UNCHANGED);
-    if ((s=zip_source_buffer(z, buf, sizeof(buf), 0)) == NULL ||
-	zip_file_add(z, "new", s, 0) < 0) {
+    if ((s=zip_source_buffer(z, buf, sizeof(buf), 0)) == NULL || zip_file_add(z, "new", s, 0) < 0) {
 	zip_source_free(s);
 	printf("error adding file: %s\n", zip_strerror(z));
     }
     fail += find_success(z, "new", 0);
+    fail += find_fail(z, "new", ZIP_FL_UNCHANGED, ZIP_ER_NOENT);
+    if ((s=zip_source_buffer(z, buf, sizeof(buf), 0)) == NULL || zip_file_add(z, "", s, 0) < 0) {
+	zip_source_free(s);
+	printf("error adding file: %s\n", zip_strerror(z));
+    }
+    fail += find_success(z, "", 0);
     zip_unchange_all(z);
     fail += find_success(z, "test", 0);
+    fail += find_fail(z, "new", 0, ZIP_ER_NOENT);
 
     if (zip_close(z) == -1) {
 	fprintf(stderr, "%s: can't close zip archive `%s': %s\n", prg,