Code

merge-file: handle empty files gracefully
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>
Thu, 13 Mar 2008 15:19:35 +0000 (16:19 +0100)
committerJunio C Hamano <gitster@pobox.com>
Fri, 14 Mar 2008 06:43:56 +0000 (23:43 -0700)
Earlier, it would error out while trying to read and/or writing them.
Now, calling merge-file with empty files is neither interesting nor
useful, but it is a bug that needed fixing.

Noticed by Clemens Buchacher.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
builtin-merge-file.c
xdiff-interface.c

index 58deb62ac08507901c40e89aec0cea7fcdc78f1e..baff4495f0a4cbe6e5cf94975110e6ddd5518c20 100644 (file)
@@ -57,7 +57,8 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
 
                if (!f)
                        ret = error("Could not open %s for writing", filename);
-               else if (fwrite(result.ptr, result.size, 1, f) != 1)
+               else if (result.size &&
+                        fwrite(result.ptr, result.size, 1, f) != 1)
                        ret = error("Could not write to %s", filename);
                else if (fclose(f))
                        ret = error("Could not close %s", filename);
index 4b8e5cca804198b0e227454a585fa025281bbe2d..d8ba7e725fd30f2dde51a2b45ed0b6c9292bfce0 100644 (file)
@@ -152,8 +152,8 @@ int read_mmfile(mmfile_t *ptr, const char *filename)
        if ((f = fopen(filename, "rb")) == NULL)
                return error("Could not open %s", filename);
        sz = xsize_t(st.st_size);
-       ptr->ptr = xmalloc(sz);
-       if (fread(ptr->ptr, sz, 1, f) != 1)
+       ptr->ptr = xmalloc(sz ? sz : 1);
+       if (sz && fread(ptr->ptr, sz, 1, f) != 1)
                return error("Could not read %s", filename);
        fclose(f);
        ptr->size = sz;