]>
git.saurik.com Git - apple/shell_cmds.git/blob - date/date.c
1 /* $NetBSD: date.c,v 1.25 1998/07/28 11:41:47 mycroft Exp $ */
4 * Copyright (c) 1985, 1987, 1988, 1993
5 * The Regents of the University of California. All rights reserved.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. All advertising materials mentioning features or use of this software
16 * must display the following acknowledgement:
17 * This product includes software developed by the University of
18 * California, Berkeley and its contributors.
19 * 4. Neither the name of the University nor the names of its contributors
20 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission.
23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 #include <sys/cdefs.h>
39 "@(#) Copyright (c) 1985, 1987, 1988, 1993\n\
40 The Regents of the University of California. All rights reserved.\n");
45 static char sccsid
[] = "@(#)date.c 8.2 (Berkeley) 4/28/95";
47 __RCSID("$NetBSD: date.c,v 1.25 1998/07/28 11:41:47 mycroft Exp $");
51 #include <sys/param.h>
72 int main
__P((int, char *[]));
73 static void setthetime
__P((const char *));
74 static void badformat
__P((void));
75 static void badtime
__P((void));
76 static void usage
__P((void));
86 char *format
, buf
[1024];
88 (void)setlocale(LC_ALL
, "");
91 while ((ch
= getopt(argc
, argv
, "nr:u")) != -1)
93 case 'n': /* don't set network */
96 case 'r': /* user specified seconds */
100 case 'u': /* do everything in GMT */
101 (void)setenv("TZ", "GMT0", 1);
109 if (!rflag
&& time(&tval
) == -1)
112 format
= "%a %b %e %H:%M:%S %Z %Y";
114 /* allow the operands in any order */
115 if (*argv
&& **argv
== '+') {
125 if (*argv
&& **argv
== '+')
128 (void)strftime(buf
, sizeof(buf
), format
, localtime(&tval
));
129 (void)printf("%s\n", buf
);
134 #define ATOI2(s) ((s) += 2, ((s)[-2] - '0') * 10 + ((s)[-1] - '0'))
145 for (t
= p
, dot
= NULL
; *t
; ++t
) {
148 if (*t
== '.' && dot
== NULL
) {
155 lt
= localtime(&tval
);
157 if (dot
!= NULL
) { /* .ss */
162 lt
->tm_sec
= ATOI2(dot
);
169 switch (strlen(p
) - len
) {
171 lt
->tm_year
= ATOI2(p
) * 100 - TM_YEAR_BASE
;
176 lt
->tm_year
+= ATOI2(p
);
180 lt
->tm_year
= yearset
+ 2000 - TM_YEAR_BASE
;
182 lt
->tm_year
= yearset
+ 1900 - TM_YEAR_BASE
;
186 lt
->tm_mon
= ATOI2(p
);
187 --lt
->tm_mon
; /* time struct is 0 - 11 */
190 lt
->tm_mday
= ATOI2(p
);
193 lt
->tm_hour
= ATOI2(p
);
196 lt
->tm_min
= ATOI2(p
);
202 /* convert broken-down time to GMT clock time */
203 if ((tval
= mktime(lt
)) == -1)
207 if (nflag
|| netsettime(tval
)) {
208 logwtmp("|", "date", "");
211 if (settimeofday(&tv
, NULL
)) {
212 perror("date: settimeofday");
215 logwtmp("{", "date", "");
218 if ((p
= getlogin()) == NULL
)
220 syslog(LOG_AUTH
| LOG_NOTICE
, "date set by %s", p
);
226 warnx("illegal time format");
233 errx(1, "illegal time");
239 (void)fprintf(stderr
,
240 "usage: date [-nu] [-r seconds] [+format]\n");
241 (void)fprintf(stderr
, " date [[[[[cc]yy]mm]dd]hh]mm[.ss]\n");