diff options
-rw-r--r-- | usr.bin/cvs/Makefile | 7 | ||||
-rw-r--r-- | usr.bin/cvs/rcs.c | 61 | ||||
-rw-r--r-- | usr.bin/cvs/rcs.h | 5 | ||||
-rw-r--r-- | usr.bin/cvs/rcstime.c | 89 |
4 files changed, 102 insertions, 60 deletions
diff --git a/usr.bin/cvs/Makefile b/usr.bin/cvs/Makefile index 28a75b7d6fa..38b03a61b95 100644 --- a/usr.bin/cvs/Makefile +++ b/usr.bin/cvs/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.19 2006/03/08 20:19:39 joris Exp $ +# $OpenBSD: Makefile,v 1.20 2006/03/09 10:56:33 xsa Exp $ PROG= cvs MAN= cvs.1 cvsignore.5 cvsrc.5 cvswrappers.5 cvsintro.7 @@ -7,8 +7,9 @@ CPPFLAGS+=-I${.CURDIR} SRCS= cvs.c add.c admin.c annotate.c buf.c checkout.c cmd.c commit.c \ compress.c date.y diff.c diff3.c edit.c entries.c fatal.c file.c \ getlog.c history.c hist.c import.c init.c log.c logmsg.c proto.c \ - rcs.c rcsnum.c release.c remove.c req.c resp.c root.c server.c \ - status.c tag.c update.c util.c version.c watch.c worklist.c xmalloc.c + rcs.c rcsnum.c rcstime.c release.c remove.c req.c resp.c root.c \ + server.c status.c tag.c update.c util.c version.c watch.c \ + worklist.c xmalloc.c CFLAGS= -g -ggdb CFLAGS+= -Wall diff --git a/usr.bin/cvs/rcs.c b/usr.bin/cvs/rcs.c index 190d445c966..b35fcf6b683 100644 --- a/usr.bin/cvs/rcs.c +++ b/usr.bin/cvs/rcs.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rcs.c,v 1.139 2006/03/08 09:03:59 xsa Exp $ */ +/* $OpenBSD: rcs.c,v 1.140 2006/03/09 10:56:33 xsa Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org> * All rights reserved. @@ -2531,13 +2531,11 @@ static char * rcs_expand_keywords(char *rcsfile, struct rcs_delta *rdp, char *data, size_t len, int mode) { - int tzone; int kwtype, sizdiff; u_int i, j, found, start_offset, c_offset; - char *c, *kwstr, *start, *end, *tbuf, *m, *h; + char *c, *kwstr, *start, *end, *tbuf; char expbuf[256], buf[256]; - struct tm *tb, ltb; - time_t now; + struct tm *tb; char *fmt; kwtype = 0; @@ -2548,57 +2546,8 @@ rcs_expand_keywords(char *rcsfile, struct rcs_delta *rdp, char *data, * -z support for RCS */ tb = &rdp->rd_date; - if (timezone_flag != NULL) { - if (!strcmp(timezone_flag, "LT")) { - now = mktime(&rdp->rd_date); - tb = localtime(&now); - tb->tm_hour += ((int)tb->tm_gmtoff / 3600); - } else { - switch (*timezone_flag) { - case '-': - case '+': - break; - default: - fatal("%s: not a known time zone", - timezone_flag); - } - - h = timezone_flag; - if ((m = strrchr(timezone_flag, ':')) != NULL) - *(m++) = '\0'; - - ltb = rdp->rd_date; - tb = <b; - - tzone = atoi(h); - - if (tzone >= 24 && tzone <= -24) - fatal("%s: not a known time zone", - timezone_flag); - - tb->tm_hour += tzone; - if (tb->tm_hour >= 24 && tb->tm_hour <= -24) - tb->tm_hour = 0; - - tb->tm_gmtoff += (tzone * 3600); - - if (m != NULL) { - tzone = atoi(m); - if (tzone >= 60) - fatal("%s: not a known time zone", - timezone_flag); - - if ((tb->tm_min + tzone) >= 60) { - tb->tm_hour++; - tb->tm_min -= tzone; - } else { - tb->tm_min += tzone; - } - - tb->tm_gmtoff += (tzone * 60); - } - } - } + if (timezone_flag != NULL) + tb = rcs_set_tz(timezone_flag, rdp); /* * Keyword formats: diff --git a/usr.bin/cvs/rcs.h b/usr.bin/cvs/rcs.h index 4d0b0942997..c889eb1ae3a 100644 --- a/usr.bin/cvs/rcs.h +++ b/usr.bin/cvs/rcs.h @@ -1,4 +1,4 @@ -/* $OpenBSD: rcs.h,v 1.48 2006/03/07 01:40:52 joris Exp $ */ +/* $OpenBSD: rcs.h,v 1.49 2006/03/09 10:56:33 xsa Exp $ */ /* * Copyright (c) 2004 Jean-Francois Brousseau <jfb@openbsd.org> * All rights reserved. @@ -271,6 +271,9 @@ char *rcsnum_tostr(const RCSNUM *, char *, size_t); int rcsnum_cpy(const RCSNUM *, RCSNUM *, u_int); int rcsnum_cmp(const RCSNUM *, const RCSNUM *, u_int); +/* rcstime.c */ +struct tm *rcs_set_tz(char *, struct rcs_delta *); + extern char *timezone_flag; #endif /* RCS_H */ diff --git a/usr.bin/cvs/rcstime.c b/usr.bin/cvs/rcstime.c new file mode 100644 index 00000000000..c4466bc6480 --- /dev/null +++ b/usr.bin/cvs/rcstime.c @@ -0,0 +1,89 @@ +/* $OpenBSD: rcstime.c,v 1.1 2006/03/09 10:56:33 xsa Exp $ */ +/* + * Copyright (c) 2006 Joris Vink <joris@openbsd.org> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "includes.h" + +#include "log.h" +#include "rcs.h" + + +struct tm * +rcs_set_tz(char *tz, struct rcs_delta *rdp) +{ + int tzone; + char *h, *m; + struct tm *tb, ltb; + time_t now; + + tb = &rdp->rd_date; + + if (!strcmp(tz, "LT")) { + now = mktime(&rdp->rd_date); + tb = localtime(&now); + tb->tm_hour += ((int)tb->tm_gmtoff/3600); + } else { + switch (*tz) { + case '-': + case '+': + break; + default: + fatal("%s: not a known time zone", tz); + } + + h = tz; + if ((m = strrchr(tz, ':')) != NULL) + *(m++) = '\0'; + + ltb = rdp->rd_date; + tb = <b; + + tzone = atoi(h); + if ((tzone >= 24) && (tzone <= -24)) + fatal("%s: not a known time zone", tz); + + tb->tm_hour += tzone; + if ((tb->tm_hour >= 24) && (tb->tm_hour <= -24)) + tb->tm_hour = 0; + + tb->tm_gmtoff += (tzone*3600); + + if (m != NULL) { + tzone = atoi(m); + if (tzone >= 60) + fatal("%s: not a known time zone", tz); + + if ((tb->tm_min + tzone) >= 60) { + tb->tm_hour++; + tb->tm_min -= tzone; + } else + tb->tm_min += tzone; + + tb->tm_gmtoff += (tzone*60); + } + } + + return (tb); +} |