mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
2007-12-08 Ulrich Drepper <drepper@redhat.com> [BZ #5424] * stdio-common/vfprintf.c: Do not overflow when adding to done. * stdio-common/Makefile (tests): Add bug22. * stdio-common/bug22.c: New file. [BZ #5451] * time/getdate.c: Fix filling in default values. * time/bug-getdate1.c: New file. * time/Makefile: Add rules to build and run bug-getdate1. * iconvdata/ebcdic-is-friss.c: Use 8bit-gap instead of 8bit-generic. * iconvdata/ebcdic-es.c: Likewise. * iconvdata/ebcdic-es-a.c: Likewise. * iconvdata/ebcdic-uk.c: Likewise. * iconvdata/iso8859-16.c: Likewise. * iconvdata/viscii.c: Likewise. * iconvdata/iso8859-9e.c: Likewise. * iconvdata/Makefile: Adjust appropriately. [BZ #5428] * wcsmbs/wchar.h: Unconditionally undefine __need_mbstate and __need_wint_t. * iconvdata/gconv-modules: Likewise.
This commit is contained in:
146
time/bug-getdate1.c
Normal file
146
time/bug-getdate1.c
Normal file
@ -0,0 +1,146 @@
|
||||
/* BZ #5451 */
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
static char *templ_filename;
|
||||
|
||||
// Writes template given as parameter to file,
|
||||
// specified as the argument
|
||||
static void
|
||||
output_to_template_file (const char *str)
|
||||
{
|
||||
FILE *fd = fopen (templ_filename, "w");
|
||||
if (fd == NULL)
|
||||
{
|
||||
printf ("Can not open file for writing\n");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
fprintf (fd, "%s\n", str);
|
||||
fclose (fd);
|
||||
}
|
||||
|
||||
// Calls getdate() function with specified parameter,
|
||||
// specified as the argument, also checks the contents of
|
||||
// file with template and prints the result
|
||||
static int
|
||||
process_getdate_on (const char *str)
|
||||
{
|
||||
struct tm *res;
|
||||
char templ[1000];
|
||||
FILE *fd = fopen (templ_filename, "r");
|
||||
|
||||
if (fd == NULL)
|
||||
{
|
||||
printf ("Can not open file for reading\n");
|
||||
exit (1);
|
||||
}
|
||||
|
||||
if (fgets (templ, 1000, fd) == NULL)
|
||||
{
|
||||
printf ("Can not read file\n");
|
||||
exit (1);
|
||||
}
|
||||
fclose (fd);
|
||||
|
||||
res = getdate (str);
|
||||
if (res == NULL)
|
||||
{
|
||||
printf ("Failed on getdate(\"%s\"), template is: %s", str, templ);
|
||||
printf ("Error number: %d\n\n", getdate_err);
|
||||
return 1;
|
||||
}
|
||||
printf ("Success on getdate(\"%s\"), template is: %s\n", str, templ);
|
||||
printf ("Result is\n");
|
||||
printf ("Seconds: %d\n", res->tm_sec);
|
||||
printf ("Minutes: %d\n", res->tm_min);
|
||||
printf ("Hour: %d\n", res->tm_hour);
|
||||
printf ("Day of month: %d\n", res->tm_mday);
|
||||
printf ("Month of year: %d\n", res->tm_mon);
|
||||
printf ("Years since 1900: %d\n", res->tm_year);
|
||||
printf ("Day of week: %d\n", res->tm_wday);
|
||||
printf ("Day of year: %d\n", res->tm_yday);
|
||||
printf ("Daylight Savings flag: %d\n\n", res->tm_isdst);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
do_test (int argc, char *argv[])
|
||||
{
|
||||
|
||||
templ_filename = argv[1];
|
||||
|
||||
setenv ("DATEMSK", templ_filename, 1);
|
||||
|
||||
/*
|
||||
* The following 4 testcases reproduce the problem:
|
||||
* 1. Templates "%S" and "%M" are not processed,
|
||||
* when used without "%H" template
|
||||
*/
|
||||
int res = 0;
|
||||
output_to_template_file ("%M");
|
||||
res |= process_getdate_on ("1");
|
||||
|
||||
output_to_template_file ("%M %H");
|
||||
res |= process_getdate_on ("1 2");
|
||||
|
||||
output_to_template_file ("%S");
|
||||
res |= process_getdate_on ("1");
|
||||
|
||||
output_to_template_file ("%S %H");
|
||||
res |= process_getdate_on ("1 2");
|
||||
|
||||
/*
|
||||
* The following 9 testcases reproduce the problem:
|
||||
* 2. Templates "%Y", "%y", "%d", "%C", "%C %y"
|
||||
* are not processed separately
|
||||
*/
|
||||
output_to_template_file ("%Y");
|
||||
process_getdate_on ("2001");
|
||||
|
||||
output_to_template_file ("%Y %m");
|
||||
res |= process_getdate_on ("2001 3");
|
||||
|
||||
output_to_template_file ("%y");
|
||||
res |= process_getdate_on ("70");
|
||||
|
||||
output_to_template_file ("%y %m");
|
||||
res |= process_getdate_on ("70 3");
|
||||
|
||||
output_to_template_file ("%d");
|
||||
res |= process_getdate_on ("06");
|
||||
|
||||
output_to_template_file ("%d %m");
|
||||
res |= process_getdate_on ("25 3");
|
||||
|
||||
output_to_template_file ("%C");
|
||||
res |= process_getdate_on ("98");
|
||||
|
||||
output_to_template_file ("%C %y %m");
|
||||
res |= process_getdate_on ("98 3 2");
|
||||
|
||||
output_to_template_file ("%C %y");
|
||||
res |= process_getdate_on ("21 5");
|
||||
|
||||
/*
|
||||
* The following testcase reproduces the problem:
|
||||
* 3. When template is "%Y %m", day of month is not set
|
||||
* to 1 as standard requires
|
||||
*/
|
||||
output_to_template_file ("%Y %m");
|
||||
res |= process_getdate_on ("2008 3");
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
#define PREPARE(argc, argv) \
|
||||
if (argc < 2) \
|
||||
{ \
|
||||
puts ("Command line: progname template_filename_full_path"); \
|
||||
exit (1); \
|
||||
} \
|
||||
add_temp_file (argv[1])
|
||||
|
||||
#define TEST_FUNCTION do_test (argc, argv)
|
||||
#include "../test-skeleton.c"
|
Reference in New Issue
Block a user