summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.bin/cvs/Makefile7
-rw-r--r--usr.bin/cvs/rcs.c61
-rw-r--r--usr.bin/cvs/rcs.h5
-rw-r--r--usr.bin/cvs/rcstime.c89
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 = &ltb;
-
- 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 = &ltb;
+
+ 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);
+}