10dc076565f772bb1953209fb69ea150b494aaa40robbiew/*
20dc076565f772bb1953209fb69ea150b494aaa40robbiew * Copyright (c) 2003, Intel Corporation. All rights reserved.
30dc076565f772bb1953209fb69ea150b494aaa40robbiew * Created by:  majid.awad REMOVE-THIS AT intel DOT com
40dc076565f772bb1953209fb69ea150b494aaa40robbiew * This file is licensed under the GPL license.  For the full content
50dc076565f772bb1953209fb69ea150b494aaa40robbiew * of this license, see the COPYING file at the top level of this
60dc076565f772bb1953209fb69ea150b494aaa40robbiew * source tree.
70dc076565f772bb1953209fb69ea150b494aaa40robbiew *
80dc076565f772bb1953209fb69ea150b494aaa40robbiew *
92c28215423293e443469a07ae7011135d058b671Garrett Cooper * Modified by the E or O indicate that an alternative format or
102c28215423293e443469a07ae7011135d058b671Garrett Cooper * specification should be used rather than the one normally used by the
110dc076565f772bb1953209fb69ea150b494aaa40robbiew * unmodified conversion specifier (1-1.c).
120dc076565f772bb1953209fb69ea150b494aaa40robbiew */
130dc076565f772bb1953209fb69ea150b494aaa40robbiew
140dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <stdio.h>
150dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <stdlib.h>
160dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <locale.h>
170dc076565f772bb1953209fb69ea150b494aaa40robbiew#include <langinfo.h>
182c28215423293e443469a07ae7011135d058b671Garrett Cooper#include <time.h>
190dc076565f772bb1953209fb69ea150b494aaa40robbiew#include "posixtest.h"
200dc076565f772bb1953209fb69ea150b494aaa40robbiew
214ca2bbdcd3003f3c8df4e6129e9c7b2bd1514f87Cyril Hrubisint main(void)
22354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao{
230dc076565f772bb1953209fb69ea150b494aaa40robbiew
24354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	/* current time */
25354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	time_t t = time(NULL);
26354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	struct tm *local_t = localtime(&t);
27fdc26181550464dd842e65286529a124aa4fab5eJan Stancek	char text[256];
28354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	int result;
290dc076565f772bb1953209fb69ea150b494aaa40robbiew
30354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	setlocale(LC_TIME, "");
31fdc26181550464dd842e65286529a124aa4fab5eJan Stancek	strftime(text, sizeof(text), nl_langinfo(D_T_FMT), local_t);
32354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("STRING IS:   %s\n\n", text);
330dc076565f772bb1953209fb69ea150b494aaa40robbiew
340dc076565f772bb1953209fb69ea150b494aaa40robbiew/* use format controls to print the various date/time components. */
350dc076565f772bb1953209fb69ea150b494aaa40robbiew
360dc076565f772bb1953209fb69ea150b494aaa40robbiew/*  This section has been commented for known bug in gcc:
37fdc26181550464dd842e65286529a124aa4fab5eJan Stancek *  result = strftime(text, sizeof(text), "%Ec", local_t);
380dc076565f772bb1953209fb69ea150b494aaa40robbiew *  printf("Ec   Bytes %i           %s	", result, text);
398fb1cdb0538640f295691929650408688537fb7fGarrett Cooper *  if (result != 31) {
400dc076565f772bb1953209fb69ea150b494aaa40robbiew *    puts("Test Failed: \%Ec doesn't equal at least 31 bytes");
410dc076565f772bb1953209fb69ea150b494aaa40robbiew *    return PTS_FAIL;
420dc076565f772bb1953209fb69ea150b494aaa40robbiew *   } else {
430dc076565f772bb1953209fb69ea150b494aaa40robbiew *    puts("PASS");
440dc076565f772bb1953209fb69ea150b494aaa40robbiew *   }
450dc076565f772bb1953209fb69ea150b494aaa40robbiew */
460dc076565f772bb1953209fb69ea150b494aaa40robbiew
47fdc26181550464dd842e65286529a124aa4fab5eJan Stancek	result = strftime(text, sizeof(text), "%EC", local_t);
48354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("EC   Bytes %i           %s	", result, text);
49354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (result != 2) {
50354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("Test Failed: \%EC doesn't equal to 2 bytes");
51354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return PTS_FAIL;
52354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
53354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("PASS");
54354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
550dc076565f772bb1953209fb69ea150b494aaa40robbiew
560dc076565f772bb1953209fb69ea150b494aaa40robbiew/*  This section has been commented for known bug in gcc:
57fdc26181550464dd842e65286529a124aa4fab5eJan Stancek *  result = strftime(text, sizeof(text) , "%Ex", local_t);
580dc076565f772bb1953209fb69ea150b494aaa40robbiew *  printf("Ex   Bytes %i           %s	", result, text);
598fb1cdb0538640f295691929650408688537fb7fGarrett Cooper *  if (result != 10) {
600dc076565f772bb1953209fb69ea150b494aaa40robbiew *    puts("Test Failed: \%Ex doesn't equal to 10 bytes");
610dc076565f772bb1953209fb69ea150b494aaa40robbiew *    return PTS_FAIL;
620dc076565f772bb1953209fb69ea150b494aaa40robbiew *   } else {
630dc076565f772bb1953209fb69ea150b494aaa40robbiew *    puts ("PASS");
640dc076565f772bb1953209fb69ea150b494aaa40robbiew *   }
650dc076565f772bb1953209fb69ea150b494aaa40robbiew */
660dc076565f772bb1953209fb69ea150b494aaa40robbiew
67fdc26181550464dd842e65286529a124aa4fab5eJan Stancek	result = strftime(text, sizeof(text), "%EX", local_t);
68354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("EX   Bytes %i           %s	", result, text);
69354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (result <= 3) {
70354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("Test Failed: \%EX doesn't equal to 3 bytes");
71354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return PTS_FAIL;
72354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
73354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("PASS");
74354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
750dc076565f772bb1953209fb69ea150b494aaa40robbiew
760dc076565f772bb1953209fb69ea150b494aaa40robbiew/*  This section has been commented for known bug in gcc:
77fdc26181550464dd842e65286529a124aa4fab5eJan Stancek *  result = strftime(text, sizeof(text), "%Ey", local_t);
780dc076565f772bb1953209fb69ea150b494aaa40robbiew *  printf("Ey   Bytes %i           %s	", result, text);
798fb1cdb0538640f295691929650408688537fb7fGarrett Cooper *  if (result != 2) {
800dc076565f772bb1953209fb69ea150b494aaa40robbiew *    puts("Test Failed: \%Ey doesn't equal at least 2 bytes");
810dc076565f772bb1953209fb69ea150b494aaa40robbiew *    return PTS_FAIL;
820dc076565f772bb1953209fb69ea150b494aaa40robbiew *   } else {
830dc076565f772bb1953209fb69ea150b494aaa40robbiew *    puts ("PASS");
840dc076565f772bb1953209fb69ea150b494aaa40robbiew *   }
850dc076565f772bb1953209fb69ea150b494aaa40robbiew */
860dc076565f772bb1953209fb69ea150b494aaa40robbiew
87fdc26181550464dd842e65286529a124aa4fab5eJan Stancek	result = strftime(text, sizeof(text), "%EY", local_t);
88354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("EY   Bytes %i           %s	", result, text);
89354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (result != 4) {
90354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("Test Failed: \%EY doesn't equal at least 4 bytes");
91354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return PTS_FAIL;
92354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
93354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("PASS");
94354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
95354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
96fdc26181550464dd842e65286529a124aa4fab5eJan Stancek	result = strftime(text, sizeof(text), "%Od", local_t);
97354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("Od   Bytes %i           %s	", result, text);
98354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (result != 2) {
99354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("Test Failed: \%Od doesn't equal at least 2 bytes");
100354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return PTS_FAIL;
101354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
102354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("PASS");
103354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
104354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
105fdc26181550464dd842e65286529a124aa4fab5eJan Stancek	result = strftime(text, sizeof(text), "%Oe", local_t);
106354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("Oe   Bytes %i           %s	", result, text);
107354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (result != 2) {
108354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("Test Failed: \%Oe doesn't equal at least 2 bytes");
109354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return PTS_FAIL;
110354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
111354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("PASS");
112354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
113354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
114fdc26181550464dd842e65286529a124aa4fab5eJan Stancek	result = strftime(text, sizeof(text), "%OH", local_t);
115354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("OH   Bytes %i           %s	", result, text);
116354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (result != 2) {
117354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("Test Failed: \%OH doesn't equal at least 2 bytes");
118354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return PTS_FAIL;
119354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
120354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("PASS");
121354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
122354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
123fdc26181550464dd842e65286529a124aa4fab5eJan Stancek	result = strftime(text, sizeof(text), "%OI", local_t);
124354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("OI   Bytes %i           %s	", result, text);
125354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (result != 2) {
126354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("Test Failed: \%OI doesn't equal at least 2 bytes");
127354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return PTS_FAIL;
128354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
129354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("PASS");
130354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
131354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
132fdc26181550464dd842e65286529a124aa4fab5eJan Stancek	result = strftime(text, sizeof(text), "%Om", local_t);
133354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("Om   Bytes %i           %s	", result, text);
134354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (result != 2) {
135354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("Test Failed: \%Om doesn't equal at least 2 bytes");
136354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return PTS_FAIL;
137354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
138354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("PASS");
139354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
140354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
141fdc26181550464dd842e65286529a124aa4fab5eJan Stancek	result = strftime(text, sizeof(text), "%OM", local_t);
142354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("OM   Bytes %i           %s	", result, text);
143354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (result != 2) {
144354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("Test Failed: \%OM doesn't equal at least 2 bytes");
145354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return PTS_FAIL;
146354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
147354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("PASS");
148354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
149354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
150fdc26181550464dd842e65286529a124aa4fab5eJan Stancek	result = strftime(text, sizeof(text), "%OS", local_t);
151354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("OS   Bytes %i           %s	", result, text);
152354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (result != 2) {
153354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("Test Failed: \%OS doesn't equal at least 2 bytes");
154354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return PTS_FAIL;
155354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
156354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("PASS");
157354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
158354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
159fdc26181550464dd842e65286529a124aa4fab5eJan Stancek	result = strftime(text, sizeof(text), "%Ou", local_t);
160354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("Ou   Bytes %i           %s	", result, text);
161354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (result != 1) {
162354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("Test Failed: \%Ou doesn't equal at least 1 bytes");
163354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return PTS_FAIL;
164354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
165354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("PASS");
166354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
167354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
168fdc26181550464dd842e65286529a124aa4fab5eJan Stancek	result = strftime(text, sizeof(text), "%OU", local_t);
169354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("OU   Bytes %i           %s	", result, text);
170354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (result != 2) {
171354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("Test Failed: \%OU doesn't equal at least 2 bytes");
172354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return PTS_FAIL;
173354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
174354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("PASS");
175354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
176354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
177fdc26181550464dd842e65286529a124aa4fab5eJan Stancek	result = strftime(text, sizeof(text), "%OV", local_t);
178354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("OV   Bytes %i           %s	", result, text);
179354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (result != 2) {
180354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("Test Failed: \%OV doesn't equal at least 2 bytes");
181354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return PTS_FAIL;
182354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
183354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("PASS");
184354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
185354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
186fdc26181550464dd842e65286529a124aa4fab5eJan Stancek	result = strftime(text, sizeof(text), "%Ow", local_t);
187354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("Ow   Bytes %i           %s	", result, text);
188354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (result != 1) {
189354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("Test Failed: \%Ow doesn't equal at least 1 bytes");
190354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return PTS_FAIL;
191354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
192354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("PASS");
193354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
194354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao
195fdc26181550464dd842e65286529a124aa4fab5eJan Stancek	result = strftime(text, sizeof(text), "%OW", local_t);
196354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("OW   Bytes %i           %s	", result, text);
197354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	if (result != 2) {
198354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("Test Failed: \%OW doesn't equal at least 2 bytes");
199354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		return PTS_FAIL;
200354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	} else {
201354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao		puts("PASS");
202354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	}
2030dc076565f772bb1953209fb69ea150b494aaa40robbiew
2040dc076565f772bb1953209fb69ea150b494aaa40robbiew/*  This section has been commented for known bug in gcc:
205fdc26181550464dd842e65286529a124aa4fab5eJan Stancek *  result = strftime(text, sizeof(text), "%Oy", local_t);
2060dc076565f772bb1953209fb69ea150b494aaa40robbiew *  printf("Oy   Bytes %i           %s	", result, text);
2078fb1cdb0538640f295691929650408688537fb7fGarrett Cooper *  if (result != 2) {
2080dc076565f772bb1953209fb69ea150b494aaa40robbiew *    puts("Test Failed: \%Oy doesn't equal at least 2 bytes");
2090dc076565f772bb1953209fb69ea150b494aaa40robbiew *    return PTS_FAIL;
2100dc076565f772bb1953209fb69ea150b494aaa40robbiew *   } else {
2110dc076565f772bb1953209fb69ea150b494aaa40robbiew *    puts ("PASS");
2120dc076565f772bb1953209fb69ea150b494aaa40robbiew *   }
2130dc076565f772bb1953209fb69ea150b494aaa40robbiew */
2140dc076565f772bb1953209fb69ea150b494aaa40robbiew
215354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	printf("\n");
2160dc076565f772bb1953209fb69ea150b494aaa40robbiew
217354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao	return PTS_PASS;
218ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman}
219