$OpenBSD: patch-common_updater_rcs_c,v 1.2 2014/06/26 20:06:50 naddy Exp $ --- common/updater_rcs.c.orig Mon Jul 18 16:32:59 2005 +++ common/updater_rcs.c Thu Jun 26 19:28:00 2014 @@ -59,6 +59,7 @@ #include "logmsg.h" #include "mux.h" #include "rcslib.h" +#include "version.h" #include "updater.h" @@ -1930,18 +1931,50 @@ updater_rcs_write_delta(struct updater_args *uda, uint sp += slen; } len -= slen + 1; - iov[2].iov_base = ";\n\n"; - iov[2].iov_len = 3; + iov[2].iov_base = ";\n"; + iov[2].iov_len = 2; if ((wn = writev(uda->uda_fileno, iov, 3)) == -1) { logmsg_err("%s", strerror(errno)); (*hashops->destroy)(uda->uda_hash_ctx); return (false); } - if ((size_t)wn != slen + 10) { + if ((size_t)wn != slen + 9) { logmsg_err("writev error"); (*hashops->destroy)(uda->uda_hash_ctx); return (false); + } + + /* commitid */ + if (uda->uda_proto >= CVSYNC_PROTO(0, 25)) { + len--; + if ((slen = *sp++) != 0) { + iov[0].iov_base = "commitid\t"; + iov[0].iov_len = 9; + + if (len < slen) { + (*hashops->destroy)(uda->uda_hash_ctx); + return (false); + } + iov[1].iov_base = (void *)sp; + iov[1].iov_len = slen; + (*hashops->update)(uda->uda_hash_ctx, sp, slen); + + sp += slen; + len -= slen; + + iov[2].iov_base = ";\n\n"; + iov[2].iov_len = 3; + + if ((wn = writev(uda->uda_fileno, iov, 3)) == -1) { + (*hashops->destroy)(uda->uda_hash_ctx); + return (false); + } + if ((size_t)wn != slen + 12) { + (*hashops->destroy)(uda->uda_hash_ctx); + return (false); + } + } } if (len != hashops->length) {