Fix stale index.lock file removal using "atexit()".

Problem noted by Randy Dunlap.
diff --git a/update-cache.c b/update-cache.c
index b39185a..ea956e4 100644
--- a/update-cache.c
+++ b/update-cache.c
@@ -230,22 +230,30 @@
 	}
 }
 
+static int remove_lock = 0;
+
+static void remove_lock_file(void)
+{
+	if (remove_lock)
+		unlink(".dircache/index.lock");
+}
+
 int main(int argc, char **argv)
 {
 	int i, newfd, entries;
 	int allow_options = 1;
 
-	entries = read_cache();
-	if (entries < 0) {
-		perror("cache corrupted");
-		return -1;
-	}
-
 	newfd = open(".dircache/index.lock", O_RDWR | O_CREAT | O_EXCL, 0600);
-	if (newfd < 0) {
-		perror("unable to create new cachefile");
-		return -1;
-	}
+	if (newfd < 0)
+		usage("unable to create new cachefile");
+
+	atexit(remove_lock_file);
+	remove_lock = 1;
+
+	entries = read_cache();
+	if (entries < 0)
+		usage("cache corrupted");
+
 	for (i = 1 ; i < argc; i++) {
 		char *path = argv[i];
 
@@ -272,14 +280,13 @@
 			fprintf(stderr, "Ignoring path %s\n", argv[i]);
 			continue;
 		}
-		if (add_file_to_cache(path)) {
-			fprintf(stderr, "Unable to add %s to database\n", path);
-			goto out;
-		}
+		if (add_file_to_cache(path))
+			usage("Unable to add %s to database", path);
 	}
-	if (!write_cache(newfd, active_cache, active_nr) && !rename(".dircache/index.lock", ".dircache/index"))
-		return 0;
-out:
-	unlink(".dircache/index.lock");
+	if (write_cache(newfd, active_cache, active_nr) ||
+	    rename(".dircache/index.lock", ".dircache/index"))
+		usage("Unable to write new cachefile");
+
+	remove_lock = 0;
 	return 0;
 }