=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/cvs/rcsnum.c,v retrieving revision 1.25 retrieving revision 1.26 diff -u -r1.25 -r1.26 --- src/usr.bin/cvs/rcsnum.c 2006/03/11 06:28:49 1.25 +++ src/usr.bin/cvs/rcsnum.c 2006/03/11 22:44:11 1.26 @@ -1,4 +1,4 @@ -/* $OpenBSD: rcsnum.c,v 1.25 2006/03/11 06:28:49 ray Exp $ */ +/* $OpenBSD: rcsnum.c,v 1.26 2006/03/11 22:44:11 niallo Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau * All rights reserved. @@ -124,6 +124,9 @@ u_int16_t i; char *p; + if (num == 0) + return "0"; + p = buf + len - 1; i = num; bzero(buf, len); @@ -295,6 +298,14 @@ } } + /* We can't have a single-digit rcs number. */ + if (nump->rn_len == 0) { + tmp = xrealloc(nump->rn_id, + (nump->rn_len + 1) * sizeof(u_int16_t)); + nump->rn_id = (u_int16_t *)tmp; + nump->rn_id[nump->rn_len + 1] = 0; + nump->rn_len++; + } nump->rn_len++; return (nump->rn_len); @@ -323,14 +334,15 @@ /* * rcsnum_dec() * - * Decreases the revision number specified in - * Returns pointer to the on success, or NULL on failure. + * Decreases the revision number specified in , if doing so will not + * result in an ending value below 1. E.g. 4.2 will go to 4.1 but 4.1 will + * be returned as 4.1. */ RCSNUM * rcsnum_dec(RCSNUM *num) { if (num->rn_id[num->rn_len - 1] <= 0) - return (NULL); + return (num); num->rn_id[num->rn_len - 1]--; return (num); }