version 1.108, 2005/12/03 15:31:53 |
version 1.109, 2005/12/08 18:56:10 |
|
|
RCSFILE *rfp; |
RCSFILE *rfp; |
struct stat st; |
struct stat st; |
va_list vap; |
va_list vap; |
|
struct rcs_delta *rdp; |
|
struct rcs_lock *lkr; |
|
|
fmode = 0; |
fmode = 0; |
flags &= 0xffff; /* ditch any internal flags */ |
flags &= 0xffff; /* ditch any internal flags */ |
|
|
return (NULL); |
return (NULL); |
} |
} |
|
|
|
/* fill in rd_locker */ |
|
TAILQ_FOREACH(lkr, &(rfp->rf_locks), rl_list) { |
|
if ((rdp = rcs_findrev(rfp, lkr->rl_num)) == NULL) { |
|
rcs_close(rfp); |
|
return (NULL); |
|
} |
|
|
|
rdp->rd_locker = strdup(lkr->rl_name); |
|
if (rdp->rd_locker == NULL) { |
|
rcs_close(rfp); |
|
return (NULL); |
|
} |
|
} |
|
|
return (rfp); |
return (rfp); |
} |
} |
|
|
|
|
|
|
/* first look for duplication */ |
/* first look for duplication */ |
TAILQ_FOREACH(lkp, &(file->rf_locks), rl_list) { |
TAILQ_FOREACH(lkp, &(file->rf_locks), rl_list) { |
if (strcmp(lkp->rl_name, user) == 0) { |
if ((strcmp(lkp->rl_name, user) == 0) && |
|
(rcsnum_cmp(rev, lkp->rl_num, 0) == 0)) { |
rcs_errno = RCS_ERR_DUPENT; |
rcs_errno = RCS_ERR_DUPENT; |
return (-1); |
return (-1); |
} |
} |
|
|
* Returns 0 on success, or -1 on failure. |
* Returns 0 on success, or -1 on failure. |
*/ |
*/ |
int |
int |
rcs_lock_remove(RCSFILE *file, const RCSNUM *rev) |
rcs_lock_remove(RCSFILE *file, const char *user, RCSNUM *rev) |
{ |
{ |
struct rcs_lock *lkp; |
struct rcs_lock *lkp; |
|
|
TAILQ_FOREACH(lkp, &(file->rf_locks), rl_list) |
TAILQ_FOREACH(lkp, &(file->rf_locks), rl_list) { |
if (rcsnum_cmp(lkp->rl_num, rev, 0) == 0) |
if ((strcmp(lkp->rl_name, user) == 0) && |
|
(rcsnum_cmp(lkp->rl_num, rev, 0) == 0)) |
break; |
break; |
|
} |
|
|
if (lkp == NULL) { |
if (lkp == NULL) { |
rcs_errno = RCS_ERR_NOENT; |
rcs_errno = RCS_ERR_NOENT; |
|
|
|
|
if (rdp->rd_author != NULL) |
if (rdp->rd_author != NULL) |
free(rdp->rd_author); |
free(rdp->rd_author); |
|
if (rdp->rd_locker != NULL) |
|
free(rdp->rd_locker); |
if (rdp->rd_state != NULL) |
if (rdp->rd_state != NULL) |
free(rdp->rd_state); |
free(rdp->rd_state); |
if (rdp->rd_log != NULL) |
if (rdp->rd_log != NULL) |