diff options
Diffstat (limited to 'contrib/cvs/src/patch.c')
-rw-r--r-- | contrib/cvs/src/patch.c | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/contrib/cvs/src/patch.c b/contrib/cvs/src/patch.c index f16a331..9aa26f3 100644 --- a/contrib/cvs/src/patch.c +++ b/contrib/cvs/src/patch.c @@ -20,7 +20,7 @@ static Dtype patch_dirproc PROTO ((void *callerdat, char *dir, char *repos, char *update_dir, List *entries)); static int patch_fileproc PROTO ((void *callerdat, struct file_info *finfo)); -static int patch_proc PROTO((int *pargc, char **argv, char *xwhere, +static int patch_proc PROTO((int argc, char **argv, char *xwhere, char *mwhere, char *mfile, int shorten, int local_specified, char *mname, char *msg)); @@ -230,6 +230,9 @@ patch (argc, argv) #endif /* clean up if we get a signal */ +#ifdef SIGABRT + (void) SIG_register (SIGABRT, patch_cleanup); +#endif #ifdef SIGHUP (void) SIG_register (SIGHUP, patch_cleanup); #endif @@ -261,9 +264,9 @@ patch (argc, argv) */ /* ARGSUSED */ static int -patch_proc (pargc, argv, xwhere, mwhere, mfile, shorten, local_specified, +patch_proc (argc, argv, xwhere, mwhere, mfile, shorten, local_specified, mname, msg) - int *pargc; + int argc; char **argv; char *xwhere; char *mwhere; @@ -273,6 +276,7 @@ patch_proc (pargc, argv, xwhere, mwhere, mfile, shorten, local_specified, char *mname; char *msg; { + char *myargv[2]; int err = 0; int which; char *repository; @@ -314,13 +318,10 @@ patch_proc (pargc, argv, xwhere, mwhere, mfile, shorten, local_specified, } else { - int i; - - /* a file means muck argv */ - for (i = 1; i < *pargc; i++) - free (argv[i]); - argv[1] = xstrdup (mfile); - (*pargc) = 2; + myargv[0] = argv[0]; + myargv[1] = mfile; + argc = 2; + argv = myargv; } free (path); } @@ -341,19 +342,19 @@ patch_proc (pargc, argv, xwhere, mwhere, mfile, shorten, local_specified, if (rev1 != NULL && !rev1_validated) { - tag_check_valid (rev1, *pargc - 1, argv + 1, local, 0, NULL); + tag_check_valid (rev1, argc - 1, argv + 1, local, 0, NULL); rev1_validated = 1; } if (rev2 != NULL && !rev2_validated) { - tag_check_valid (rev2, *pargc - 1, argv + 1, local, 0, NULL); + tag_check_valid (rev2, argc - 1, argv + 1, local, 0, NULL); rev2_validated = 1; } /* start the recursion processor */ err = start_recursion (patch_fileproc, (FILESDONEPROC) NULL, patch_dirproc, (DIRLEAVEPROC) NULL, NULL, - *pargc - 1, argv + 1, local, + argc - 1, argv + 1, local, which, 0, 1, where, 1); free (where); @@ -735,6 +736,10 @@ failed to read diff file header %s for %s: end of file", tmpfile3, rcs); tmpfile1 = tmpfile2 = tmpfile3 = NULL; out2: + if (vers_tag != NULL) + free (vers_tag); + if (vers_head != NULL) + free (vers_head); if (rcs != NULL) free (rcs); return (ret); |