xref: /openbsd-src/regress/lib/libc/time/strptime/main.c (revision d874cce4b1d9fe6b41c9e4f2117a77d8a4a37b92)
1*d874cce4Sray /*	$OpenBSD: main.c,v 1.2 2008/06/26 05:42:05 ray Exp $	*/
242a57dcfSmillert /*	$NetBSD: main.c,v 1.4 2002/02/21 07:38:18 itojun Exp $	*/
342a57dcfSmillert 
442a57dcfSmillert /*-
542a57dcfSmillert  * Copyright (c) 1998 The NetBSD Foundation, Inc.
642a57dcfSmillert  * All rights reserved.
742a57dcfSmillert  *
842a57dcfSmillert  * Redistribution and use in source and binary forms, with or without
942a57dcfSmillert  * modification, are permitted provided that the following conditions
1042a57dcfSmillert  * are met:
1142a57dcfSmillert  * 1. Redistributions of source code must retain the above copyright
1242a57dcfSmillert  *    notice, this list of conditions and the following disclaimer.
1342a57dcfSmillert  * 2. Redistributions in binary form must reproduce the above copyright
1442a57dcfSmillert  *    notice, this list of conditions and the following disclaimer in the
1542a57dcfSmillert  *    documentation and/or other materials provided with the distribution.
1642a57dcfSmillert  *
1742a57dcfSmillert  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
1842a57dcfSmillert  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
1942a57dcfSmillert  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
2042a57dcfSmillert  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
2142a57dcfSmillert  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
2242a57dcfSmillert  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
2342a57dcfSmillert  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2442a57dcfSmillert  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2542a57dcfSmillert  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2642a57dcfSmillert  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
2742a57dcfSmillert  * POSSIBILITY OF SUCH DAMAGE.
2842a57dcfSmillert  */
2942a57dcfSmillert #include <err.h>
3042a57dcfSmillert #include <stdio.h>
3142a57dcfSmillert #include <stdlib.h>
3242a57dcfSmillert #include <string.h>
3342a57dcfSmillert #include <time.h>
3442a57dcfSmillert 
3542a57dcfSmillert int	main(int, char *[]);
3642a57dcfSmillert void	die(void);
3742a57dcfSmillert 
3842a57dcfSmillert void
die(void)3942a57dcfSmillert die(void)
4042a57dcfSmillert {
4142a57dcfSmillert 
4242a57dcfSmillert 	if (ferror(stdin))
4342a57dcfSmillert 		err(1, "fgetln");
4442a57dcfSmillert 	else
4542a57dcfSmillert 		errx(1, "input is truncated");
4642a57dcfSmillert }
4742a57dcfSmillert 
4842a57dcfSmillert int
main(int argc,char * argv[])4942a57dcfSmillert main(int argc, char *argv[])
5042a57dcfSmillert {
5142a57dcfSmillert 	char *p, *title, *buf, *format;
5242a57dcfSmillert 	size_t len;
5342a57dcfSmillert 	struct tm tm;
5442a57dcfSmillert 
5542a57dcfSmillert 	for (;;) {
5642a57dcfSmillert 		p = fgetln(stdin, &len);
5742a57dcfSmillert 		if (p == 0)
5842a57dcfSmillert 			die();
5942a57dcfSmillert 		title = malloc(len + 1);
6042a57dcfSmillert 		memcpy(title, p, len);
6142a57dcfSmillert 		title[len] = '\0';
6242a57dcfSmillert 
6342a57dcfSmillert 		if (!strcmp(title, "EOF\n"))
6442a57dcfSmillert 			return(0);
6542a57dcfSmillert 		if (title[0] == '#' || title[0] == '\n') {
6642a57dcfSmillert 			free(title);
6742a57dcfSmillert 			continue;
6842a57dcfSmillert 		}
6942a57dcfSmillert 
7042a57dcfSmillert 		p = fgetln(stdin, &len);
7142a57dcfSmillert 		if (p == 0)
7242a57dcfSmillert 			die();
7342a57dcfSmillert 		buf = malloc(len + 1);
7442a57dcfSmillert 		memcpy(buf, p, len);
7542a57dcfSmillert 		buf[len] = '\0';
7642a57dcfSmillert 
7742a57dcfSmillert 		p = fgetln(stdin, &len);
7842a57dcfSmillert 		if (p == 0)
7942a57dcfSmillert 			die();
8042a57dcfSmillert 		format = malloc(len + 1);
8142a57dcfSmillert 		memcpy(format, p, len);
8242a57dcfSmillert 		format[len] = '\0';
8342a57dcfSmillert 
8442a57dcfSmillert 		tm.tm_sec = -1;
8542a57dcfSmillert 		tm.tm_min = -1;
8642a57dcfSmillert 		tm.tm_hour = -1;
8742a57dcfSmillert 		tm.tm_mday = -1;
8842a57dcfSmillert 		tm.tm_mon = -1;
8942a57dcfSmillert 		tm.tm_year = -1;
9042a57dcfSmillert 		tm.tm_wday = -1;
9142a57dcfSmillert 		tm.tm_yday = -1;
9242a57dcfSmillert 
9342a57dcfSmillert 		p = strptime(buf, format, &tm);
9442a57dcfSmillert 
9542a57dcfSmillert 		printf("%s", title);
9642a57dcfSmillert 		if (p) {
9742a57dcfSmillert 			printf("succeeded\n");
9842a57dcfSmillert 			printf("%d %d %d %d %d %d %d %d\n",
9942a57dcfSmillert 			    tm.tm_sec, tm.tm_min, tm.tm_hour, tm.tm_mday,
10042a57dcfSmillert 			    tm.tm_mon, tm.tm_year, tm.tm_wday, tm.tm_yday);
10142a57dcfSmillert 			printf("%s\n", p);
10242a57dcfSmillert 		} else {
10342a57dcfSmillert 			printf("failed\n");
10442a57dcfSmillert 		}
10542a57dcfSmillert 
10642a57dcfSmillert 		free(title);
10742a57dcfSmillert 		free(buf);
10842a57dcfSmillert 		free(format);
10942a57dcfSmillert 	}
11042a57dcfSmillert }
111