[PATCH 3/8] mv: flatten error handling code block
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
builtin/mv.c | 35 +++++++++++++++++------------------
1 file changed, 17 insertions(+), 18 deletions(-)
diff --git a/builtin/mv.c b/builtin/mv.c
index a7e02c0..5c6f58f 100644
--- a/builtin/mv.c
+++ b/builtin/mv.c
@@ -58,6 +58,11 @@ static const char *add_slash(const char *path)
return path;
}
+static void move_up_one(void *p, int nmemb, int size)
+{
+ memmove(p, (char*)p + size, nmemb * size);
+}
+
static struct lock_file lock_file;
#define SUBMODULE_WITH_GITDIR ((const char *)1)
@@ -224,24 +229,18 @@ int cmd_mv(int argc, const char **argv, const char *prefix)
else
string_list_insert(&src_for_dst, dst);
- if (bad) {
- if (ignore_errors) {
- if (--argc > 0) {
- memmove(source + i, source + i + 1,
- (argc - i) * sizeof(char *));
- memmove(destination + i,
- destination + i + 1,
- (argc - i) * sizeof(char *));
- memmove(modes + i, modes + i + 1,
- (argc - i) * sizeof(enum update_mode));
- memmove(submodule_gitfile + i,
- submodule_gitfile + i + 1,
- (argc - i) * sizeof(char *));
- i--;
- }
- } else
- die (_("%s, source=%s, destination=%s"),
- bad, src, dst);
+ if (!bad)
+ continue;
+ if (!ignore_errors)
+ die (_("%s, source=%s, destination=%s"),
+ bad, src, dst);
+ if (--argc > 0) {
+ int n = argc - i;
+ move_up_one(source + i, n, sizeof(*source));
+ move_up_one(destination + i, n, sizeof(*destination));
+ move_up_one(modes + i, n, sizeof(*modes));
+ move_up_one(submodule_gitfile + i, n, sizeof(*submodule_gitfile));
+ i--;
}
}
--
2.1.0.rc0.78.gc0d8480