]> git.ipfire.org Git - thirdparty/glibc.git/blame - time/bug-getdate1.c
Installed-header hygiene (BZ#20366): time.h types.
[thirdparty/glibc.git] / time / bug-getdate1.c
CommitLineData
b4354cf4
UD
1/* BZ #5451 */
2#include <time.h>
3#include <stdio.h>
4#include <stdlib.h>
5
6static char *templ_filename;
7
8// Writes template given as parameter to file,
9// specified as the argument
10static void
11output_to_template_file (const char *str)
12{
13 FILE *fd = fopen (templ_filename, "w");
14 if (fd == NULL)
15 {
16 printf ("Can not open file for writing\n");
17 exit (1);
18 }
19
20 fprintf (fd, "%s\n", str);
21 fclose (fd);
22}
23
24// Calls getdate() function with specified parameter,
25// specified as the argument, also checks the contents of
26// file with template and prints the result
27static int
28process_getdate_on (const char *str)
29{
30 struct tm *res;
31 char templ[1000];
32 FILE *fd = fopen (templ_filename, "r");
33
34 if (fd == NULL)
35 {
36 printf ("Can not open file for reading\n");
37 exit (1);
38 }
39
40 if (fgets (templ, 1000, fd) == NULL)
41 {
42 printf ("Can not read file\n");
43 exit (1);
44 }
45 fclose (fd);
46
47 res = getdate (str);
48 if (res == NULL)
49 {
50 printf ("Failed on getdate(\"%s\"), template is: %s", str, templ);
51 printf ("Error number: %d\n\n", getdate_err);
52 return 1;
53 }
54 printf ("Success on getdate(\"%s\"), template is: %s\n", str, templ);
55 printf ("Result is\n");
56 printf ("Seconds: %d\n", res->tm_sec);
57 printf ("Minutes: %d\n", res->tm_min);
58 printf ("Hour: %d\n", res->tm_hour);
59 printf ("Day of month: %d\n", res->tm_mday);
60 printf ("Month of year: %d\n", res->tm_mon);
61 printf ("Years since 1900: %d\n", res->tm_year);
62 printf ("Day of week: %d\n", res->tm_wday);
63 printf ("Day of year: %d\n", res->tm_yday);
64 printf ("Daylight Savings flag: %d\n\n", res->tm_isdst);
65 return 0;
66}
67
68static int
69do_test (int argc, char *argv[])
70{
71
72 templ_filename = argv[1];
73
74 setenv ("DATEMSK", templ_filename, 1);
75
76 /*
77 * The following 4 testcases reproduce the problem:
78 * 1. Templates "%S" and "%M" are not processed,
79 * when used without "%H" template
80 */
81 int res = 0;
82 output_to_template_file ("%M");
83 res |= process_getdate_on ("1");
84
85 output_to_template_file ("%M %H");
86 res |= process_getdate_on ("1 2");
87
88 output_to_template_file ("%S");
89 res |= process_getdate_on ("1");
90
91 output_to_template_file ("%S %H");
92 res |= process_getdate_on ("1 2");
93
94 /*
95 * The following 9 testcases reproduce the problem:
96 * 2. Templates "%Y", "%y", "%d", "%C", "%C %y"
97 * are not processed separately
98 */
99 output_to_template_file ("%Y");
100 process_getdate_on ("2001");
101
102 output_to_template_file ("%Y %m");
103 res |= process_getdate_on ("2001 3");
104
105 output_to_template_file ("%y");
106 res |= process_getdate_on ("70");
107
108 output_to_template_file ("%y %m");
109 res |= process_getdate_on ("70 3");
110
111 output_to_template_file ("%d");
112 res |= process_getdate_on ("06");
113
114 output_to_template_file ("%d %m");
115 res |= process_getdate_on ("25 3");
116
117 output_to_template_file ("%C");
f63e5063 118 res |= process_getdate_on ("20");
b4354cf4
UD
119
120 output_to_template_file ("%C %y %m");
f63e5063 121 res |= process_getdate_on ("20 3 2");
b4354cf4
UD
122
123 output_to_template_file ("%C %y");
f63e5063 124 res |= process_getdate_on ("20 5");
b4354cf4
UD
125
126 /*
127 * The following testcase reproduces the problem:
128 * 3. When template is "%Y %m", day of month is not set
129 * to 1 as standard requires
130 */
131 output_to_template_file ("%Y %m");
132 res |= process_getdate_on ("2008 3");
133
134 return res;
135}
136
137#define PREPARE(argc, argv) \
138 if (argc < 2) \
139 { \
140 puts ("Command line: progname template_filename_full_path"); \
141 exit (1); \
142 } \
143 add_temp_file (argv[1])
144
145#define TEST_FUNCTION do_test (argc, argv)
146#include "../test-skeleton.c"