Small cache_tree_write refactor.
authorPierre Habouzit <madcoder@debian.org>
Tue, 25 Sep 2007 08:22:44 +0000 (10:22 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 26 Sep 2007 09:27:06 +0000 (02:27 -0700)
This function cannot fail, make it void. Also make write_one act on a
const char* instead of a char*.

Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
cache-tree.c
cache-tree.h
read-cache.c

index 5471844af66ad8d3fe023d63acccdd1a24c4bb6e..50b35264fd0405a299700ef8bf4a61f416f30e46 100644 (file)
@@ -369,10 +369,8 @@ int cache_tree_update(struct cache_tree *it,
        return 0;
 }
 
-static void write_one(struct cache_tree *it,
-                      char *path,
-                      int pathlen,
-                          struct strbuf *buffer)
+static void write_one(struct strbuf *buffer, struct cache_tree *it,
+                      const char *path, int pathlen)
 {
        int i;
 
@@ -407,20 +405,13 @@ static void write_one(struct cache_tree *it,
                                             prev->name, prev->namelen) <= 0)
                                die("fatal - unsorted cache subtree");
                }
-               write_one(down->cache_tree, down->name, down->namelen, buffer);
+               write_one(buffer, down->cache_tree, down->name, down->namelen);
        }
 }
 
-void *cache_tree_write(struct cache_tree *root, unsigned long *size_p)
+void cache_tree_write(struct strbuf *sb, struct cache_tree *root)
 {
-       char path[PATH_MAX];
-       struct strbuf buffer;
-
-       path[0] = 0;
-       strbuf_init(&buffer, 0);
-       write_one(root, path, 0, &buffer);
-       *size_p = buffer.len;
-       return strbuf_detach(&buffer);
+       write_one(sb, root, "", 0);
 }
 
 static struct cache_tree *read_one(const char **buffer, unsigned long *size_p)
index 119407e3a10562166fc61e009613842b213dfcfc..8243228e49ffd7078a783582be6ce79c97541a9c 100644 (file)
@@ -22,7 +22,7 @@ void cache_tree_free(struct cache_tree **);
 void cache_tree_invalidate_path(struct cache_tree *, const char *);
 struct cache_tree_sub *cache_tree_sub(struct cache_tree *, const char *);
 
-void *cache_tree_write(struct cache_tree *root, unsigned long *size_p);
+void cache_tree_write(struct strbuf *, struct cache_tree *root);
 struct cache_tree *cache_tree_read(const char *buffer, unsigned long size);
 
 int cache_tree_fully_valid(struct cache_tree *);
index 2e40a344209e010e664758865846b63dc9546c1f..56202d13dfcfe4ed583fee7b4063596bc1ef417e 100644 (file)
@@ -1136,7 +1136,7 @@ int write_index(struct index_state *istate, int newfd)
 {
        SHA_CTX c;
        struct cache_header hdr;
-       int i, removed;
+       int i, err, removed;
        struct cache_entry **cache = istate->cache;
        int entries = istate->cache_nr;
 
@@ -1165,16 +1165,15 @@ int write_index(struct index_state *istate, int newfd)
 
        /* Write extension data here */
        if (istate->cache_tree) {
-               unsigned long sz;
-               void *data = cache_tree_write(istate->cache_tree, &sz);
-               if (data &&
-                   !write_index_ext_header(&c, newfd, CACHE_EXT_TREE, sz) &&
-                   !ce_write(&c, newfd, data, sz))
-                       free(data);
-               else {
-                       free(data);
+               struct strbuf sb;
+
+               strbuf_init(&sb, 0);
+               cache_tree_write(&sb, istate->cache_tree);
+               err = write_index_ext_header(&c, newfd, CACHE_EXT_TREE, sb.len) < 0
+                       || ce_write(&c, newfd, sb.buf, sb.len) < 0;
+               strbuf_release(&sb);
+               if (err)
                        return -1;
-               }
        }
        return ce_flush(&c, newfd);
 }