=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/rcs/rcs.c,v retrieving revision 1.86 retrieving revision 1.87 diff -u -r1.86 -r1.87 --- src/usr.bin/rcs/rcs.c 2018/12/30 23:09:58 1.86 +++ src/usr.bin/rcs/rcs.c 2019/01/09 17:55:28 1.87 @@ -1,4 +1,4 @@ -/* $OpenBSD: rcs.c,v 1.86 2018/12/30 23:09:58 guenther Exp $ */ +/* $OpenBSD: rcs.c,v 1.87 2019/01/09 17:55:28 joris Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * All rights reserved. @@ -691,7 +691,13 @@ rcs_lock_add(RCSFILE *file, const char *user, RCSNUM *rev) { struct rcs_lock *lkp; + struct rcs_delta *rdp; + if ((rdp = rcs_findrev(file, rev)) == NULL) { + rcs_errno = RCS_ERR_NOENT; + return (-1); + } + /* first look for duplication */ TAILQ_FOREACH(lkp, &(file->rf_locks), rl_list) { if (strcmp(lkp->rl_name, user) == 0 && @@ -706,6 +712,9 @@ lkp->rl_num = rcsnum_alloc(); rcsnum_cpy(rev, lkp->rl_num, 0); + free(rdp->rd_locker); + rdp->rd_locker = xstrdup(user); + TAILQ_INSERT_TAIL(&(file->rf_locks), lkp, rl_list); /* not synced anymore */ @@ -724,7 +733,13 @@ rcs_lock_remove(RCSFILE *file, const char *user, RCSNUM *rev) { struct rcs_lock *lkp; + struct rcs_delta *rdp; + if ((rdp = rcs_findrev(file, rev)) == NULL) { + rcs_errno = RCS_ERR_NOENT; + return (-1); + } + TAILQ_FOREACH(lkp, &(file->rf_locks), rl_list) { if (strcmp(lkp->rl_name, user) == 0 && rcsnum_cmp(lkp->rl_num, rev, 0) == 0) @@ -740,6 +755,9 @@ rcsnum_free(lkp->rl_num); free(lkp->rl_name); free(lkp); + + free(rdp->rd_locker); + rdp->rd_locker = NULL; /* not synced anymore */ file->rf_flags &= ~RCS_SYNCED;