diff -Naur patchtool-0.6/cmd_modify.c patchtool-0.7/cmd_modify.c --- patchtool-0.6/cmd_modify.c 2005-04-16 22:30:32.000000000 +0000 +++ patchtool-0.7/cmd_modify.c 2005-04-17 22:57:57.000000000 +0000 @@ -49,7 +49,7 @@ } else goto out_enocmd; - if ((argc - 1) <= nb_arg) + if ((argc - 1) < nb_arg) goto out_enoarg; for (i = 0; i < nb_arg; i++) @@ -81,27 +81,49 @@ static int match_rule(char *name, struct rule *rule) { - if (strstr(name, rule->argv[0])) - return 1; - return 0; + return strstr(name, rule->argv[0]) != NULL; } static char * mk_copy_name(char *name, struct rule *rule) { - return NULL; + char s[1024], *ptr; + char *tmp; + + tmp = strstr(name, rule->argv[0]); + if (!tmp) + return strdup(name); + + memset(s, 0, sizeof(char) * 1024); + + ptr = s; + strncpy(ptr, name, tmp - name); + ptr += (tmp - name); + strcpy(ptr, rule->argv[1]); + ptr += strlen(rule->argv[1]); + tmp += strlen(rule->argv[0]); + strcpy(ptr, tmp); + + return strdup(s); } static int do_part(struct part *part, struct rule *rules) { int deleted = 0; - char *copy_name = NULL; - int r; + char *copy_name[] = { NULL, NULL }; + char *str; + int r, stat; + + stat = part_status(part, NULL); for (r = 0; r < MAX_RULES; r++) { if (rules[r].cmd == CMD_NO) continue; - if (!match_rule(part->filename[1], &rules[r])) + str = (stat == PART_DEL) + ? part->filename[0] + : part->filename[1]; + + if (!match_rule(str, &rules[r])) continue; switch (rules[r].cmd) { @@ -109,20 +131,24 @@ deleted = 1; break; case CMD_MOV: - copy_name = mk_copy_name(part->filename[1], - &rules[r]); + copy_name[0] = mk_copy_name(part->filename[0], + &rules[r]); + copy_name[1] = mk_copy_name(part->filename[1], + &rules[r]); deleted = 1; break; case CMD_CPY: - copy_name = mk_copy_name(part->filename[1], + copy_name[0] = mk_copy_name(part->filename[0], + &rules[r]); + copy_name[1] = mk_copy_name(part->filename[1], &rules[r]); break; default: break; } } - if (copy_name) - export_part_as(part, copy_name, copy_name); + if (copy_name[0] && copy_name[1]) + export_part_as(part, copy_name[0], copy_name[1]); if (!deleted) export_part_as(part, part->filename[0], part->filename[1]); } @@ -148,7 +174,7 @@ */ for (i = r = 0; i < argc && (r < MAX_RULES); i++) { if (!no_more_option && strncmp(argv[i], "--", 2) == 0) { - if (!argv[i][3]) { + if (argv[i][3]) { int ret; ret = parse_rule(argc - i, &argv[i], &rules[r]); if (ret > 0) @@ -170,7 +196,6 @@ struct part *part = list_entry(tmp, struct part, list); do_part(part, rules); - } close_patch(patch); diff -Naur patchtool-0.6/cmd_version.c patchtool-0.7/cmd_version.c --- patchtool-0.6/cmd_version.c 2005-04-13 22:25:27.000000000 +0000 +++ patchtool-0.7/cmd_version.c 2005-04-17 23:02:39.000000000 +0000 @@ -16,6 +16,6 @@ int cmd_version(int argc, char **argv) { - printf("0.6.0\n"); + printf("0.7\n"); return 1; }