OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk/rtos/ecos-2.0/packages/language/c/libc/time
    from Rev 27 to Rev 174
    Reverse comparison

Rev 27 → Rev 174

/v2_0/ChangeLog.libc
0,0 → 1,2736
This ChangeLog file is now obsolete. This is the original ChangeLog from when
libc was one large package, before being separated. It is included for
historical reasons.
 
2000-04-05 Jesper Skov <jskov@redhat.com>
 
* src/time/settime.cxx:
* src/time/time.cxx:
Wallclock moved to io/.
2000-03-28 John Dallaway <jld@cygnus.co.uk>
 
* cdl/string.cdl,
cdl/stdlib.cdl,
cdl/stdio.cdl,
cdl/libc.cdl:
 
Adjust documentation URLs.
 
2000-03-27 Jesper Skov <jskov@redhat.com>
 
* src/clibincl/stream.inl (check_this): Use cyb_bool instead of bool.
 
2000-03-06 Jesper Skov <jskov@redhat.com>
 
* tests/time/strftime.c (test): Adjust test to match below change.
 
2000-03-02 Jonathan Larmour <jlarmour@redhat.co.uk>
 
* src/time/strftime.cxx (do_format): Make sure %m counts from
1..12 rather than 0..11. Fix for case 103300
 
2000-02-29 Jonathan Larmour <jlarmour@redhat.co.uk>
 
* src/stdio/output/vfnprintf.cxx: Correctly use 'n' parameter to
restrict length. Credit due to Andrew Lunn here as well.
Resolves 103057-CR-1
 
* tests/stdio/sprintf2.c (test):
Add snprintf tests to verify the correct behaviour of restricting
output length
 
2000-02-10 Jesper Skov <jskov@redhat.com>
 
* tests/signal/signal2.c (main):
Also reclaim DATA_TLB_MISS vector if available.
 
2000-01-31 Simon FitzMaurice <sdf@cygnus.co.uk>
* cdl/*.cdl:
 
Adjust help URLs in line with new doc layout.
2000-01-28 Simon FitzMaurice <sdf@cygnus.co.uk>
* cdl/*.cdl:
 
Adjust help URLs in line with new doc layout.
2000-01-19 Hugo Tyson <hmt@cygnus.co.uk>
 
* cdl/*.cdl: Add descriptions to a number of options &c which were
lacking same, also tidied up other typos as noticed en passant.
 
1999-11-11 Bart Veer <bartv@cygnus.co.uk>
 
* cdl/string.cdl:
Switch to a single boolean configuration option for code size vs.
speed optimization.
 
1999-11-03 John Dallaway <jld@cygnus.co.uk>
 
* cdl/libc.cdl: Define tests.
 
1999-10-19 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/output/vfnprintf.cxx: We can now remove Berkeley
advertising clause
* src/stdlib/div.cxx: ditto
* src/stdlib/ldiv.cxx: ditto
* src/stdlib/strtol.cxx: ditto
* src/stdlib/strtoul.cxx: ditto
* src/string/strtok.cxx: ditto
 
1999-10-19 John Dallaway <jld@cygnus.co.uk>
 
* cdl/libc.cdl:
 
Define CDL options for package-specific CFLAGS.
 
1999-10-08 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h (CYGNUM_LIBC_MAIN_THREAD_PRIORITY): Change
default to 10 to keep test farm happy
* cdl/startup.cdl: Likewise
 
1999-10-07 John Dallaway <jld@cygnus.co.uk>
 
* cdl/stdlib.cdl, cdl/string.cdl:
 
Specify radio buttons using CDL interfaces.
 
1999-10-06 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* cdl/stdio.cdl: Change default to /dev/ttydiag as per 1999-10-01
change below
* cdl/startup.cdl: Add new form CDL for the startup changes as
per 1999-10-05
 
1999-10-05 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/libc.h: Add CYGSEM_LIBC_MAIN_STACK_FROM_SYSTEM to allow
the user to supply their own stack.
Rename CYGNUM_LIBC_MAIN_STACK_SIZE to
CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE and reparent under
CYGSEM_LIBC_MAIN_STACK_FROM_SYSTEM
Add CYGNUM_LIBC_MAIN_THREAD_PRIORITY to provide main() thread
priority
* src/support/mainthread.cxx: Add support for user-supplied stack
Allow user to specify thread priority
 
These changes fix CR 101069
 
1999-10-01 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h (CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE): Change
default to /dev/ttydiag to get correct console-like behaviour
Also don't preclude use if haldiag package isn't included
(case 102065)
 
1999-09-15 Jesper Skov <jskov@cygnus.co.uk>
 
* tests/signal/signal2.c (cause_fpe): Try both float and integer
division by zero.
 
1999-09-10 Jesper Skov <jskov@cygnus.co.uk>
 
* src/stdlib/malloc.cxx (cyg_libc_get_malloc_pool): Added for
stress_threads test.
 
1999-09-07 Jesper Skov <jskov@cygnus.co.uk>
PRs 20243, 20433
* tests/signal/signal2.c: Disabled test3 on ARM.
 
1999-09-02 Hugo Tyson <hmt@cygnus.co.uk>
 
* include/assert.h: Make the sense of NDEBUG correct; it is "set"
when NOT debugging. Fix for CR 101983-CR-1
See Stroustrup, "The C++ Programming Language."
 
1999-08-18 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/common/fopen.cxx (_fopen): Set buffer size 0 when not
buffering
Fix for case 101868
 
1999-08-17 John Dallaway <jld@cygnus.co.uk>
 
* cdl/stdlib.cdl, cdl/string.cdl:
 
Implement radio buttons using "FIXME radio" hack in
description field for now.
 
1999-08-12 John Dallaway <jld@cygnus.co.uk>
 
* cdl/stdlib.cdl:
Take advantage of MACRONAME_ENUMVAL macros output by CDL.
 
1999-08-06 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdio/sprintf2.c (test): Don't rely on 2.345 being exactly
representable in binary as a difference of 1 ulp will make it round
the wrong way.
 
1999-07-16 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/input/fgetc.cxx:
Include outline versions of getc() (actually just a symbol alias for
fgetc() ) and getchar()
Some minor clean-ups
Add tracing/assertions
 
* src/stdio/input/fputc.cxx:
Likewise (except applied to putc() and putchar())
 
* src/stdio/common/stdioinlines.cxx (_puts):
Call fputc() not _fputc()
 
* src/clibincl/stdiosupp.hxx:
Remove now obsolete prototypes for _fgetc() and _fputc()
 
* include/stdio.h:
Don't bother with getc()/putc() macros any more, just call
them as functions
Include protos for getc(), putc(), getchar() and putchar() functions
 
1999-06-21 Jesper Skov <jskov@cygnus.co.uk>
 
* tests/signal/signal2.c: Disabled test 3 for SH EDK7708.
 
1999-06-11 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/stdio.h: Make FILEs array types so they won't be
given $gp relocations on MIPS targets
 
1999-05-27 Jesper Skov <jskov@cygnus.co.uk>
 
* tests/time/ctime.c: Fixed compiler warning.
 
1999-05-25 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/signal/signal2.c (main):
Update CYGPKG_HAL_TX39 -> CYGPKG_HAL_MIPS_TX39 due to recent MIPS
HAL changes
Fix for PR 20116
 
1999-04-30 Jesper Skov <jskov@lassi.cygnus.co.uk>
PR 19945/19946 workaround
* tests/signal/signal2.c: Disabled test 3 for PowerPC sim.
 
1999-04-19 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/time.inl:
Ensure all calls to cyg_libc_time_year_is_leap() are with the full
year, and not the direct contents of a struct tm, which are (year-1900)
 
1999-04-19 Jesper Skov <jskov@cygnus.co.uk>
PR 19308, 19410, 19528
* tests/time/clock.c (test): Also disable data cache which may
affect timing when tracing/assertions are enabled.
 
1999-04-15 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/clibincl/stdiosupp.hxx:
Add prototype for new cyg_libc_stdio_flush_all_but() function
 
* src/clibincl/stream.hxx:
Don't include stdiosupp.hxx any more to prevent circular dependency,
therefore manually provide _setvbuf prototype
Make sure pkgconf/kernel.h is included before mutex.hxx
 
* src/clibincl/stream.inl (Cyg_StdioStream::set_error()):
Add missing unlock_me()
 
* src/stdio/common/fflush.cxx:
Separate most of code for fflush(NULL) into separate
cyg_libc_stdio_flush_all_but() function, which has the extra
capability of omitting one stream
 
* src/stdio/common/stderr.cxx:
* src/stdio/common/stdin.cxx:
* src/stdio/common/stdout.cxx:
* src/stdio/common/vsnprintf.cxx:
* src/stdio/common/vsscanf.cxx:
Add missing clibincl/stdiosupp.hxx include
 
* src/stdio/common/stream.cxx (Cyg_StdioStream::read()):
When reading, ensure we flush all output streams
 
* src/stdio/common/stream.cxx (Cyg_StdioStream::flush_output_unlocked):
Flush the device as well
 
1999-04-15 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/common/streambuf.cxx (set_buffer):
* src/stdio/common/stdioinlines.cxx (_setbuf):
* src/clibincl/streambuf.inl:
* src/clibincl/streambuf.hxx:
* src/clibincl/stream.hxx (class Cyg_StdioStream):
* include/pkgconf/libc.h:
* include/stdio.inl (setbuf):
Fix dumb typo: BUFSIZE -> BUFSIZ
This fixes PR19837
 
1999-04-15 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/common/stdioinlines.cxx (_setbuf):
* include/stdio.inl (setbuf):
Use _IONBF when buf==NULL, and _IOLBF otherwise.
Fix for PR 19836
 
1999-04-15 John Dallaway <jld@cygnus.co.uk>
 
* include/pkgconf/libc.h: Tidy display string capitalization.
 
1999-04-12 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Clarify CDL description of CYGNUM_LIBC_MALLOC_MEMPOOL_SIZE
 
* tests/signal/signal2.c: Try harder to generate an exception by
accessing a misaligned address
Don't handle SIGTRAP any more
Part of fix for PRs 19731/19607
 
1999-04-07 Jesper Skov <jskov@cygnus.co.uk>
PR 19667
* src/support/mainthread.cxx:
Changed to use the new Cyg_Thread constructor.
 
1999-04-07 Hugo Tyson <hmt@cygnus.co.uk>
 
* tests/signal/signal2.c (main): Use new macro
HAL_VSR_SET_TO_ECOS_HANDLER if defined, to wrest control from
CygMon, for example, by reinstalling eCos' default VSRs for
exceptions that we are provoking.
 
1999-03-29 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/signal/siginit.cxx: Include stdlib.h for exit()
Fix for PR 19720
 
1999-03-29 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/time/clock.c (test): Disable instruction cache
Hopefully fixes PR 19308
 
1999-03-29 Jesper Skov <jskov@cygnus.co.uk>
 
* tests/signal/signal2.c: Disabled test 3 for PPC as it cannot
trap division by zero.
 
1999-03-26 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/support/main.cxx (main): Invoke cyg_user_start() if no kernel
Only sensible thing to do in our default main in a non-kernel config
 
1999-03-25 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/time/time.c:
Increase MAX_TIMEOUT since the sparclite gets very close to overrunning
it even when working.
Should return -1 iff CYGSEM_LIBC_TIME_TIME_WORKING isn't defined
Cosmetic changes
 
1999-03-25 Hugo Tyson <hmt@cygnus.co.uk>
 
* tests/time/time.c (test): Take into account setting of
CYGSEM_LIBC_TIME_SETTIME_WORKING ie. does cyg_libc_time_settime()
work? If not, check that it returns an error.
This was exposed by the random combo in PR#19479.
 
1999-03-23 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Rename CYGSEM_LIBC_RAND_SIMPLEST and CYGSEM_LIBC_RAND_KNUTH1 to
CYGIMP_...
 
Add another rand implementation CYGIMP_LIBC_RAND_SIMPLE1 which is
the default
 
Part of fix for PR 19562
 
* include/sys/cstartup.h:
Tidy and remove unnecessary dependencies
 
* src/stdlib/rand.cxx:
Rename algorithms from CYGSEM_... to CYGIMP_...
Add new "simple1" algorithm
 
* tests/ctype/ctype.c:
Tidy
 
* tests/stdlib/rand3.c:
Fix so that 0..RAND_MAX is split evenly over buckets, which it wasn't
before
Deal with case of RAND_MAX not being divisible by NUM_BUCKETS
exactly
Increase TEST_LENGTH to 200000 to provide more representative sample
Add CYG_TEST_INFO output to help ensure it doesn't time out
Tidy
 
* tests/stdlib/rand4.c:
Only fail if more than _two_ thirds (rather than one third) match.
This is because half would match for a perfectly random distribution
This is the rest of the fix for PR 19562
Cosmetic changes
 
1999-03-22 Hugo Tyson <hmt@cygnus.co.uk>
 
* src/support/mainthread.cxx (CYGNUM_LIBC_MAIN_STACK_SIZE):
Use CYGNUM_HAL_STACK_SIZE_TYPICAL for the stack size instead of
CYGNUM_HAL_MINIMUM_STACK_SIZE.
 
1999-03-22 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/PKGconf.mak: Add -Wno-format when building strftime otherwise
it generates warnings for things that we do want to test (null
string, and %y format)
 
1999-03-19 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h (CYGNUM_LIBC_TIME_DST_DEFAULT_STATE):
Put brackets back round negative number since sdf says the config
tool is fixed now (PR 19537)
 
Add new CYGSEM_LIBC_RAND_SIMPLEST and CYGSEM_LIBC_RAND_KNUTH1
options for different rand() algorithms in a so far failed attempt
to fix PR 19562
 
* src/stdlib/rand.cxx:
Add new optional algorithm from Knuth vol.2
 
* tests/stdlib/rand4.c:
Some tidies
Don't run test when using simplest algorithm
 
* tests/signal/signal2.c (main):
Don't try to make an FPE on tx39 - its possible to detect but requires
too much HAL work to be sensible
 
1999-03-18 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/signal/siginit.cxx (cyg_libc_signals_hwexcept_handler):
Use HAL_ENABLE_INTERRUPTS() rather than kernel to enable interrupts
 
1999-03-18 Mark Galassi <rosalia@cygnus.com>
 
* tests/PKGconf.mak (TESTS): added rand4 compilation.
 
* tests/stdlib/rand4.c: added this test for periodicity in the
least significant bit of rand().
 
1999-03-18 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h: Remove CYGFUN_LIBC_TIME_POSIX dependency
on CYGPKG_LIBC_STDIO
 
* src/stdlib/itoa.cxx:
New file to convert integers to ascii
 
* include/stdlib.h:
Add proto for new cyg_libc_itoa() function
 
* include/time.inl:
Rework __asctime_r() to use memcpy() and cyg_libc_itoa() rather than
sprintf()
 
* src/PKGconf.mak:
Build stdlib/itoa.cxx
 
The above changes fix PR 19448
 
1999-03-17 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/time.h: Add #define of __time_t_defined to placate newlib
if it is used by accident. This is just a temporary workaround though.
 
1999-03-16 Gary Thomas <gthomas@cygnus.co.uk>
 
* src/PKGconf.mak: Add compile option to step around ARM compiler bug.
 
1999-03-16 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h (CYGNUM_LIBC_TIME_DST_DEFAULT_STATE):
Don't use parentheses for now
 
* src/stdio/common/stream.cxx (refill_read_buffer):
Silence bogus compiler warning
 
1999-03-16 Jesper Skov <jskov@cygnus.co.uk>
 
* tests/signal/signal2.c (main): Enable SIGSEGV test for
i386/Linux.
 
 
1999-03-15 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/signal/siginit.cxx (cyg_libc_signals_hwexcept_handler):
Only enable interrupts if they were disabled
 
* include/sys/timeutil.h:
* src/time/timeutil.cxx:
Add FIX ME line as a reminder that the workaround there can go away
in future
 
* include/pkgconf/libc.h:
Add proper define for CYGSEM_LIBC_EXIT_CALLS_FFLUSH
Put brackets round negative CYGNUM_LIBC_TIME_DST_DEFAULT_STATE define
Fix run time typo
* include/time.inl (__localtime_r):
Include sys/timeutil.h before this to get
cyg_libc_time_normalize_structtm()
 
1999-03-12 Gary Thomas <gthomas@cygnus.co.uk>
 
* include/sys/timeutil.h:
* src/time/timeutil.cxx: Remove 'const' from char arrays since
this fails [silently] on ARM when -fwritable-strings (PR19440)
 
1999-03-12 Jesper Skov <jskov@cygnus.co.uk>
 
* tests/signal/signal2.c (main): Compiler warnings fix was
slightly broken.
 
1999-03-12 Jesper Skov <jskov@cygnus.co.uk>
PR 19473
* tests/signal/signal2.c (main):
Disabling SIGTRAP handling on i386/Linux is not a good idea.
1999-03-11 Jesper Skov <jskov@cygnus.co.uk>
PR 19473
* tests/signal/signal2.c:
Added compiler warnings fix.
Added N/A handling for i386/Linux.
 
1999-03-10 Gary Thomas <gthomas@cygnus.co.uk>
 
* include/pkgconf/libc.h: Force "haldiag" device to be present.
'asctime' and friends need 'stdio' as well.
 
* include/time.inl: Fix syntax error on difftime() declaration.
 
1999-03-08 Gary Thomas <gthomas@cygnus.co.uk>
 
* src/clibincl/stream.hxx: <cyg/infra/cyg_ass.h> needed for this file.
 
* src/stdio/common/vsscanf.cxx (str_read): Fix problem with string
pointer [created by merge with new I/O package].
 
1999-03-05 John Dallaway <jld@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Add legal values for CYGNUM_LIBC_TIME_STD_DEFAULT_OFFSET
and CYGNUM_LIBC_TIME_DST_DEFAULT_OFFSET.
 
1999-03-05 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/time.inl (cyg_libc_time_year_is_leap):
Fix bug with modulo year 400
Fix typo in asctime_r macro
Fix gmtime_r, and mktime as a result of testing
 
* tests/time/asctime.c, tests/time/ctime.c, tests/time/gmtime.c,
tests/time/gmtime.c, tests/time/localtime.c, tests/time/mktime.c,
tests/time/strftime.c, tests/time/time.c:
New tests
 
* tests/PKGconf.mak:
Build above new tests
 
* include/pkgconf/libc.h:
Add reminder FIX ME about extra config option
 
* src/time/strftime.cxx:
Fix %w and %Y parameters as a result of testing
 
* src/time/timeutil.cxx:
Fix cyg_libc_time_normalize_structtm() as a result of testing
of mktime()
 
* tests/time/clock.c:
Reformat, remove obsolete bits and tidy
 
* include/time.h:
Add Cyg_libc_time_dst type and new functions
cyg_libc_time_setzoneoffsets(), cyg_libc_time_setdst(),
cyg_libc_time_getzoneoffsets(), cyg_libc_time_settime()
 
* include/time.inl:
Implement the above functions. This allows us to adjust for timezone
diffences and set the time.
Change localtime() to adjust for STD/DST
Change mktime() to adjust for STD/DST
 
* include/libc.h:
Add new config options CYGSEM_LIBC_TIME_SETTIME_WORKING
and component CYGPKG_LIBC_TIME_ZONES containing options
CYGNUM_LIBC_TIME_DST_DEFAULT_STATE,
CYGNUM_LIBC_TIME_STD_DEFAULT_OFFSET,
CYGNUM_LIBC_TIME_DST_DEFAULT_OFFSET
 
* src/strftime.cxx:
Adjust handling of %Z to _not_ deal with STD/DST
 
* src/time/settime.cxx:
New file to implement cyg_libc_time_settime()
 
* src/PKGconf.mak:
Build settime.cxx
 
* src/time/timeutil.cxx:
Supply outline versions of cyg_libc_time_setzoneoffsets(),
cyg_libc_time_setdst(), and cyg_libc_time_getzoneoffsets()
Add variables for STD/DST state
Some minor comment changes
 
* include/errno.h:
Use CYGBLD_ATTRIB_CONST instead of __attribute__((const)) directly
 
* include/signal.h:
Change format of function comment headers
 
* include/signal.inl:
Restrict errno.h inclusion to when its actually used
Fix a spelling typo
 
* include/stdlib.h:
Add CYGBLD_ATTRIB_CONST to abs, div, labs, ldiv
 
* include/stdlib.inl:
Reformat and tidy
Include new versions of div and ldiv which are more portable and
are cleanly rewritten so aren't covered by the BSD licence, which
is now removed
 
* src/stdlib/div.cxx, src/stdlib/ldiv.cxx:
Non-inline, non-BSD and portable versions of the new versions of div
and ldiv from stdlib.inl
* include/time.h:
Much reformatting, tidying and improving comments
Change CLOCKS_PER_SEC from 1000 to 1000000
Add new functions asctime_r, ctime_r, gmtime_r, localtime_r, clock,
difftime, mktime, time, asctime, ctime, gmtime, localtime, strftime
Include new time.inl file
 
* include/pkgconf/libc.h:
Add new options CYGSEM_LIBC_TIME_CLOCK_WORKING,
CYGSEM_LIBC_TIME_TIME_WORKING, CYGFUN_LIBC_TIME_POSIX,
CYGNUM_LIBC_TIME_CLOCK_TRACE_LEVEL, CYGIMP_LIBC_TIME_ASCTIME_INLINE,
CYGIMP_LIBC_TIME_CTIME_INLINE, CYGIMP_LIBC_TIME_DIFFTIME_INLINE,
CYGIMP_LIBC_TIME_GMTIME_INLINE, CYGIMP_LIBC_TIME_LOCALTIME_INLINE,
CYGIMP_LIBC_TIME_MKTIME_INLINE, CYGIMP_LIBC_TIME_ASCTIME_R_INLINE,
CYGIMP_LIBC_TIME_CTIME_R_INLINE, CYGIMP_LIBC_TIME_GMTIME_R_INLINE,
and CYGIMP_LIBC_TIME_LOCALTIME_R_INLINE
 
* time/asctime.cxx, time/asctime_r.cxx, time/clock.cxx, time/ctime.cxx,
time/ctime_r.cxx, time/difftime.cxx, time/gmtime.cxx,
time/gmtime_r.cxx, time/localtime.cxx, time/localtime_r.cxx,
time/mktime.cxx, time/strftime.cxx, time/time.cxx, time/timeutil.cxx,
include/time.inl:
New files to implement the new time functions. Many of them simply
provide the outline definitions, but the real body of the function
comes from time.inl
 
* src/PKGconf.mak:
Build new .cxx files
 
* src/clibincl/stdlibsupp.hxx:
Remove _div and _ldiv prototypes since they're no longer needed
 
* src/clibincl/timesupp.hxx:
Delete as its now obsolete
 
* src/time/clock.cxx:
Use new CYGSEM_LIBC_TIME_CLOCK_WORKING option to control whether it
just returns (clock_t)-1 or not.
Much reformatting and tidying
Change real imlpementation from _clock to __clock
Use CYGBLD_ATTRIB_WEAK_ALIAS now
 
* tests/stdlib/div.c, tests/stdlib/ldiv.c:
Add some extra tests for handling of negative numbers
Reformat and tidy a bit, including removing the test for CYGPKG_LIBC
since its now always defined if the test is to be compiled
 
* tests/time/clock.c:
Remove duplication CYG_TEST_INFO line
Check if unimplemented using "(clock_t)-1" and not just "-1"
 
1999-03-04 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdlib/system.cxx:
Make sure system() is a weak alias for __system()
 
* include/pkgconf/libc.h: Rework CDL description for
CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE and change its default to
"/dev/haldiag"
 
* src/stdio/common/stream.cxx:
Check that dev is valid when passed to stream constructor
 
* src/stdio/common/stdiosupp.cxx:
Tidy
 
* src/support/mainthread.cxx: Make this depend on
CYGSEM_LIBC_STARTUP_MAIN_THREAD rather than just CYGPKG_KERNEL
 
1999-03-04 Gary Thomas <gthomas@cygnus.co.uk>
 
Merged in changes from 'ecos-new_devs-19990216-branch'
(1999-02-24 Jonathan Larmour <jlarmour@cygnus.co.uk>)
 
* src/stdio/common/stream.cxx:
Add "fix me" comments and remove a couple of commented out lines
 
* src/stdio/common/vsnprintf.cxx:
* src/stdio/common/vsscanf.cxx:
Revert to using pointer to string for private data, not just string.
This preserves the state across multiple calls
 
(1999-02-24 Gary Thomas <gthomas@cygnus.co.uk>)
 
* src/stdio/common/vsscanf.cxx:
* src/stdio/common/vsnprintf.cxx:
* src/stdio/common/stream.cxx:
* src/stdio/common/stdiosupp.cxx:
* src/stdio/common/fopen.cxx:
* src/clibincl/stream.inl:
* src/clibincl/stream.hxx:
* src/clibincl/stdiosupp.hxx:
* include/pkgconf/libc.h: Changes for new I/O system.
 
1999-03-03 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdlib/atexit.c: Forgot to config atexit test for
CYGFUN_LIBC_ATEXIT option
 
* include/pkgconf/libc.h:
Require CYGVAR_KERNEL_THREADS_DATA for CYGSEM_LIBC_PER_THREAD_STRTOK
This fixes PR 19362
Require CYGPKG_KERNEL for thread safe streams
Also don't need "requires CYGPKG_KERNEL" for per-thread rand and errno
if we already require a finer granularity kernel option
 
1999-02-25 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h: Fix CYGNUM_LIBC_MAIN_STACK_SIZE by changing
CYGPKG_LIBC_STARTUP_MAIN_THREAD -> CYGSEM_LIBC_STARTUP_MAIN_THREAD
Fix for PR 19304
 
1999-02-23 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdlib/system.cxx: Add to implement trivial system() call
* include/stdlib.h: Add system() prototype
* src/PKGconf.mak: Build system.cxx
 
* tests/ctype/ctype.c, tests/i18n/setlocale.c, tests/setjmp/setjmp.c,
tests/signal/signal1.c, tests/signal/signal2.c,
tests/stdio/sprintf1.c, tests/stdio/sprintf2.c, tests/stdio/sscanf.c,
tests/stdio/stdiooutput.c, tests/stdlib/atexit.c,
tests/stdlib/atoi.c, tests/stdlib/atol.c, tests/stdlib/bsearch.c,
tests/stdlib/div.c, tests/stdlib/getenv.c, tests/stdlib/labs.c,
tests/stdlib/ldiv.c, tests/stdlib/malloc1.c, tests/stdlib/malloc2.c,
tests/stdlib/malloc3.c, tests/stdlib/qsort.c, tests/stdlib/rand1.c,
tests/stdlib/rand2.c, tests/stdlib/rand3.c, tests/stdlib/realloc.c,
tests/stdlib/srand.c, tests/stdlib/strtol.c, tests/stdlib/strtoul.c,
tests/string/memchr.c, tests/string/memcmp1.c,
tests/string/memcmp2.c, tests/string/memcpy1.c,
tests/string/memcpy2.c, tests/string/memmove1.c,
tests/string/memmove2.c, tests/string/memset.c,
tests/string/strcat1.c, tests/string/strcat2.c,
tests/string/strchr.c, tests/string/strcmp1.c,
tests/string/strcmp2.c, tests/string/strcoll1.c,
tests/string/strcpy1.c, tests/string/strcpy2.c,
tests/string/strcspn.c, tests/string/strlen.c,
tests/string/strncat1.c, tests/string/strncat2.c,
tests/string/strncpy1.c, tests/string/strncpy2.c,
tests/string/strpbrk.c, tests/string/strrchr.c,
tests/string/strspn.c, tests/string/strstr.c, tests/string/strtok.c,
tests/string/strxfrm1.c, tests/string/strxfrm2.c, tests/time/clock.c:
Use CYG_TEST_NA() macro for non-applicable test configurations
 
1999-02-20 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/signal.h:
* include/signal.inl:
* src/signal/raise.cxx:
* src/signal/siginit.cxx:
* src/signal/signal.cxx:
* tests/signal/signal1.c
* tests/signal/signal2.c:
New files to implement ISO standard signals
 
* src/PKGconf.mak (TESTS):
* tests/PKGconf.mak (TESTS):
Update to build new files above
* include/stdlib.h:
* src/clibincl/stdlibsupp.hxx:
Comment and QA changes (including giving better names to some types)
 
* include/libc.h:
Add new configuration options for signals
Add new CYGSEM_LIBC_STARTUP_MAIN_THREAD option
Add a note to CYGNUM_LIBC_MAIN_STACK_SIZE option that it may be
overriden by HAL
Add new CYGFUN_LIBC_ATEXIT option and move ...ATEXIT_HANDLERS under
it
Add new CYGSEM_LIBC_EXIT_CALLS_FFLUSH option
Require CYGSEM_LIBC_STARTUP_MAIN_THREAD for "Invoke default static
constructors" option
 
* src/stdlib/atexit.cxx:
Support above CYGFUN_LIBC_ATEXIT and QA changes
 
* src/stdlib/exit.cxx:
Support for above new libc.h options, and some QA changes
 
* src/support/cstartup.cxx:
Add support for new CYGSEM_LIBC_STARTUP_MAIN_THREAD option
 
* src/support/mainthread.cxx:
Override main stack size if the HAL has a minimum
 
* src/string/strncpy.cxx:
Use improved algorithm for aligned copies - imported from newlib
QA changes
 
* src/stdlib/abort.cxx:
Support raise(SIGABRT), and some QA
* include/errno.h:
Add const attribute
 
* tests/stdlib/abs.c:
QA improvements
 
1999-02-04 Jesper Skov <jskov@cygnus.co.uk>
 
* src/support/cstartup.cxx: Only define cyg_libc_main_thread when
the kernel is around.
 
1999-02-01 Jesper Skov <jskov@cygnus.co.uk>
 
* tests/time/clock.c: Joined the two test/NOP checks into
one.
Increased tolerance in attempt to fix PRs 18737,18787,18846.
Fixed typo.
 
1999-01-28 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/string/strtok.cxx:
* src/stdlib/rand.cxx:
Include <pkgconf/kernel.h> if we use kernel header files
 
1999-01-25 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdio/sscanf.c (test):
CYGSEM_LIBC_STDIO_PRINTF_FLOATING_POINT should be
CYGSEM_LIBC_STDIO_SCANF_FLOATING_POINT
Fix for PR 18786
 
* src/string/strtok.cxx:
* src/stdio/common/stdiofiles.cxx:
* src/errno/errno.cxx:
* src/stdlib/rand.cxx:
Give mutex protection objects a libc constructor priority
 
* src/support/invokemain.cxx:
Add prototype for cyg_hal_invoke_constructors()
 
* src/support/mainthread.cxx:
Give cyg_libc_dummy_constructor_obj a libc constructor priority,
and make its class have a public constructor
 
* src/stdio/common/stderr.cxx:
* src/stdio/common/stdout.cxx:
* src/stdio/common/stdin.cxx:
Give cyg_libc_stdio_stdin/out/err static objects a libc constructor
priority
* src/clibincl/streambuf.hxx (class Cyg_StdioStreamBuffer):
* src/clibincl/stream.hxx (class Cyg_StdioStream):
Remove private copy constructor. Needed to make prioritised
static constructors work. Fix for PR 18898
 
1999-01-22 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/errno/errno.cxx:
Include pkgconf/kernel.h otherwise it fails with per-thread errno
enabled
 
* include/pkgconf/libc.h:
Enable per-thread errno by default since that is what POSIX would
want
 
* tests/time/clock.c (test):
Placate compiler by initializing clock_first/second/third anyway,
even though they won't be in practice. This is only a test program
so adding an extra instruction doesn't matter.
 
* src/i18n/locale.cxx (_setlocale):
Placate compiler, since it is dumb, by nesting, not serializing, if's
This is an idempotent change, but screws up the formatting :-(.
 
* src/string/strpbrk.cxx (_strpbrk):
Change while loop to do loop to placate compiler. It'll even save an
instruction too (wow!)
1999-01-22 John Dallaway <jld@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Add closing curly brace to CYGPKG_LIBC_STRING_STRTOK definition
 
1999-01-21 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/errno.h:
Tidy up and add to header description
Change cyg_get_errno_p() to cyg_libc_get_errno_p()
Remove ifdef CYGPKG_LIBC
 
* include/sys/file_if.h:
Remove - move contents to stdio.h
 
* include/stdio.h:
Tidy up header description
Move FILE typedef here from sys/file_if.h
SEEK_SET, SEEK_CUR, SEEK_END defined to 0, 1, 2 respectively
for backwards compatibility with old UNIX
Change definitions of stdin/out/err to be addresses of FILE
globals - even though they're actually Cyg_StdioStream it'll work
 
* include/pkgconf/libc.h:
Make CYGPRI_LIBC_WEAK et al macros depend on new ones in infra
Reorganise trace options under the individual components they are
associated with.
Reorganise thread-safety options under the individual components
they are associated with.
Add new CYGSEM_LIBC_INVOKE_DEFAULT_STATIC_CONSTRUCTORS option
Misc. reformatting
Remove dependency on pkgconf/kernel.h - Configuration Tool will
generate check macros anyway.
Remove CYGPKG_LIBC_TRACE, CYGFUN_LIBC_strtok, CYGPKG_LIBC_RAND
options
Tidy up description header
 
* src/clibincl/clibdata.hxx:
* src/clibincl/clibdata.inl:
* src/support/clibdata.cxx:
Remove and instead rely on each component to initialise its own data
 
* src/clibincl/stdiofiles.hxx, src/clibincl/stdiofiles.inl:
New files to contain global file list and lock (if applicable).
Implemented as class with member access functions
 
* src/errno/errno.cxx:
Reorganise with self-contained per-thread data, if applicable
Remove ifdef CYGPKG_LIBC
Tidy up description header
Rename cyg_get_errno_p() to cyg_libc_get_errno_p()
 
* src/stdio/common/fclose.cxx:
* src/stdio/common/fflush.cxx:
* src/stdio/common/fopen.cxx:
* src/stdio/common/freopen.cxx:
Remove ifdef CYGPKG_LIBC
Use new global file access method from stdiofiles.hxx
Tidy up description header
Use new CYGBLD_ATTRIB_WEAK_ALIAS
Access errno "normally" rather than clibdata way
 
* src/stdio/common/stdin.cxx:
* src/stdio/common/stdout.cxx
* src/stdio/common/stderr.cxx:
New files. Implement Cyg_StdioStream objects for each stream. In
separate self-contained files so using one doesn't bring in the
others
 
* src/stdio/common/stdiofiles.cxx:
New file. Implements global files array and lock
 
* src/stdlib/_exit.cxx:
Tidy up description header
Remove ifdef CYGPKG_LIBC
Use infra CYGBLD* macros
 
* src/stdlib/malloc.cxx:
Tidy up description header
Remove ifdef CYGPKG_LIBC
Add pkgconf/kernel.h now that pkgconf/libc.h doesn't have it
Use infra CYGBLD* macros
Make pool visible externally with weak attribute and new name
cyg_libc_malloc_memorypool
 
* src/stdlib/rand.cxx:
* src/stdlib/strtok.cxx:
Reorganise with self-contained per-thread data, if applicable
Remove ifdef CYGPKG_LIBC
Tidy up description header
Use infra CYGBLD* macros
 
* src/support/cstartup.cxx:
Split into smaller files to make selective linking work better,
fix i386 port problem and make GDB happy
 
* src/support/environ.cxx:
* src/support/invokemain.cxx:
* src/support/main.cxx:
* src/support/mainthread.cxx:
New files from bits of the old cstartup.cxx
Add support for CYGSEM_HAL_STOP_CONSTRUCTORS_ON_FLAG
 
* src/PKGconf.mak:
Update to reflect file additions/deletion
 
* tests/stdlib/rand1.c:
* tests/stdlib/rand2.c:
* tests/stdlib/rand3.c:
* tests/stdlib/srand.c:
Make conform to coding standards
Remove ifdef CYGPKG_LIBC_RAND
Tidy up description header
 
* tests/string/strtok.c:
Make conform to coding standards
Remove ifdef CYGFUN_LIBC_strtok
Tidy up description header
 
1999-01-15 Mark Galassi <rosalia@cygnus.com>
 
* tests/stdlib/getenv.c (main): added tests for the case in which
the user does not supply environ and in which the user supplies a
NULL environ.
 
1999-01-15 Jesper Skov <jskov@cygnus.co.uk>
 
* src/support/cstartup.cxx: Added workaround for weak aliasing
problem in i386 gcc.
 
 
1999-01-15 Gary Thomas <gthomas@cygnus.co.uk>
 
* include/pkgconf/libc.h (CYGNUM_LIBC_MAIN_STACK_SIZE):
(CYGNUM_LIBC_MALLOC_MEMPOOL_SIZE): Change defaults to be
more reasonable on small systems.
 
1999-01-04 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/support/clibdata.cxx:
Minor bug with environ not being initialised correctly by
default
 
1998-12-24 Bart Veer <bartv@cygnus.co.uk>
 
* src/clibincl/stream.inl (Cyg_StdioStream):
check_this() member functions should now be const
 
1998-12-22 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/string/memchr.cxx (_memchr):
treat search value parameter to memchr as an unsigned byte,
not a signed int - copied fix from newlib PR 18471
 
1998-12-21 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdlib/realloc.c:
* tests/stdlib/malloc3.c:
* tests/stdlib/malloc2.c:
Warning cleanup
 
1998-12-14 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdlib/malloc2.c, tests/stdlib/malloc3.c,
tests/stdlib/realloc.c:
Only run these tests when we have a coalescing memory allocator
 
1998-12-14 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/common/stream.cxx:
Only check buffer init success if buffering
 
* src/stdio/common/streambuf.cxx (set_buffer):
Check for diff of requested size against buffer_size, not
get_buffer_size(), since this may return -1, which won't be
equal to size, and will cause malloc to be called
 
1998-12-01 Jesper Skov <jskov@cygnus.co.uk>
 
* tests/stdlib/getenv.c (main): Don't declare variables when they
are not used.
 
Thu Nov 26 17:59:12 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/string/strncpy1.c:
Fix off-by-one error since it called my_strcmp() and not
my_strncmp(), which meant in included the trailing NULL when it
shouldn't have.
 
1998-11-26 Jesper Skov <jskov@cygnus.co.uk>
 
* src/stdlib/qsort.cxx (_qsort):
* src/stdlib/rand.cxx (_srand):
Changed CYG_REPORT_FUNCNAMETYPE to CYG_REPORT_FUNCNAME in void
functions.
 
Mon Oct 26 18:49:00 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/support/cstartup.cxx (cyg_libc_dummy_main):
Silence compiler warning with cast of char * to CYG_ADDRWORD
 
Wed Oct 28 17:31:21 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/time/clock.cxx (_clock):
Reorder scaling expression as it was both incorrect and risked
overflow.
Fix for PR 18076
 
Mon Oct 19 14:40:06 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/stdio.h (EOF):
Change from -64 to (-1), to allow broken code to work :-/
Also change other negative defines to be within parentheses
 
1998-10-19 Mark Galassi <rosalia@cygnus.com>
 
* include/pkgconf/libc.h: updated the doc URL
 
Thu Oct 15 21:33:44 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/clibincl/clibdata.hxx:
Only include kernel thread headers when we're in thread-safe mode
 
* src/time/clock.cxx:
Only include kernel clock headers if there's a kernel with the
right functionality available
 
* tests/time/clock.c:
Remove unnecessary inclusion of <pkgconf/kernel.h>
 
Above changes are required for PR 17229
 
Wed Oct 14 16:38:55 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/clibincl/clibdata.hxx, src/clibincl/clibdata.inl:
Conditionalise inclusion of clibincl/stdiosupp.hxx and
clibincl/stream.hxx. Tidying up PR 17502
 
Wed Oct 14 14:08:56 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Rename CYGPKG_LIBC_STRING_OPTIMISATIONS to
CYGPKG_LIBC_STRING_OPTIMIZATIONS to make it truely merkin.
 
Tue Oct 13 19:34:41 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h (CYGDAT_LIBC_ARGUMENTS):
Add a default argv[0] of "" as many programs assume argc>0
The standard allows argv[0] to be "" if the program name
is not available
 
1998-09-26 Bart Veer <bartv@cygnus.co.uk>
 
* src/clibincl/stdiosupp.hxx:
PR 17502: this header file now does nothing if the stdio option
is disabled completely. This is the same behaviour is
clibincl/stream.hxx, although arguably the #ifdef protection
should happen wherever the header file is #include'd rather than
in the header file itself.
* src/clibincl/clibdata.hxx:
PR 17502: this header file still #include's internal stdio-related
header files and references the FILE structure, even if stdio is
disabled. There were some #ifdef's for CYGPKG_LIBC_STDIO already.
One more has been added for _fopen() and _fclose().
 
1998-09-25 Bart Veer <bartv@cygnus.co.uk>
 
* src/clibincl/streambuf.inl (Cyg_StdioStreamBuffer):
PR 17487: Reorder the calls to initialize member fields, to
eliminate a compiler warning.
 
Fri Sep 25 19:04:29 1998 Jonathan Larmour <jlarmour@peshwari.cygnus.co.uk>
 
* src/errno/errno.cxx, src/stdlib/bsearch.cxx,
src/stdlib/qsort.cxx, src/stdlib/rand.cxx, src/string/strtok.cxx,
src/time/clock.cxx:
Only define tracing variable and tracing level macro when
the relevant tracing level config options are set. Otherwise
keep the tracing level fixed at 0
Fix for PR 17476
 
* include/pkgconf/libc.h:
Define trace levels only if parent CYGPKG_LIBC_TRACE is defined
for consistency with Configuration Tool
 
Fri Sep 25 17:24:45 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/common/stdioinlines.cxx:
Make definition of vscanf() dependent on CYGFUN_LIBC_STDIO_ungetc
otherwise _vfscanf() won't be compiled. This therefore would
cause a link fail iff selective linking is not enabled.
Fix for PR 17455
 
Fri Sep 25 17:23:17 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdlib/rand.cxx:
Make compilation dependent on CYGPKG_LIBC_RAND
Fix for PR 17473
 
* tests/stdlib/srand.c:
Make definition of dummy test pass conditional on CYGPKG_LIBC_RAND
not being defined, as well as CYGPKG_LIBC
Caused compilation failure when testing PR 17473 fix
 
Mon Sep 21 17:11:04 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdio/sscanf.c:
Make sscanf test conditional on CYGFUN_LIBC_STDIO_ungetc since
_vfscanf() only gets compiled if this is defined
Fix for PR 17346
 
1998-09-20 Mark Galassi <rosalia@cygnus.com>
 
* include/pkgconf/libc.h: updated CDL doc strings.
 
Fri Sep 18 22:18:47 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/clibincl/clibdata.inl (get_errno_p):
Rather than this function only being available in thread-safe mode,
instead make what it returns be either the per-thread errno, or
global errno depending on the configuration.
Include <errno.h> (conditionally) to support this change
 
Wed Sep 16 11:20:31 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Remove "fix me" comment which I forgot to remove before
 
Tue Sep 15 19:27:57 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Updated descriptions and a few other minor things after review.
Notably though, the NDEBUG config option has been removed
 
1998-09-15 Bart Veer <bartv@cygnus.co.uk>
 
* include/pkgconf/libc.h:
PR 17201: removed dependency on CYGPKG_KERNEL in the option
CYGNUM_LIBC_MAIN_STACK_SIZE, since the actual dependencies cannot
be expressed sensibly in the current system.
 
1998-09-11 Bart Veer <bartv@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Sorting out dependencies for error package.
 
1998-09-10 Mark Galassi <rosalia@cygnus.com>
 
* include/pkgconf/libc.h: started adding doc fields to the
cdl_package data, as a pilot for now.
 
Wed Sep 9 17:41:23 1998 Hugo Tyson <hmt@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Add option CYGIMP_LIBC_MALLOC_CXX_DELETE_CALLS_FREE to explicitly
control whether the empty delete functions (currently) in
kernel/.../common/delete.cxx are enabled; controls code bloat, see
the comments in delete.cxx.
 
Fri Sep 4 16:43:38 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdio/stdiooutput.c:
Add a default CYG_TEST_PASS() to make sure the test infra doesn't
complain.
Also remove the unused string functionsa
 
Fri Sep 4 15:43:48 1998 Hugo Tyson <hmt@cygnus.co.uk>
 
* src/stdlib/exit.cxx (__libc_exit):
* src/stdlib/_exit.cxx (__libc__exit):
* src/stdlib/malloc.cxx (_free):
* src/stdlib/abort.cxx (abort):
* src/support/cstartup.cxx (invoke_main):
Tracing system asserted cos it was being called incorrectly; these
are void functions so you shouldn't give a type to the function
reporting call.
 
Fri Sep 4 15:03:10 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Fix CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE description to refer to
the table.cxx file, not table.h
 
Fri Sep 4 14:38:52 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Add description for CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE since
Proven won't be making any changes to the device driver
implementation after all.
Fix for PR 17148
 
* src/clibincl/stream.inl (set_position):
Remove "fix me" line. It is obvious that this will have to change
with a filesystem interface
Fix for PR 17147
* src/stdio/common/freopen.cxx:
Remove "fix me" - I know about this issue
Fix for PR 17145
 
* src/stdio/common/stream.cxx (read):
Remove "fix me" and change to use memcpy
Fix for PR 17144
 
Fri Sep 4 14:36:47 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdio/stdiooutput.c:
Actually add it this time!
 
Fri Sep 4 13:48:13 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdio/stdiooutput.c:
Add new tests for misc stdio output functions
 
* tests/PKGconf.mak:
Build stdiooutput.c test
 
Fri Sep 4 12:52:10 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/clibincl/stream.inl (write_byte):
Remove bogus assert
 
* tests/stdlib/getenv.c (main):
Check whether str is NULL before doing a strcmp()
 
* tests/stdio/sprintf2.c (main):
Reformat to 76 columns
 
Fri Sep 4 02:10:54 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/clibincl/stream.hxx, src/stdio/common/stream.cxx:
Add new peek_byte method to Cyg_StdioStream
 
* src/stdio/input/vfscanf.cxx (_vfscanf):
Fix up buffer access to work with new peek_byte method above
Fix for PR 16954
 
Thu Sep 3 19:40:11 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdlib/rand1.c, tests/stdlib/rand2.c,
tests/stdlib/rand3.c:
Add extra check for CYGPKG_LIBC_RAND to decide whether the test
is applicable or not
 
* tests/stdlib/rand2.c (test):
Use CYGNUM_LIBC_RAND_SEED for default seed, not 1
 
* tests/string/strtok.c:
Add extra check for CYGFUN_LIBC_strtok to decide whether the
test is applicable or not
 
Wed Sep 2 19:11:40 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/input/fread.cxx, src/stdio/output/fwrite.cxx:
Add fread() and fwrite() functions
 
* src/PKGconf.mak:
Build fread.cxx and fwrite.cxx from above
 
* src/stdio/common/stream.cxx:
Reformat to 76 columns
In write(), move initialisation of *bytes_written to start
In read(), move initialisation of *bytes_read to start
 
* include/stdio.h:
Reformat to 76 columns
 
Replace all references to the ANSI
standard to instead by the ISO C standard
 
Add commented argument names for "documentation"
 
Add fread() and fwrite() prototypes
 
* src/clibincl/stdiosupp.hxx:
Copy the above changes from stdio.h, and add _fread() and _fwrite()
prototypes
 
* src/stdio/output/fputs.cxx, src/stdio/input/fgets.cxx:
Reformat to 76 columns
 
Wed Sep 2 15:41:15 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/input/vfscanf.cxx:
Reformat to 76 columns
 
Wed Sep 2 14:46:18 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/common/fflush.cxx:
Use trylock_me() instead of lock_me(), and loop to prevent
deadlocks
* src/clibincl/stream.hxx, src/clibincl/stream.inl:
Add trylock_me() method
 
* src/clibincl/stream.hxx, src/clibincl/stream.inl,
src/stdio/common/fflush.cxx:
Reformat to 76 columns
 
Wed Sep 2 12:24:27 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Change 0x7fff to 0x7fffffff. Oops!
give main stack size option a legal_values field
Undefine tracing by default
Add some more description in the header
 
Tue Sep 1 20:02:07 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/i18n/setlocale.c (cyg_package_start):
Fix typo - extra "x" for no reason at all! :-)
 
Tue Sep 1 19:44:58 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/i18n/locale.cxx:
Fix bug in find_locale_data() that miscalculated size of
all_locales
Make find_locale_data() match the locale "" and add some
other things in _setlocale() to ensure that "C" gets returned
when the default locale "" is passed.
 
Only check the locale pointer when it is non-NULL
 
* tests/i18n/setlocale.c:
New tests for setlocale()
 
* tests/PKGconf.mak:
Update to build setlocale.c test
 
* src/support/cstartup.cxx:
Don't actually call system default main() "main" otherwise GDB
gets confused and thinks its the entry point. Instead make a weak
alias and call the real function something different.
 
Tue Sep 1 18:31:42 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/i18n/locale.cxx (_setlocale):
Fix tracing macro name and remove "str maybe used before
initialised" warning
 
* tests/stdlib/qsort.c:
Correct file description header
 
Tue Sep 1 17:04:32 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/locale.h, src/clibincl/i18nsupp.hxx, src/i18n/locale.cxx:
New files to add support for locales as defined by the ISO C
standard. i.e. setlocale() and localeconv() functions and some
other bits
 
* include/pkgconf/libc.h:
Add CYGNUM_LIBC_MAX_LOCALE_NAME_SIZE config option for locale
support
 
* src/PKGconf.mak:
build locale.cxx
* include/errno.h, src/clibincl/ctypesupp.hxx:
Tidy up to 76 columns
 
Tue Sep 1 00:24:22 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Move environment-related options from stdlib into new
CYGPKG_LIBC_STARTUP component. Also add options for main()'s
arguments (CYGPKG_LIBC_ARGUMENTS), main()'s default stack size
(CYGNUM_LIBC_MAIN_STACK_SIZE), number of atexit handlers
(CYGNUM_LIBC_ATEXIT_HANDLERS), and whether _exit() stops the
system (CYGSEM_LIBC_EXIT_STOPS_SYSTEM).
 
* src/clibincl/stdlibsupp.hxx:
Fix a few comment bugs, and add new
cyg_libc_invoke_atexit_handlers() function prototype
 
* src/stdlib/_exit.cxx, src/stdlib/atexit.cxx, src/stdlib/exit.cxx:
Implement exit(), atexit() and _exit() correctly now. Also
includes cyg_libc_invoke_atexit_handlers() in atexit.cxx. Now
we get the correct behaviour of atexit(), and exit() invokes the
atexit handlers and fflushs all the stdio streams. Add plenty of
tracing of asserts too.
 
* src/support/cstartup.cxx:
Make main_thread object an exported global. Allow user-settable
arguments. Add MUCH more tracing and asserts. Improve comments.
Tidy up to 76 columns
 
* tests/stdlib/atexit.c:
Add simple test for atexit() and it calling registered functions
 
* tests/PKGconf.mak:
Build atexit.c test
 
Mon Aug 31 18:54:48 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdlib/getenv.cxx, tests/stdlib/getenv.c:
Add support for getenv(), and some tests to ensure it works
 
* src/PKGconf.mak, tests/PKGconf.mak:
Update to include getenv.cxx and getenv.c test
 
* src/clibincl/clibdata.hxx:
remove prototype for environ - we expect files needing it to
define it themselves
 
* src/support/clibdata.cxx:
Tidy up to 76 columns and add definition of char **environ, but
with a configurable initialiser (see libc.h below)
 
* tests/stdlib/abs.c (main):
Tidy up to 76 columns
 
* src/stdlib/malloc.cxx:
Tidy up to 76 columns and remove warning for undefined _memcpy()
by changing to memcpy(), and casting away signedness
 
* include/pkgconf/libc.h:
Add CYGPKG_LIBC_ENVIRONMENT and CYGDAT_LIBC_DEFAULT_ENVIRONMENT
configuration options
 
* include/pkgconf/libc.h, src/clibincl/clibdata.hxx:
Tidy up to 76 columns
 
* include/stdlib.h:
Add getenv() prototype and tidy up to 76 columns
 
* src/clibincl/stdlibsupp.hxx:
Add _getenv() prototype
Mon Aug 31 13:37:08 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdlib/malloc.cxx:
Add realloc()
 
* tests/stdlib/realloc.c:
Add this file to test new realloc() functionality
 
* tests/PKGconf.mak:
Build realloc test
 
* tests/stdlib/malloc3.c (main), tests/stdlib/malloc2.c (main),
tests/stdlib/malloc1.c (main):
Conditionalise local vars to prevent warnings
 
* tests/stdlib/malloc3.c (fill_with_data):
Move '{' into "verb" line
 
* include/pkgconf/libc.h:
Require infra tracing support to allow tracing
 
* include/stdlib.h:
Add realloc()
 
* src/clibincl/stdlibsupp.hxx:
Update the commented argument names from stdlib.h, including realloc()
 
1998-08-28 Bart Veer <bartv@cygnus.co.uk>
 
* include/pkgconf/libc.h:
* src/clibincl/clibdata.hxx, src/time/clock.cxx:
Updated for new kernel configuration option symbol names
 
Fri Aug 28 19:18:25 1998 Hugo Tyson <hmt@cygnus.co.uk>
 
Changed the entry below to sat "tx39" instead of "mn10300".
It's been a long week.
 
Fri Aug 28 18:59:20 1998 Hugo Tyson <hmt@cygnus.co.uk>
 
* src/support/cstartup.cxx: Add a weakly named main to allow the
default configuration to link on the tx39 which has no
scalextric linking yet. The static Cyg_Thread main_thread object
below continues to exist, though unreferenced, so all its
descendants must exist too.
 
Fri Aug 28 08:54:29 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/stdlib.h:
Add commented argument names Add exit(), and atexit(). And move
these along with abort() and _exit() to a new section.
 
* src/stdlib/atexit.cxx, src/stdlib/exit.cxx:
Add trivial versions of atexit() and exit()
 
* include/pkgconf/libc.h:
Add CYGNUM_LIBC_MAIN_STACK_SIZE config option
 
* include/sys/cstartup.h, src/support/cstartup.cxx, src/PKGconf.mak:
New files to provide a new function cyg_iso_c_support(), which
invokes main "correctly".
 
* tests/ctype/ctype.c, tests/setjmp/setjmp.c, tests/stdio/sprintf1.c,
tests/stdio/sprintf2.c, tests/stdio/sscanf.c, tests/stdlib/abs.c,
tests/stdlib/atoi.c, tests/stdlib/atol.c, tests/stdlib/bsearch.c,
tests/stdlib/div.c, tests/stdlib/labs.c, tests/stdlib/ldiv.c,
tests/stdlib/malloc1.c, tests/stdlib/malloc2.c,
tests/stdlib/malloc3.c, tests/stdlib/qsort.c, tests/stdlib/rand1.c,
tests/stdlib/rand2.c, tests/stdlib/rand3.c, tests/stdlib/srand.c,
tests/stdlib/strtol.c, tests/stdlib/strtoul.c,
tests/string/memchr.c, tests/string/memcmp1.c,
tests/string/memcmp2.c, tests/string/memcpy1.c,
tests/string/memcpy2.c, tests/string/memmove1.c,
tests/string/memmove2.c, tests/string/memset.c,
tests/string/strcat1.c, tests/string/strcat2.c,
tests/string/strchr.c, tests/string/strcmp1.c,
tests/string/strcmp2.c, tests/string/strcoll1.c,
tests/string/strcoll2.c, tests/string/strcpy1.c,
tests/string/strcpy2.c, tests/string/strcspn.c,
tests/string/strlen.c, tests/string/strncat1.c,
tests/string/strncat2.c, tests/string/strncpy1.c,
tests/string/strncpy2.c, tests/string/strpbrk.c,
tests/string/strrchr.c, tests/string/strspn.c,
tests/string/strstr.c, tests/string/strtok.c,
tests/string/strxfrm1.c, tests/string/strxfrm2.c,
tests/time/clock.c:
 
Modify all tests to use new startup mechanism, and cyg_iso_c_start()
 
Fri Aug 28 00:29:38 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/common/stream.cxx:
Add #ifdef CYGSEM_LIBC_STDIO_WANT_BUFFERED_IO around all accesses to
flags.last_buffer_op_was_read. Fix for PR 16997
 
Thu Aug 27 01:12:42 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/sys/file_if.h:
Fix comments and remove cyg_get_file_star()
 
Wed Aug 26 20:24:32 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Remove #define CYGPKG_LIBC is that is meant to live in
<pkgconf/system.h> after all
 
Wed Aug 26 19:39:23 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
More fixes to CDL stuff to make it work better, and look better on
the screen
 
Tue Aug 25 20:21:41 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Make some fixes after running the ConfigTool
 
Tue Aug 25 16:46:28 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h (CYGNUM_LIBC_STDIO_BUFSIZE):
Fix typo of CYGNUM_LIBC_STDIO_BUFSIZE
 
Tue Aug 25 15:10:57 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Tidy up CDL stuff a bit more, prior to checking it actually works.
 
Tue Aug 25 11:38:52 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdlib/malloc2.c (main):
Prevent calls to CYG_TEST_STILL_ALIVE for now
 
Tue Aug 25 05:39:28 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Change cosmetic paragraph alignment.
Tue Aug 25 03:11:34 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/support/clibdata.cxx:
Make stderr initialise with buffer size 0.
For PR 16955
 
Mon Aug 24 17:38:46 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
First pass at CDL-ifying the C library configuration. Currently
deliberately disabled as there a few outstanding issues.
 
Mon Aug 24 16:14:22 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/output/vfnprintf.cxx (_vfnprintf):
clear up warning for unused argument
 
* tests/stdlib/malloc2.c (NUM_ITERATIONS):
Lower to 100 from 50000 so it won't take too long under the simulator
 
Thu Aug 20 17:48:43 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdlib/malloc.cxx:
Remove now unnecessary inclusion of kernel/ktypes.h
 
Wed Aug 19 19:19:14 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdio/sprintf1.c, tests/stdio/sprintf2.c,
tests/stdio/sscanf.c, tests/stdlib/atoi.c, tests/stdlib/atol.c,
tests/stdlib/rand1.c, tests/stdlib/rand2.c, tests/stdlib/rand3.c,
tests/stdlib/srand.c, tests/stdlib/strtol.c,
tests/stdlib/strtoul.c, tests/string/strtok.c,
tests/time/clock.c:
Add parameters to "main()" to silence warnings
 
Wed Aug 19 18:52:59 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/common/stream.cxx (refill_read_buffer):
Put conditional error check into same #ifdef and if as what was being
checked in the first place!
 
Wed Aug 19 18:49:19 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/clibincl/stream.inl:
Reorder Cyg_StdioStream::check_this() to be first to silence
warnings
 
Tue Aug 18 16:10:03 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* ecc/language/c/libc/current/src/clibincl/clibdata.hxx,
ecc/language/c/libc/current/src/errno/errno.cxx,
ecc/language/c/libc/current/src/stdio/common/fopen.cxx,
ecc/language/c/libc/current/src/stdlib/rand.cxx,
ecc/language/c/libc/current/src/string/strtok.cxx:
Rename CYGIMP_LIBC_INTERNAL_DATA_PREAMBLE,
CYGIMP_LIBC_INTERNAL_DATA_ALLOC_CHECK_PREAMBLE,
CYGVAR_LIBC_INTERNAL_DATA, and
CYGIMP_LIBC_INTERNAL_DATA_CHECK to all have CYGPRI_ prefix instead
as recommended by the config name rules
 
 
Tue Aug 18 14:31:19 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/common/setvbuf.cxx (_setvbuf):
Rename variable names in assert line, otherwise doesn't build
with asserts on!
 
Sun Aug 16 18:15:12 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/input/vfscanf.cxx (_vfscanf):
Fix some bugs, although there are some left to fix still. Unrelated
to the rest of the checkins, so I will check the partial fix in now.
 
* src/clibincl/stream.hxx, src/clibincl/stream.inl,
src/stdio/common/stream.cxx:
Add parameters to constructor to allow more things to be done at
construction time.
 
Now we have "new", remove separate "construct" method
 
Add more documentation on constructor
 
As requested by code review, where possible, move boolean flags
into separate packed bitfield structure for space efficiency
 
Make readbuf_char be usable all the time rather than when configured
not to be buffering, as it is also needed for non-buffered mode i.e.
_IONBF
 
* src/stdio/common/fopen.cxx:
Change to use new method of construction from above, using new
 
Use thread-specific data, rather than global. And so change errnos
to access errno entry specifically
 
Make process_mode() check for append mode too
 
Reformat for coding standards to have { in same line as "verb"
 
* src/stdio/common/setvbuf.cxx:
 
Change to cope with different way of dealing with buffering policy
flags etc. in Cyg_StdioStream
 
* src/stdio/common/vsnprintf.cxx, src/stdio/common/vsscanf.cxx,
src/support/clibdata.cxx:
Change construction of streams to use new parameters added above,
and change to use _IONBF mode for string stdio functions,
otherwise its a waste of memory. And use _IONBF for stderr as the
ISO standard tells us to!
 
Reformat for coding standards to have { in same line as "verb"
 
* src/clibincl/streambuf.hxx, src/clibincl/streambuf.inl:
Change constructor so that it can be set with default size and
dynamic buffer (if applicable)
 
Fix minor bug in destructor - should only call free when allocated
dynamically
 
Change get_buffer_size to return -1 if the buffer was not allowed
to be set up
 
* src/stdio/common/streambuf.cxx:
Remove unnecessary stdio.h include and add extra comment to whether
to free bit in set_buffer()
 
* src/stdio/common/freopen.cxx:
Change @@@ to standard fix me string
 
* src/stdio/output/fputc.cxx:
Remove unnecessary "written" variable
 
Thu Aug 13 15:37:28 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdlib/_exit.cxx:
Included use of "fix me" line to ensure this is discussed before
release
 
* include/stdlib.h, src/stdlib/abort.cxx, src/PKGconf.mak:
Add abort.cxx to implement abort(), albeit naively
 
Thu Jul 30 18:03:09 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/common/vsscanf.cxx (_vsscanf),
src/stdio/common/vsnprintf.cxx (_vsnprintf):
Fix initialiser of pseudo string device table that didn't get updated
when the table changed (Bad proven, no biscuit).
 
* src/clibincl/stream.inl (~Cyg_StdioStream):
Move invalidation of magic_validity_word to after unlock_me(),
otherwise it always fails!
 
Tue Jul 28 21:29:53 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/clibincl/clibdata.hxx:
Shorten over-long lines
 
Tue Jul 28 20:28:23 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/clibincl/stream.hxx (class Cyg_StdioStream),
src/clibincl/stream.inl, src/stdio/common/stream.cxx:
Clarify some comments and get the CYGDBG_DEFINE_CHECK_THIS and
CYG_ASSERTCLASS stuff going
 
* src/clibincl/stream.inl:
Put '{'s on same line as "action" as per coding standards
Shorten over-long lines
 
Tue Jul 28 15:31:06 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/clibincl/streambuf.inl, src/stdio/common/streambuf.cxx:
Move set_buffer() from streambuf.inl to new file streambuf.cxx
 
* src/PKGconf.mak (COMPILE):
Build new file streambuf.cxx
 
* src/clibincl/streambuf.hxx (class Cyg_StdioStreamBuffer):
Add METHODS comment
 
* src/stdio/common/stream.cxx:
Put '{'s on same line as "action" as per coding standards
Shorten over-long lines
 
Tue Jul 28 00:26:36 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/stdlib.inl, src/stdio/input/vfscanf.cxx,
src/stdio/output/vfnprintf.cxx, src/stdlib/div.cxx,
src/stdlib/ldiv.cxx, src/stdlib/qsort.cxx, src/stdlib/strtol.cxx,
src/stdlib/strtoul.cxx, src/string/strtok.cxx:
 
Include proper Berkeley license inline in the file, rather than
referring to an external file
 
* doc/COPYING.UCB:
Remove, now that it isn't referred to any more
 
Mon Jul 27 23:34:26 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/ctype.h, include/ctype.inl, include/errno.h,
include/stdio.h, include/stdio.inl, include/stdlib.h,
include/stdlib.inl, include/string.h, include/string.inl,
include/time.h, include/sys/file_if.h, src/PKGconf.mak,
src/clibincl/clibdata.hxx, src/clibincl/clibdata.inl,
src/clibincl/ctypesupp.hxx, src/clibincl/stdiosupp.hxx,
src/clibincl/stream.hxx, src/clibincl/streambuf.hxx,
src/clibincl/streambuf.inl, src/clibincl/stringsupp.hxx,
src/clibincl/timesupp.hxx, src/ctype/isalnum.cxx,
src/ctype/isalpha.cxx, src/ctype/iscntrl.cxx,
src/ctype/isdigit.cxx, src/ctype/isgraph.cxx,
src/ctype/islower.cxx, src/ctype/isprint.cxx,
src/ctype/ispunct.cxx, src/ctype/isspace.cxx,
src/ctype/isupper.cxx, src/ctype/isxdigit.cxx,
src/ctype/tolower.cxx, src/ctype/toupper.cxx,
src/errno/errno.cxx, src/stdio/common/snprintf.cxx,
src/stdio/common/sprintf.cxx, src/stdio/common/sscanf.cxx,
src/stdio/common/stdioinlines.cxx, src/stdio/common/stream.cxx,
src/stdio/common/ungetc.cxx, src/stdio/common/vsnprintf.cxx,
src/stdio/common/vsscanf.cxx, src/stdio/input/fgetc.cxx,
src/stdio/input/fgets.cxx, src/stdio/input/fscanf.cxx,
src/stdio/input/gets.cxx, src/stdio/input/scanf.cxx,
src/stdio/output/fnprintf.cxx, src/stdio/output/fprintf.cxx,
src/stdio/output/fputc.cxx, src/stdio/output/fputs.cxx,
src/stdio/output/printf.cxx, src/stdlib/_exit.cxx,
src/stdlib/abs.cxx, src/stdlib/atof.cxx, src/stdlib/atoi.cxx,
src/stdlib/atol.cxx, src/stdlib/div.cxx, src/stdlib/labs.cxx,
src/stdlib/ldiv.cxx, src/stdlib/rand.cxx, src/stdlib/strtod.cxx,
src/string/memchr.cxx, src/string/memcmp.cxx,
src/string/memmove.cxx, src/string/strcat.cxx,
src/string/strchr.cxx, src/string/strcmp.cxx,
src/string/strcoll.cxx, src/string/strcpy.cxx,
src/string/strcspn.cxx, src/string/strlen.cxx,
src/string/strncat.cxx, src/string/strncmp.cxx,
src/string/strncpy.cxx, src/string/strpbrk.cxx,
src/string/strrchr.cxx, src/string/strspn.cxx,
src/string/strstr.cxx, src/string/strsuppt.cxx,
src/string/strtok.cxx, src/string/strxfrm.cxx,
src/support/clibdata.cxx, src/time/clock.cxx:
Untabify
 
Mon Jul 27 23:14:18 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/errno/errno.cxx, src/stdio/input/vfscanf.cxx,
src/stdio/output/vfnprintf.cxx, src/stdlib/strtol.cxx,
src/stdlib/strtoul.cxx, src/stdlib/malloc.cxx, src/stdlib/qsort.cxx,
tests/ctype/ctype.c, tests/stdlib/rand3.c, tests/stdlib/malloc3.c:
Remove all mentions of "register" in variable declarations. Also
untabify where needed
 
* src/stdlib/bsearch.cxx:
Untabify this too
 
Mon Jul 27 22:18:51 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/output/fputc.cxx (_fputc):
Replace call to stream write() with call to write_byte()
 
* src/clibincl/stream.inl (write_byte):
Add asserts for stream write() returning odd values for how much has
been written
(bytes_available_to_read):
Remove "register" def for variable declaration
 
Mon Jul 27 22:06:22 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/common/stdiosupp.cxx:
Remove #if 0'd cyg_get_file_star() and unnecessary pseudo string
device definition
 
Mon Jul 27 21:57:25 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h, src/support/clibdata.cxx:
Change CYGXXX_LIBC_STDIO_DEFAULT_CONSOLE to
CYGDAT_LIBC_STDIO_DEFAULT_CONSOLE
 
Mon Jul 27 21:49:23 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/clibincl/clibdata.hxx, src/clibincl/clibdata.inl,
src/clibincl/ctypesupp.hxx, src/clibincl/setjmpsupp.hxx,
src/clibincl/stdiosupp.hxx, src/clibincl/stdlibsupp.hxx,
src/clibincl/stream.hxx, src/clibincl/stream.inl,
src/clibincl/streambuf.hxx, src/clibincl/streambuf.inl,
src/clibincl/stringsupp.hxx, src/clibincl/timesupp.hxx:
 
Change CYGONCE_LIBC_*_{HXX,INL} to CYGONCE_LIBC_CLIBINCL_*_{HXX,INL}
 
Mon Jul 27 21:34:05 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Change #define XXXXX 1 to #define XXXXX where applicable as per code
review
 
Also remove obsolete CYGIMP_LIBC_THREAD_START_SUSPENDS_SELF
 
Mon Jul 27 19:42:27 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/common/fopen.cxx (_fopen):
Use #ifdef, not #if for config options
 
Mon Jul 27 15:01:51 BST 1998 Chris Provenzano <proven@cygnus.com>
 
* src/stdio/common/stream.cxx, src/stdio/common/vsnprintf.cxx
* src/stdio/common/vsscanf.cxx:
Fixes to compile with the new Cyg_IORB field names.
Thu Jul 9 03:40:21 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdlib/atoi.c, tests/stdlib/atol.c,
tests/stdlib/strtol.c, tests/stdlib/strtoul.c:
Adjust starting of tests to possibly start scheduler since
strtol/stroul rely on errno, which may be a per-thread variable
 
Thu Jul 9 03:06:25 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/clibincl/stream.hxx, src/clibincl/stream.inl,
src/stdio/common/stream.cxx, src/stdio/common/setvbuf.cxx:
Consolidate read and write buffers into single buffer, as it should
have been all along
 
* src/clibincl/streambuf.hxx, src/clibincl/streambuf.inl:
Add drain_buffer() method to speed up the case when we want the
buffer completely emptied
 
Tue Jul 7 21:26:33 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdio/sprintf1.c:
Add a couple of new tests that check that very long strings work too
 
Wed Jul 1 19:52:39 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/clibincl/stream.hxx, src/clibincl/streambuf.hxx:
Do not permit copy constructors
 
* src/clibincl/stream.inl, src/stdio/common/fclose.cxx:
Make sure we use #ifdef and not #if
 
* src/clibincl/streambuf.inl:
Use member initialisation list rather than explicit initialisation to
reduce warnings
 
Wed Jul 1 19:17:55 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h and all files using config options:
Rename configuration defines to make them more standard
 
Thu Jun 25 20:09:30 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/string/strcat.cxx:
Add parentheses on check to silence warning
(Verified by proven)
 
Thu Jun 25 19:30:01 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdlib/malloc.cxx:
Make sure that the malloc pool is initialised before other things
can use it. This is done with the hot new constructor ordering
feature.
 
Thu Jun 25 18:27:03 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/input/vfscanf.cxx:
Remove bogus ifdef if floating point is _not_ wanted
 
Thu Jun 25 17:31:42 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/string/strtok.cxx:
Fix argument checking to allow first argument of NULL
 
Thu Jun 25 04:18:50 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/clibincl/clibdata.inl (get_strtok_last_p):
Remove bogus assertion
 
* src/stdlib/malloc.cxx:
Got sense of alignment check assertion the wrong way round, so negate
it
 
Thu Jun 25 03:56:35 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/string/strxfrm.cxx:
Fix argument checking assertions with legitimate nulls here too
 
Thu Jun 25 03:46:32 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdlib/strtoul.cxx, src/stdlib/strtol.cxx:
Fix argument checking assertions to cope with legitimate nulls
 
Wed Jun 24 09:01:45 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdio/sprintf1.c:
Remove extraneous info messages
 
Wed Jun 24 05:59:17 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdio/sprintf1.c, tests/stdio/sprintf2.c, tests/stdio/sscanf.c,
tests/stdlib/rand1.c, tests/stdlib/rand2.c, tests/stdlib/rand3.c,
tests/stdlib/srand.c:
 
Change large automatic arrays to static arrays to prevent overuse
of a potentially small stack
 
Wed Jun 24 05:45:28 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdio/sprintf1.c, tests/stdio/sprintf2.c, tests/stdio/sscanf.c,
tests/stdlib/rand1.c, tests/stdlib/rand2.c, tests/stdlib/rand3.c,
tests/stdlib/srand.c, tests/string/strtok.c, tests/time/clock.c:
 
Increase thread stack size from 4K to 32K as in some cases it was
too small.
 
 
Tue Jun 23 20:12:31 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdio/sscanf.c:
Add extra tests, including floating point conversion testing
 
Tue Jun 23 17:01:06 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/string/strtok.cxx:
Make sure this is only compiled if CYGFUN_LIBC_strtok is defined
 
Tue Jun 23 06:10:13 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
add some comments - that's all
 
* src/stdio/common/stream.cxx:
fix case in refill_read_buffer() for what to do when there's nothing
left. Now return EAGAIN
 
* src/stdio/common/vsscanf.cxx, src/stdio/input/vfscanf.cxx:
Get sscanf working properly and passing tests. Also make sure it
ignores FP when its not configured
 
* src/stdlib/atof.cxx:
Only compile at all if strtod() is present
 
Mon Jun 22 19:13:42 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/clibincl/clibdata.hxx, src/clibincl/clibdata.inl:
Conditionalise strtok_last and rand_seed better
 
Mon Jun 22 14:14:12 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdlib/malloc3.c:
Add test for checking that mallocing and freeing repeatedly works
 
* tests/PKGconf.mak:
Update to reflect addition of the above
 
Mon Jun 22 13:09:33 BST 1998 Chris Provenzano <proven@cygnus.com>
 
* src/stdio/common/fopen.cxx
* src/stdio/common/stream.cxx
* src/stdio/common/vsnprintf.cxx
* src/stdio/common/vsscanf.cxx
Include cyg/devs/common/iorb.h instead of iorb.hxx
 
* src/stdio/common/stream.cxx
Use read_blocking and write_blocking instead of just read and
write when accessing devices through the virtual device table.
 
Sun Jun 21 18:19:13 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/common/stdioinlines.cxx:
Propagate change of return code handling for puts from stdio.inl
into here
 
* src/stdio/output/fputc.cxx:
make sure the right type is used for output - byte not int
 
* src/support/clibdata.cxx:
Fix #define config mistook. #endif was in wrong place
 
Sun Jun 21 16:11:04 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/clibincl/clibdata.hxx, src/clibincl/clibdata.inl:
Allow explicit construction to get around a bug when
dynamically allocating per-thread structure
 
Sun Jun 21 16:02:51 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/ctype/ctype.c, tests/setjmp/setjmp.c, tests/stdio/sprintf1.c,
tests/stdio/sprintf2.c, tests/stdio/sscanf.c, tests/stdlib/abs.c,
tests/stdlib/atoi.c, tests/stdlib/atol.c, tests/stdlib/bsearch.c,
tests/stdlib/div.c, tests/stdlib/labs.c, tests/stdlib/ldiv.c,
tests/stdlib/malloc1.c, tests/stdlib/malloc2.c, tests/stdlib/qsort.c,
tests/stdlib/rand1.c, tests/stdlib/rand2.c, tests/stdlib/rand3.c,
tests/stdlib/srand.c, tests/stdlib/strtol.c, tests/stdlib/strtoul.c,
tests/string/memchr.c, tests/string/memcmp1.c,
tests/string/memcmp2.c, tests/string/memcpy1.c,
tests/string/memcpy2.c, tests/string/memmove1.c,
tests/string/memmove2.c, tests/string/memset.c,
tests/string/strcat1.c, tests/string/strcat2.c,
tests/string/strchr.c, tests/string/strcmp1.c,
tests/string/strcmp2.c, tests/string/strcoll1.c,
tests/string/strcpy1.c, tests/string/strcpy2.c,
tests/string/strcspn.c, tests/string/strlen.c,
tests/string/strncat1.c, tests/string/strncat2.c,
tests/string/strncpy1.c, tests/string/strncpy2.c,
tests/string/strpbrk.c, tests/string/strrchr.c,
tests/string/strspn.c, tests/string/strstr.c, tests/string/strtok.c,
tests/string/strxfrm1.c, tests/string/strxfrm2.c, tests/time/clock.c:
 
Update tests to "do the right thing" with all configuration settings
 
 
Sun Jun 21 04:54:14 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/setjmp/setjmp.c:
I have to be careful not to use setjmp() in a way not exactly
defined by the standard, so make sure I do, and add a comment
documenting these ways.
 
Also ensure this test does the right thing in all configurations
 
Sun Jun 21 04:38:15 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Add extra checks for invalid configurations
Also make default for thread safety OFF
 
* src/clibincl/clibdata.inl:
Adjust indentation
 
* src/stdio/output/vfnprintf.cxx:
Make printf of -0.0 floating point do the right thing
 
Sun Jun 21 04:28:00 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/common/snprintf.cxx, src/stdio/common/sprintf.cxx,
src/stdio/common/sscanf.cxx, src/stdio/input/fscanf.cxx,
src/stdio/input/scanf.cxx, src/stdio/output/fnprintf.cxx,
src/stdio/output/fprintf.cxx, src/stdio/output/printf.cxx:
 
Had to remove inline functions with varargs. Which means separating
out each function from stdioinlines.cxx into a separate file, as they
no longer belong there. So all the above files were created.
 
* include/stdio.inl, src/PKGconf.mak,
src/stdio/common/stdioinlines.cxx:
Changed to take account of the above
 
 
Sun Jun 21 03:58:42 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdio/sprintf1.c, tests/stdio/sprintf2.c:
Update with floating-point tests. Also make sure they DTRT in all
configurations
 
Fri Jun 19 19:33:06 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/support/clibdata.cxx:
accidentally initialised stdin/out/err twice
 
Fri Jun 19 19:09:29 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/support/clibdata.cxx:
Another typo
 
Fri Jun 19 18:59:07 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/support/clibdata.cxx:
Missing #endif typo
 
Fri Jun 19 18:51:42 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/support/clibdata.cxx:
Fix initialisation of static data members. Unsure how it worked at
all before!
 
Fri Jun 19 18:01:01 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/stdio.inl:
puts should check whether fputs returns non-negative, rather than
non-zero
 
Fri Jun 19 17:22:52 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/clibincl/clibdata.inl:
Make inclusion of get_errno_p conditional on thread-safety
 
Wed Jun 17 10:55:32 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/input/vfscanf.cxx:
Add weak alias of vfscanf() to _vfscanf()
 
Wed Jun 17 09:10:41 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdio/common/fflush.cxx:
Initialise err to silence compiler warning
 
Wed Jun 17 08:59:20 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* Most important is the addition of floating point support in
src/stdio/output/vfnprintf.cxx and src/stdio/input/vfscanf.cxx. This
also required the addition of atof() and strtod() in stdlib which is
definitely no bad thing! Other than that...
* Fix a whole bunch of stuff I messed up first time round. Also the
sprintf and sscanf tests are included again.
 
Tue Jun 16 16:38:02 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/PKGconf.mak:
Typo with not putting comment character at the beginning. Sigh.
 
Tue Jun 16 14:53:09 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/PKGconf.mak:
Forgot to (temporarily) remove fputs test for now
 
Mon Jun 15 20:40:03 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
Everything to do with stdio has almost completely changed, so there's
not much point documenting individual changes.
 
Mon Jun 15 18:36:01 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/stdlib/malloc2.c:
Stop it moaning quite as much when it fails by making it exit sooner
 
* tests/time/clock.c :
This isn't a compound testcase
 
Thu Jun 11 17:59:13 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/assert.h
Reverse sense of NDEBUG ifdef, that was left in accidentally due
to testing
 
Thu Jun 11 04:58:08 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/errno.h, include/string.h, src/clibincl/stringsupp.hxx:
Modify as I've now added an "error" package which defines the error
codes and strerror()
 
* src/errno/strerror.cxx:
Moved to new error package and thus deleted
 
Wed Jun 10 18:37:37 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/assert.h:
create this header and add assert() function
 
Wed Jun 10 16:23:57 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/stdlib.h, src/clibincl/stdlibsupp.hxx, src/stdlib/malloc.cxx:
Add malloc(), calloc() and free() functions
 
* include/pkgconf/libc.h:
Add malloc memory pool size option
 
* tests/stdlib/malloc1.c, tests/stdlib/malloc2.c:
new tests for malloc
 
* src/PKGconf.mak, tests/PKGconf.mak:
Update for new files
Wed Jun 10 15:06:16 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/setjmp/setjmp.c:
Add another test
 
Tue Jun 9 18:20:31 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/pkgconf/libc.h:
Add some setjmp config's and a macro for the noreturn attribute
 
* include/setjmp.h, include/setjmp.inl, src/clibincl/setjmpsupp.hxx,
src/setjmp/longjmp.cxx, tests/setjmp/setjmp.c:
Added to implement and test setjmp() and longjmp()
 
* src/PKGconf.mak, tests/PKGconf.mak:
Update for newly added files
 
Thu Jun 4 01:29:18 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/string/memchr.cxx, src/string/memcmp.cxx, src/string/strcat.cxx,
src/string/strchr.cxx, src/string/strcmp.cxx, src/string/strcpy.cxx,
src/string/strlen.cxx, src/string/strncat.cxx,
src/string/strncmp.cxx, src/string/strncpy.cxx:
Rename CYGIMP_LIBC_PREFER_SMALL_TO_FAST to
CYGIMP_LIBC_STRING_PREFER_SMALL_TO_FAST
 
Also use slower but smaller version when __OPTIMIZE_SIZE__ is
defined (which comes from using gcc -Os)
 
Fri May 29 16:15:04 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/ctype.inl, src/ctype/isxdigit.cxx:
Fix bug that numerals aren't considered hex digits
 
* include/time.h:
Change clock_t and time_t to be signed so that they can accept -1, as
required by other libc functions
 
* src/clibincl/clibdata.hxx:
Fix typo that CYGIMP_LIBC_THREAD_SUPPORT should be ..._SAFETY
Also fix macro to allocate thread-specific data to not set variables
in a different stack-frame
 
* tests/ctype/ctype.c:
Fix some misunderstandings in tests, and add a few new ones
 
* tests/stdlib/qsort.c:
make ctr unsigned to prevent warnings
 
* tests/stdlib/strtol.c, tests/stdlib/strtoul.c:
Fix some misunderstandings in tests, and add a few new ones
 
* tests/string/strrchr.c:
Fix off by one error
 
* tests/string/strspn.c:
Fix case-sensitivity problem, and off-by-one error
 
* tests/string/strxfrm1.c:
Remove bogus bit of test that doesn't apply to strxfrm, and fix typo
 
 
Fri May 22 16:33:04 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/PKGconf.mak
Remove CXXFLAGS line now that its redundant
* tests/everything!
Do a blitz change of all tests - break some of them down into
different files, add new tests, standardize format, fix bugs,
update for recent header file changes and much more!
 
Wed May 20 17:50:04 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* tests/PKGconf.mak:
interim checkin for different dir structure for Bart
 
Fri May 15 20:30:46 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* Tidy up some loose ends I forgot: rename src/include directory to
src/clibincl. And add clibdata.inl and timesupp.hxx in there.
 
Thu May 14 19:56:32 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* Basically everything has changed in the C library. Files have
been moved, renamed, deleted and reworked. This is a major
revision, and now starts from this new baseline rather than doing
incremental changes.
 
Fri Apr 17 18:43:02 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/ECCconf.mak:
added for new build system (actually Bart did this, but didn't
update this ChangeLog)
 
Fri Apr 17 15:03:25 1998 Hugo Tyson <hmt@cygnus.co.uk>
 
* src/stdio/device/sim.cxx:
Make it build with CYG_EMPTY_STATEMENT; the unadorned one is being
removed.
 
Thu Apr 16 00:24:24 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* All source files:
replace ECCIMP_LIBC_* conditional ifdef with CYGIMP_LIBC_*
 
* include/eccconf/libc.h:
improve comments and reorder a bit
 
Wed Apr 8 14:35:20 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* Makefile.am, src/Makefile.am, tests/Makefile.am, configure.in:
many changes to integrate build structure from release tree
 
* src/ctype/Makefile.am, src/ctype/Makefile.in, src/errno/Makefile.am,
src/errno/Makefile.in, src/stdio/Makefile.am, src/stdio/Makefile.in,
src/stdio/common/Makefile.am, src/stdio/common/Makefile.in,
src/stdio/device/Makefile.am, src/stdio/device/Makefile.in,
src/stdio/output/Makefile.am, src/stdio/output/Makefile.in,
src/stdio/input/Makefile.am, src/stdio/input/Makefile.in,
src/stdlib/Makefile.am, src/stdlib/Makefile.in,
src/string/Makefile.am, src/string/Makefile.in,
src/support/Makefile.am, src/support/Makefile.in,
src/time/Makefile.am, src/time/Makefile.in:
Remove as they are now redundant with above changes
* include/Makefile.am:
Add to support above changes
 
* include/eccconf/libc.h:
Change include file for configuration from kernel to system
 
* src/include/kerndiag.hxx, src/stdio/device/kerndiag.cxx,
src/time/clockfn.cxx:
Change kernel include file to eccconf/kernel.h
 
* src/include/strngdev.h:
remove unnecessary kernel include
* Makefile.in, aclocal.m4, configure, src/Makefile.in,
tests/Makefile.in, include/Makefile.in:
regenerate
 
Mon Apr 6 20:55:07 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdlib/abs.cxx, src/stdlib/atoi.cxx, src/stdlib/atol.cxx,
src/stdlib/div.cxx, src/stdlib/labs.cxx, src/stdlib/ldiv.cxx:
Separated out functions from stdlib.cxx into separate files
 
* src/stdlib/stdlib.cxx:
removed to be replaced by above files
* Makefile.am, src/stdlib/Makefile.am:
modified to support building above and not building stdlib.cxx
 
* src/support/tsd.cxx:
Remove unnecessary header file includes
 
* Makefile.in, src/stdlib/Makefile.in:
regenerated
 
Mon Apr 6 19:19:42 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/support/tsd.cxx, include/eccconf/libc.h:
remove lame hack for tx39 compiler now that its fixed
 
* src/include/sim.hxx:
define constants as static to placate compiler
 
Thu Apr 2 21:01:21 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/ctype/ctype.cxx:
deleted and separated out into below files
* src/ctype/isalnum.cxx, src/ctype/isalpha.cxx, src/ctype/iscntrl.cxx,
src/ctype/isdigit.cxx, src/ctype/isgraph.cxx, src/ctype/islower.cxx,
src/ctype/isprint.cxx, src/ctype/ispunct.cxx, src/ctype/isspace.cxx,
src/ctype/isupper.cxx, src/ctype/isxdigit.cxx, src/ctype/tolower.cxx,
src/ctype/toupper.cxx:
Separated out individual ctype functions from ctype.cxx into separate
files
 
* Makefile.am, src/ctype/Makefile.am:
modified to reflect above deletion/additions
 
* Makefile.in, src/ctype/Makefile.in:
regenerated
Thu Apr 2 19:08:26 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/string/strxfrm.cxx: optimise using prefix increments
 
Thu Apr 2 15:18:15 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/string/strchr.cxx: optimise setting of mask a little
 
Thu Mar 26 14:07:01 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/support/tsd.cxx: fixed some typos
 
Thu Mar 26 11:58:47 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/eccconf/libc.h, src/support/tsd.cxx:
Implement workaround for tx39 compiler bug.
 
* src/include/strsuppt.hxx:
remove prototypes for _memcpy() and _memset() as they are now in the
kernel
 
Wed Mar 25 18:31:53 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* Makefile.am, src/string/Makefile.am: memcpy() and memset() are
now in the kernel so remove them from build
* include/string.h: add a comment to say as much
* Makefile.in, src/string/Makefile.in: regenerate
 
Wed Mar 25 15:30:42 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdlib/_exit.cxx, src/include/file_if.inl:
Change _exit workaround to not cause a compiler optimisation
problem. Now just references _exit rather than calls it.
 
Wed Mar 25 14:59:49 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/string/strxfrm.cxx: Fix bug causing tests to fail completely
for this function
 
Wed Mar 25 12:55:53 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/include/sim.hxx: add types to constants (oops!)
* Makefile.am: link src/stdio/device/sim.cxx
* Makefile.in: regenerated
 
Wed Mar 25 04:14:30 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/include/file_if.hxx, src/include/file_if.inl,
src/include/kerndiag.hxx, src/include/sim.hxx,
src/include/stdio_if.hxx, src/include/strngdev.hxx,
src/include/tsd.hxx, src/stdio/common/clearerr.cxx,
src/stdio/common/clearerr.cxx, src/stdio/common/feof.cxx,
src/stdio/common/ferror.cxx, src/stdio/common/file_if.cxx,
src/stdio/common/vsprintf.cxx,
src/stdio/device/kerndiag.cxx, src/stdio/device/sim.cxx,
src/stdio/device/strngdev.cxx, src/stdio/output/fputc.cxx,
src/stdio/output/fputs.cxx, src/stdio/output/puts.cxx,
src/stdio/output/vfnprintf.cxx, src/support/tsd.cxx:
Modified to support buffered reads including renaming
_EccInternalFileStruct to __EccStdioStream which is what affects
most of these files
* src/include/file_if.inl, src/stdio/common/file_if.cxx: added for
the above reason
* src/stdio/common/sscanf.cxx, src/stdio/input/vfscanf.cxx,
src/stdio/input/Makefile.am: added to provide sscanf() functionality
* include/ctype.h, include/stdio.h, include/stdlib.h,
include/string.h, include/eccconf/libc.h, src/ctype/ctype.cxx,
src/stdlib/stdlib.cxx, src/string/strcoll.cxx,
src/stdio/common/stdio.cxx:
rename *_INLINES macros with prefix CYG rather than ECC
* include/errno.h, src/errno/errno.cxx, src/errno/strerror.cxx:
rename ErrNo to _ErrNo and add EAGAIN and EWOULDBLOCK error codes
* configure.in, Makefile.am, src/stdio/Makefile.am,
src/stdio/input/Makefile.am: add support for building
file_if.cxx sscanf.cxx and vfscanf.cxx
* src/stdio/Makefile.in, src/stdio/common/Makefile.in,
src/stdio/input/Makefile.in, configure, Makefile.in: regenerated
 
Tue Mar 24 19:51:40 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/time/clockfn.cxx, src/time/clock.cxx:
Renamed clock.cxx to clockfn.cxx (preserving CVS history)
* Makefile.am, src/time/Makefile.am: updated to reflect name change
* Makefile.in, src/time/Makefile.in: regenerated
 
Tue Mar 24 16:28:06 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/ctype.inl: Swap around definitions to get right order so
inlining works
 
Tue Mar 24 14:43:05 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/ctype.h, include/stdio.h, include/stdlib.h, include/string.h:
modify to only conditionally include inlines
* src/ctype/ctype.cxx, src/stdio/common/stdio.cxx,
src/stdlib/stdlib.cxx, src/string/strcoll.cxx,
src/ctype/Makefile.am: Add to provide real linkable alternatives
to inline functions
* Makefile.am, configure.in, src/Makefile.am,
src/stdio/common/Makefile.am, src/stdlib/Makefile.am,
src/string/Makefile.am: modified to support previous additions
* include/eccconf/libc.h: redefine inline macro to add extern inline,
and add conditional defines for inline functions. Also rename
space vs. speed macro to have CYG instead of ECC prefix
* include/stdio.inl: fix comment typo
* src/stdlib/qsort.cxx: fix to define inline functions properly
* src/string/memchr.cxx, src/string/memcmp.cxx, src/string/memcpy.cxx,
src/string/memset.cxx, src/string/strcat.cxx, src/string/strchr.cxx,
src/string/strcmp.cxx, src/string/strcpy.cxx, src/string/strlen.cxx,
src/string/strncat.cxx, src/string/strncmp.cxx,
src/string/strncpy.cxx
* Makefile.in, configure, src/Makefile.in, src/ctype/Makefile.in,
src/stdio/common/Makefile.in, src/stdlib/Makefile.in,
src/string/Makefile.in: regenerate
 
Mon Mar 23 19:19:49 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/stdlib/_exit.cxx: added to support temporary _exit
* include/stdlib.h, include/stdlib.inl: added support for _exit and
added abs(), labs(), div() and ldiv() functions
* src/include/file_if.hxx: added support for _exit kludge
* src/stdlib/qsort.cxx: Added Berkeley copyright message
* src/time/clock.cxx: Include correct kernel config header as
CYG_CONFIGURATION rather than <config.h>
* Makefile.am src/stdlib/Makefile.am: added support for _exit
* Makefile.in, src/stdlib/Makefile.in: regenerated
 
Mon Mar 23 14:41:07 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* Replace ECCPKG_ANSI_LIBC with CYGPKG_ANSI_LIBC in all source files
 
Mon Mar 23 14:28:44 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/string.inl: add file to provide strcoll()
* include/string.h: include string.inl
* ctype.h: include ctype.inl (oops!)
* include/stdlib.h: include stdlib.inl (oops!)
 
Mon Mar 23 13:30:38 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/ctype.h, include/ctype.inl: added to provide ANSI ctype
functionality
* include/stdlib.h, include/stdlib.inl, src/include/stdlibbsp.hxx,
src/stdlib/Makefile.am, src/stdlib/bsearch.cxx,
src/stdlib/qsort.cxx, src/stdlib/rand.cxx, src/stdlib/srand.cxx,
src/stdlib/strtol.cxx, src/stdlib/strtoul.cxx: Added to provide
many stdlib functions
* src/include/tsd.hxx: modified to support rand() random number
seed, and added some comments
* configure.in, Makefile.am, src/Makefile.am: modified to support
addition of above new sources
* include/eccconf/libc.h: Add extra helpful comments, and #include
kernel config file
* src/time/clock.cxx: #include clock.inl and fix to call
get_resolution() properly now
* Makefile.in, configure, src/Makefile.in, src/errno/Makefile.in,
src/stdio/Makefile.in, src/stdio/common/Makefile.in,
src/stdio/device/Makefile.in, src/stdio/output/Makefile.in,
src/stdlib/Makefile.in, src/strings/Makefile.in,
src/support/Makefile.in, src/time/Makefile.in,
tests/Makefile.in: regenerated
 
Sun Mar 22 21:29:25 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* include/time.h, src/include/timesupp.hxx, src/time/clock.cxx,
src/time/Makefile.am: added to provide clock() function
* src/Makefile.am: modified to try to build in src/time directory
* include/eccconf/libc.h: added and is now the main configuration
file for this package
* acconfig.h, include/libcconf.h.in, include/stamp-h.in: removed
due to usage of libc.h above instead
* Almost all *.h, *.hxx and *.cxx: replaced LIBC_CONFIG_HEADER
defined include with simple <pkgconf/libc.h>
* configure.in: remove AM_CONFIG_HEADER of libcconf.h and
LIBC_CONFIG_HEADER definition. Also remove usage of builtin
memcpy() etc. from gcc, and generate src/time/Makefile
* Makefile.am: link in src/time/clock.o
* src/include/file_if.hxx, src/include/sim.hxx: use config header
to decide whether C library is to be used
* Makefile.in, aclocal.m4, configure, src/Makefile.in: regenerated
 
Fri Mar 20 18:08:10 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* src/string/strxfrm.cxx: Fixed bug with ignoring terminating NULL
 
1998-03-20 Chris Tarpy <ctarpy@bhaji.cygnus.co.uk>
 
* configure: - regenerated
* Makefile.am: - Support added for libc testcases
* Makefile.in: regenerated
* configure.in: set c compiler, descend test dir
* tests/Makefile.in: added
* tests/Makefile.am: added
* tests/tcdiag.cxx : added
 
 
Thu Mar 19 11:41:56 1998 Jonathan Larmour <jlarmour@cygnus.co.uk>
 
* Initial check-in of everything
 
//===========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//===========================================================================
/v2_0/cdl/time.cdl
0,0 → 1,335
# ====================================================================
#
# time.cdl
#
# C library time related configuration data
#
# ====================================================================
#####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
##
## eCos is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free
## Software Foundation; either version 2 or (at your option) any later version.
##
## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
## WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
## for more details.
##
## You should have received a copy of the GNU General Public License along
## with eCos; if not, write to the Free Software Foundation, Inc.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
##
## As a special exception, if other files instantiate templates or use macros
## or inline functions from this file, or you compile this file and link it
## with other works to produce a work based on this file, this file does not
## by itself cause the resulting work to be covered by the GNU General Public
## License. However the source code for this file must still be made available
## in accordance with section (3) of the GNU General Public License.
##
## This exception does not invalidate any other reasons why a work based on
## this file might be covered by the GNU General Public License.
##
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
## at http://sources.redhat.com/ecos/ecos-license/
## -------------------------------------------
#####ECOSGPLCOPYRIGHTEND####
# ====================================================================
######DESCRIPTIONBEGIN####
#
# Author(s): jlarmour
# Contributors:
# Date: 2000-04-14
#
#####DESCRIPTIONEND####
#
# ====================================================================
 
cdl_package CYGPKG_LIBC_TIME {
display "ISO C library date and time functions"
description "
This package provides time functions specified by the
ISO C standard - ISO/IEC 9899:1990."
doc ref/libc.html
include_dir cyg/libc/time
parent CYGPKG_LIBC
implements CYGINT_ISO_C_TIME_TYPES
implements CYGINT_ISO_C_CLOCK_FUNCS
requires { CYGBLD_ISO_C_TIME_TYPES_HEADER == "<cyg/libc/time/time.h>" }
requires { CYGBLD_ISO_C_CLOCK_FUNCS_HEADER == \
"<cyg/libc/time/time.h>" }
requires CYGPKG_ISOINFRA
requires CYGINT_ISO_DIV
requires CYGINT_ISO_ABS
 
compile asctime.cxx clock.cxx \
ctime.cxx difftime.cxx \
gmtime.cxx localtime.cxx \
mktime.cxx settime.cxx \
strftime.cxx time.cxx \
timeutil.cxx
 
 
# ====================================================================
 
cdl_option CYGSEM_LIBC_TIME_CLOCK_WORKING {
display "Working clock() function"
requires CYGFUN_KERNEL_THREADS_TIMER
requires CYGVAR_KERNEL_COUNTERS_CLOCK
default_value 1
description "
This option controls whether clock() will
actually try and determine the process time
usage. With this option disabled, clock() does
not disappear, but will permanently return
(clock_t)-1 as mandated by the ISO C standard."
}
cdl_option CYGSEM_LIBC_TIME_TIME_WORKING {
display "Working time() function"
requires CYGPKG_IO_WALLCLOCK
default_value 1
description "
This option controls whether time() will
actually try and determine the current calendar
time. With this option disabled, time() does
not disappear, but will permanently return
(time_t)-1 as mandated by the ISO C standard."
}
cdl_option CYGSEM_LIBC_TIME_SETTIME_WORKING {
display "Working cyg_libc_time_settime() function"
requires CYGPKG_IO_WALLCLOCK
default_value 1
description "
This option controls whether cyg_libc_time_settime()
will actually try and set the current calendar
time. With this option disabled,
cyg_libc_time_settime() does not disappear, but
will permanently return an error."
}
cdl_option CYGFUN_LIBC_TIME_POSIX {
display "POSIX time functions"
default_value 1
requires CYGFUN_LIBC_STRING_BSD_FUNCS
compile asctime_r.cxx ctime_r.cxx gmtime_r.cxx \
localtime_r.cxx strptime.cxx
description "
Enabling this option allows the use of the
following functions defined in POSIX 1003.1:
asctime_r(), ctime_r(), gmtime_r(), strptime(), and
localtime_r()."
}
 
cdl_option CYGFUN_LIBC_TIME_SUS_EXTNS {
display "Single UNIX extensions"
default_value 0
description "
Enabling this option allows the use of
certain additional conversion specifiers
in the strftime function."
}
 
cdl_component CYGPKG_LIBC_TIME_ZONES {
display "Time zone offsets"
flavor none
description "
These options control the default STandarD (STD)
and Daylight Savings Time (DST)
time offsets so that dates can be set correctly
for the local environment."
cdl_option CYGNUM_LIBC_TIME_DST_DEFAULT_STATE {
display "Default Daylight Savings Time state"
flavor data
legal_values -- -1 to 1
default_value -- -1
description "
This option controls whether the initial
time environment is set up as STD, DST or
unknown. Use the value 1 for DST, 0 for STD,
and (-1) for unknown. This can also be set at
runtime using the cyg_libc_time_setdst()
function."
}
cdl_option CYGNUM_LIBC_TIME_STD_DEFAULT_OFFSET {
display "Default Standard Time offset"
flavor data
legal_values -- -90000 to 90000
default_value -- 0
description "
This option controls the offset from UTC in
seconds when in local Standard Time. This
value can be positive or negative. It
can also be set at run time using the
cyg_libc_time_setzoneoffsets() function."
}
cdl_option CYGNUM_LIBC_TIME_DST_DEFAULT_OFFSET {
display "Default Daylight Savings Time offset"
flavor data
legal_values -- -90000 to 90000
default_value -- 3600
description "
This option controls the offset from UTC in
seconds when in local Daylight Savings Time. This
value can be positive or negative. It
can also be set at run time using the
cyg_libc_time_setzoneoffsets() function."
}
}
cdl_component CYGPKG_LIBC_TIME_INLINES {
display "Inline functions"
flavor none
description "
These options control whether certain functions
are available in inline form. This may lead to
faster code at the expense of code space. But for
some functions, or some functions with constant
arguments, it may in fact lead to smaller code."
cdl_option CYGIMP_LIBC_TIME_ASCTIME_INLINE {
display "asctime()"
default_value 1
description "
Allow the asctime() function to be inlined"
}
cdl_option CYGIMP_LIBC_TIME_CTIME_INLINE {
display "ctime()"
default_value 1
description "
Allow the ctime() function to be inlined"
}
cdl_option CYGIMP_LIBC_TIME_DIFFTIME_INLINE {
display "difftime()"
default_value 1
description "
Allow the difftime() function to be inlined"
}
cdl_option CYGIMP_LIBC_TIME_GMTIME_INLINE {
display "gmtime()"
default_value 1
description "
Allow the gmtime() function to be inlined"
}
cdl_option CYGIMP_LIBC_TIME_LOCALTIME_INLINE {
display "localtime()"
default_value 1
description "
Allow the localtime() function to be inlined"
}
cdl_option CYGIMP_LIBC_TIME_MKTIME_INLINE {
display "mktime()"
default_value 1
description "
Allow the mktime() function to be inlined"
}
cdl_option CYGIMP_LIBC_TIME_ASCTIME_R_INLINE {
display "asctime_r()"
requires CYGFUN_LIBC_TIME_POSIX
default_value 1
description "
Allow the asctime_r() function to be inlined"
}
cdl_option CYGIMP_LIBC_TIME_CTIME_R_INLINE {
display "ctime_r()"
requires CYGFUN_LIBC_TIME_POSIX
default_value 1
description "
Allow the ctime_r() function to be inlined"
}
cdl_option CYGIMP_LIBC_TIME_GMTIME_R_INLINE {
display "gmtime_r()"
requires CYGFUN_LIBC_TIME_POSIX
default_value 1
description "
Allow the gmtime_r() function to be inlined"
}
cdl_option CYGIMP_LIBC_TIME_LOCALTIME_R_INLINE {
display "localtime_r()"
requires CYGFUN_LIBC_TIME_POSIX
default_value 1
description "
Allow the localtime_r() function to be inlined"
}
}
# FIXME: Also want "inline all" and "don't inline any" options which requires
# (or not) all the above, but
# if we do that then we will require the ones that also depend on
# CYGFUN_LIBC_TIME_POSIX :-( Wait for full CDL to fix this
cdl_option CYGNUM_LIBC_TIME_CLOCK_TRACE_LEVEL {
display "clock() tracing level"
flavor data
legal_values 0 to 1
default_value 0
description "
Trace verbosity level for debugging the clock()
function. Increase this value to get
additional trace output when tracing is enabled."
}
 
cdl_component CYGPKG_LIBC_TIME_OPTIONS {
display "C library time functions build options"
flavor none
no_define
description "
Package specific build options including control over
compiler flags used only in building this package,
and details of which tests are built."
 
 
cdl_option CYGPKG_LIBC_TIME_CFLAGS_ADD {
display "Additional compiler flags"
flavor data
no_define
default_value { "-Wno-format" }
description "
This option modifies the set of compiler flags for
building the C library. These flags are used in addition
to the set of global flags."
}
 
cdl_option CYGPKG_LIBC_TIME_CFLAGS_REMOVE {
display "Suppressed compiler flags"
flavor data
no_define
default_value { "" }
description "
This option modifies the set of compiler flags for
building the C library. These flags are removed from
the set of global flags if present."
}
 
cdl_option CYGPKG_LIBC_TIME_TESTS {
display "C library time and date function tests"
flavor data
no_define
calculated {
"tests/asctime tests/clock tests/ctime tests/gmtime tests/localtime tests/mktime tests/strftime tests/time "
. (CYGFUN_LIBC_TIME_POSIX ? "tests/strptime" : "")
}
description "
This option specifies the set of tests for the C library
time and date functions."
}
}
}
 
# ====================================================================
# EOF time.cdl
/v2_0/tests/time.c
0,0 → 1,123
//=================================================================
//
// time.c
//
// Testcase for C library time()
//
//=================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-03-05
// Description: Contains testcode for C library time() function
//
//
//####DESCRIPTIONEND####
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // Configuration header
 
// INCLUDES
 
#include <time.h>
#include <cyg/infra/testcase.h>
 
// CONSTANTS
 
// This defines how many loops before we decide that
// time() doesn't work
#define MAX_TIMEOUT 50000000
 
 
// FUNCTIONS
 
int
main(int argc, char *argv[])
{
time_t t1, t2;
unsigned long ctr;
 
CYG_TEST_INIT();
 
CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library "
"time() function");
 
t1 = time(&t2);
 
CYG_TEST_PASS_FAIL(t1==t2, "time() return value == argument");
if (t1 == (time_t)-1) // unimplemented is just as valid
{
#ifndef CYGSEM_LIBC_TIME_TIME_WORKING
CYG_TEST_PASS_FINISH( "time() returns -1, meaning unimplemented");
#else
CYG_TEST_FAIL("time() returned -1 unnecessarily");
#endif
} // if
 
// First wait for a clock tick
 
for (ctr = 0; ctr<MAX_TIMEOUT; ctr++) {
if ((t2=time(NULL)) > t1)
break; // Hit the next time pulse
}
CYG_TEST_PASS_FAIL( ctr< MAX_TIMEOUT, "time()'s state changes");
#ifdef CYGSEM_LIBC_TIME_SETTIME_WORKING
CYG_TEST_PASS_FAIL(cyg_libc_time_settime(0)==0, "Set time to 0");
t1 = time(NULL);
// give it a small amount of tolerance
CYG_TEST_PASS_FAIL(t1 < 3, "t1 remembered setting");
CYG_TEST_PASS_FAIL(cyg_libc_time_settime(1000)==0, "Set time to 1000");
// give it a small amount of tolerance
CYG_TEST_PASS_FAIL(t1 < 1003, "t1 remembered setting");
#else // ! CYGSEM_LIBC_TIME_SETTIME_WORKING
CYG_TEST_PASS_FAIL(cyg_libc_time_settime(0)!=0,
"Set time expected fail");
#endif // CYGSEM_LIBC_TIME_SETTIME_WORKING
 
CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library "
"time() function");
} // main()
 
// EOF time.c
/v2_0/tests/ctime.c
0,0 → 1,141
//=================================================================
//
// ctime.c
//
// Testcase for C library ctime() function
//
//=================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-03-05
// Description: Contains testcode for C library ctime() function
//
//
//####DESCRIPTIONEND####
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// INCLUDES
 
#include <time.h>
#include <cyg/infra/testcase.h>
 
// HOW TO START TESTS
 
# define START_TEST( test ) test(0)
 
// FUNCTIONS
 
static int my_strcmp(const char *s1, const char *s2)
{
for ( ; *s1 == *s2 ; s1++,s2++ )
{
if ( *s1 == '\0' )
break;
} // for
 
return (*s1 - *s2);
} // my_strcmp()
 
 
static void
test( CYG_ADDRWORD data )
{
time_t t;
char *ret;
// make this predictable - independent of the user option
cyg_libc_time_setzoneoffsets(0, 3600);
cyg_libc_time_setdst( CYG_LIBC_TIME_DSTOFF );
 
t = (time_t)130710184;
 
ret = ctime(&t);
CYG_TEST_PASS_FAIL(!my_strcmp(ret, "Thu Feb 21 20:23:04 1974\n"),
"ctime test #1");
 
t = (time_t)946689894;
 
ret = ctime(&t);
CYG_TEST_PASS_FAIL(!my_strcmp(ret, "Sat Jan 01 01:24:54 2000\n"),
"ctime Y2K test #2");
 
cyg_libc_time_setdst( CYG_LIBC_TIME_DSTON );
 
t = (time_t)-113186106;
 
ret = ctime(&t);
CYG_TEST_PASS_FAIL(!my_strcmp(ret, "Tue Jun 01 00:24:54 1966\n"),
"ctime test #3");
 
#ifdef CYGFUN_LIBC_TIME_POSIX
cyg_libc_time_setdst( CYG_LIBC_TIME_DSTOFF );
 
t = (time_t)915510061;
{
char ret2[26];
 
ret = ctime_r(&t, ret2);
CYG_TEST_PASS_FAIL(!my_strcmp(ret2, "Tue Jan 05 04:21:01 1999\n"),
"ctime_r test #1");
}
#endif
 
CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library "
"ctime() function");
} // test()
 
 
int
main(int argc, char *argv[])
{
CYG_TEST_INIT();
 
CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library "
"ctime() function");
 
START_TEST( test );
 
CYG_TEST_NA("Testing is not applicable to this configuration");
 
} // main()
 
// EOF ctime.c
/v2_0/tests/gmtime.c
0,0 → 1,205
//=================================================================
//
// gmtime.c
//
// Testcase for C library gmtime() function
//
//=================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors:
// Date: 1999-03-05
// Description: Contains testcode for C library gmtime() function
//
//
//####DESCRIPTIONEND####
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// INCLUDES
 
#include <time.h>
#include <cyg/infra/testcase.h>
 
// HOW TO START TESTS
 
# define START_TEST( test ) test(0)
 
// FUNCTIONS
 
static int
cmp_structtm(struct tm *tm1, struct tm *tm2)
{
if ((tm1->tm_sec != tm2->tm_sec) ||
(tm1->tm_min != tm2->tm_min) ||
(tm1->tm_hour != tm2->tm_hour) ||
(tm1->tm_mday != tm2->tm_mday) ||
(tm1->tm_mon != tm2->tm_mon) ||
(tm1->tm_year != tm2->tm_year) ||
(tm1->tm_wday != tm2->tm_wday) ||
(tm1->tm_yday != tm2->tm_yday) ||
(tm1->tm_isdst != tm2->tm_isdst))
return 1;
else
return 0;
}
 
static void
test( CYG_ADDRWORD data )
{
struct tm tm1, *tm2;
time_t t;
// make this predictable - independent of the user option
cyg_libc_time_setzoneoffsets(0, 3600);
cyg_libc_time_setdst( CYG_LIBC_TIME_DSTOFF );
 
tm1.tm_sec = 4;
tm1.tm_min = 23;
tm1.tm_hour = 20;
tm1.tm_mday = 21;
tm1.tm_mon = 1;
tm1.tm_year = 74;
tm1.tm_wday = 4;
tm1.tm_yday = 51;
tm1.tm_isdst = 0;
t = (time_t)130710184;
 
tm2 = gmtime(&t);
CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "gmtime test #1");
 
 
tm1.tm_sec = 1;
tm1.tm_min = 21;
tm1.tm_hour = 4;
tm1.tm_mday = 5;
tm1.tm_mon = 0;
tm1.tm_wday = 2;
tm1.tm_yday = 4;
tm1.tm_year = 99;
tm1.tm_isdst = 0;
 
t = (time_t)915510061;
tm2 = gmtime(&t);
CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "gmtime test #2");
 
tm1.tm_sec = 54;
tm1.tm_min = 24;
tm1.tm_hour = 1;
tm1.tm_mday = 1;
tm1.tm_mon = 0;
tm1.tm_year = 100;
tm1.tm_wday = 6;
tm1.tm_yday = 0;
tm1.tm_isdst = 0;
 
t = (time_t)946689894;
 
tm2 = gmtime(&t);
CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "gmtime Y2K test #3");
 
cyg_libc_time_setdst( CYG_LIBC_TIME_DSTON );
 
tm1.tm_sec = 54;
tm1.tm_min = 24;
tm1.tm_hour = 23;
tm1.tm_mday = 31;
tm1.tm_mon = 4;
tm1.tm_wday = 2;
tm1.tm_yday = 150;
tm1.tm_year = 66;
tm1.tm_isdst = 0;
 
t = (time_t)-113186106;
 
tm2 = gmtime(&t);
CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "gmtime test #4");
 
tm1.tm_sec = 59;
tm1.tm_min = 59;
tm1.tm_hour = 23;
tm1.tm_mday = 31;
tm1.tm_mon = 4;
tm1.tm_wday = 3;
tm1.tm_yday = 151;
tm1.tm_year = 100;
tm1.tm_isdst = 0;
 
t = (time_t)959817599;
 
tm2 = gmtime(&t);
CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "gmtime test #5");
 
tm1.tm_sec = 0;
tm1.tm_min = 0;
tm1.tm_hour = 0;
tm1.tm_mday = 1;
tm1.tm_mon = 5;
tm1.tm_wday = 4;
tm1.tm_yday = 152;
tm1.tm_year = 100;
tm1.tm_isdst = 0;
 
t = (time_t)959817600;
 
tm2 = gmtime(&t);
CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "gmtime test #6");
 
CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library "
"gmtime() function");
} // test()
 
 
int
main(int argc, char *argv[])
{
CYG_TEST_INIT();
 
CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library "
"gmtime() function");
 
START_TEST( test );
 
CYG_TEST_NA("Testing is not applicable to this configuration");
 
} // main()
 
// EOF gmtime.c
/v2_0/tests/asctime.c
0,0 → 1,205
//=================================================================
//
// asctime.c
//
// Testcase for C library asctime() function
//
//=================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors:
// Date: 1999-03-05
// Description: Contains testcode for C library asctime() function
//
//
//####DESCRIPTIONEND####
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// INCLUDES
 
#include <time.h>
#include <cyg/infra/testcase.h>
 
// HOW TO START TESTS
 
# define START_TEST( test ) test(0)
 
// FUNCTIONS
 
 
static int my_strcmp(const char *s1, const char *s2)
{
for ( ; *s1 == *s2 ; s1++,s2++ )
{
if ( *s1 == '\0' )
break;
} // for
 
return (*s1 - *s2);
} // my_strcmp()
 
 
static void
test( CYG_ADDRWORD data )
{
struct tm tm1;
char *ret;
tm1.tm_sec = 4;
tm1.tm_min = 23;
tm1.tm_hour = 20;
tm1.tm_mday = 21;
tm1.tm_mon = 1;
tm1.tm_year = 74;
tm1.tm_wday = 4;
tm1.tm_yday = 51;
tm1.tm_isdst = 0;
 
ret = asctime(&tm1);
 
CYG_TEST_PASS_FAIL(!my_strcmp(ret, "Thu Feb 21 20:23:04 1974\n"),
"asctime test #1");
tm1.tm_sec = 3;
tm1.tm_min = 51;
tm1.tm_hour = 5;
tm1.tm_mday = 2;
tm1.tm_mon = 11;
tm1.tm_year = 68;
tm1.tm_wday = 1;
tm1.tm_yday = 336;
tm1.tm_isdst = 0;
 
ret = asctime(&tm1);
 
CYG_TEST_PASS_FAIL(!my_strcmp(ret, "Mon Dec 02 05:51:03 1968\n"),
"asctime test #2");
 
// make this predictable - independent of the user option
cyg_libc_time_setzoneoffsets(0, 3600);
 
tm1.tm_sec = 3;
tm1.tm_min = 51;
tm1.tm_hour = 5;
tm1.tm_mday = 2;
tm1.tm_mon = 6;
tm1.tm_year = 68;
tm1.tm_wday = 2;
tm1.tm_yday = 183;
tm1.tm_isdst = 1;
 
ret = asctime(&tm1);
 
CYG_TEST_PASS_FAIL(!my_strcmp(ret, "Tue Jul 02 05:51:03 1968\n"),
"asctime test #3");
 
tm1.tm_sec = 0;
tm1.tm_min = 0;
tm1.tm_hour = 0;
tm1.tm_mday = 1;
tm1.tm_mon = 0;
tm1.tm_year = 0;
tm1.tm_wday = 1;
tm1.tm_yday = 0;
tm1.tm_isdst = 0;
 
ret = asctime(&tm1);
 
CYG_TEST_PASS_FAIL(!my_strcmp(ret, "Mon Jan 01 00:00:00 1900\n"),
"asctime test #4");
 
tm1.tm_sec = 0;
tm1.tm_min = 0;
tm1.tm_hour = 0;
tm1.tm_mday = 1;
tm1.tm_mon = 0;
tm1.tm_year = 100;
tm1.tm_wday = 6;
tm1.tm_yday = 0;
tm1.tm_isdst = 0;
 
ret = asctime(&tm1);
 
CYG_TEST_PASS_FAIL(!my_strcmp(ret, "Sat Jan 01 00:00:00 2000\n"),
"asctime Y2K test #5");
 
#ifdef CYGFUN_LIBC_TIME_POSIX
{
char ret2[100];
tm1.tm_sec = 3;
tm1.tm_min = 51;
tm1.tm_hour = 5;
tm1.tm_mday = 2;
tm1.tm_mon = 11;
tm1.tm_year = 68;
tm1.tm_wday = 1;
tm1.tm_yday = 336;
tm1.tm_isdst = 0;
ret = asctime_r(&tm1, ret2);
CYG_TEST_PASS_FAIL((ret==ret2) &&
!my_strcmp(ret, "Mon Dec 02 05:51:03 1968\n"),
"asctime_r test #1");
 
}
#endif
 
 
CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library "
"asctime() function");
} // test()
 
 
int
main(int argc, char *argv[])
{
CYG_TEST_INIT();
 
CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library "
"asctime() function");
 
START_TEST( test );
 
CYG_TEST_NA("Testing is not applicable to this configuration");
 
} // main()
 
// EOF asctime.c
/v2_0/tests/mktime.c
0,0 → 1,177
//=================================================================
//
// mktime.c
//
// Testcase for C library mktime() function
//
//=================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-03-05
// Description: Contains testcode for C library mktime() function
//
//
//####DESCRIPTIONEND####
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// INCLUDES
 
#include <time.h>
#include <cyg/infra/testcase.h>
 
// HOW TO START TESTS
 
# define START_TEST( test ) test(0)
 
// FUNCTIONS
 
static int
cmp_structtm(struct tm *tm1, struct tm *tm2)
{
if ((tm1->tm_sec != tm2->tm_sec) ||
(tm1->tm_min != tm2->tm_min) ||
(tm1->tm_hour != tm2->tm_hour) ||
(tm1->tm_mday != tm2->tm_mday) ||
(tm1->tm_mon != tm2->tm_mon) ||
(tm1->tm_year != tm2->tm_year) ||
(tm1->tm_wday != tm2->tm_wday) ||
(tm1->tm_yday != tm2->tm_yday) ||
(tm1->tm_isdst != tm2->tm_isdst))
return 1;
else
return 0;
}
 
static void
test( CYG_ADDRWORD data )
{
struct tm tm1, tm2;
time_t t;
// make this predictable - independent of the user option
cyg_libc_time_setzoneoffsets(0, 3600);
 
tm1.tm_sec = 4;
tm1.tm_min = 23;
tm1.tm_hour = 20;
tm1.tm_mday = 21;
tm1.tm_mon = 1;
tm1.tm_year = 74;
tm1.tm_isdst = 0;
 
tm2 = tm1;
tm2.tm_wday = 4;
tm2.tm_yday = 51;
 
t = mktime(&tm1);
CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, &tm2), "mktime test #1");
CYG_TEST_PASS_FAIL(t == 130710184, "mktime return test #1");
 
tm1.tm_sec = 61;
tm1.tm_min = 20;
tm1.tm_hour = 4;
tm1.tm_mday = 5;
tm1.tm_mon = 0;
tm1.tm_year = 99;
tm1.tm_isdst = 0;
 
tm2 = tm1;
tm2.tm_sec=1;
tm2.tm_min = 21;
tm2.tm_wday = 2;
tm2.tm_yday = 4;
 
t = mktime(&tm1);
CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, &tm2), "mktime test #2");
CYG_TEST_PASS_FAIL(t == 915510061, "mktime return test #2");
 
tm1.tm_sec = 54;
tm1.tm_min = 24;
tm1.tm_hour = 1;
tm1.tm_mday = 1;
tm1.tm_mon = 0;
tm1.tm_year = 100;
tm1.tm_isdst = 0;
 
tm2 = tm1;
tm2.tm_wday = 6;
tm2.tm_yday = 0;
 
t = mktime(&tm1);
CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, &tm2), "mktime Y2K test #3");
CYG_TEST_PASS_FAIL(t == 946689894, "mktime Y2K return test #3");
 
tm1.tm_sec = 54;
tm1.tm_min = 24;
tm1.tm_hour = 23;
tm1.tm_mday = 31;
tm1.tm_mon = 4;
tm1.tm_year = 66;
tm1.tm_isdst = 1;
 
tm2 = tm1;
tm2.tm_wday = 2;
tm2.tm_yday = 150;
 
t = mktime(&tm1);
CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, &tm2), "mktime test #4");
CYG_TEST_PASS_FAIL(t == -113186106, "mktime return test #4");
 
CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library "
"mktime() function");
} // test()
 
 
int
main(int argc, char *argv[])
{
CYG_TEST_INIT();
 
CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library "
"mktime() function");
 
START_TEST( test );
 
CYG_TEST_NA("Testing is not applicable to this configuration");
 
} // main()
 
// EOF mktime.c
/v2_0/tests/strptime.c
0,0 → 1,118
//=================================================================
//
// strptime.c
//
// Testcase for C library strptime() function
//
//=================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
// Copyright (C) 2003 Gary Thomas
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: gthomas
// Date: 1999-03-05
// Description: Contains testcode for C library strptime() function
//
//
//####DESCRIPTIONEND####
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// INCLUDES
 
#include <time.h>
#include <cyg/infra/testcase.h>
 
// HOW TO START TESTS
 
# define START_TEST( test ) test(0)
 
// FUNCTIONS
 
static int my_strcmp(const char *s1, const char *s2)
{
for ( ; *s1 == *s2 ; s1++,s2++ )
{
if ( *s1 == '\0' )
break;
} // for
 
return (*s1 - *s2);
} // my_strcmp()
 
static void
test( CYG_ADDRWORD data )
{
struct tm tm1;
char s[1000], *sp, *dp, *fp;
size_t size;
dp = "Fri Jan 24 08:33:14 2003";
fp = "%a %b %d %H:%M:%S %Y";
sp = strptime(dp, fp, &tm1);
CYG_TEST_PASS_FAIL(((sp!=NULL) && (*sp=='\0')), "strptime test #1");
size = strftime(s, sizeof(s), fp, &tm1);
CYG_TEST_PASS_FAIL(((size==strlen(dp)) && (my_strcmp(s, dp) == 0)), "strptime test #2");
dp = "Friday January 24 08:33:14 2003";
fp = "%A %B %d %H:%M:%S %Y";
sp = strptime(dp, fp, &tm1);
CYG_TEST_PASS_FAIL(((sp!=NULL) && (*sp=='\0')), "strptime test #3");
size = strftime(s, sizeof(s), fp, &tm1);
CYG_TEST_PASS_FAIL(((size==strlen(dp)) && (my_strcmp(s, dp) == 0)), "strptime test #4");
 
CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library "
"strptime() function");
} // test()
 
 
int
main(int argc, char *argv[])
{
CYG_TEST_INIT();
 
CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library "
"strptime() function");
 
START_TEST( test );
 
CYG_TEST_NA("Testing is not applicable to this configuration");
 
} // main()
 
// EOF strptime.c
/v2_0/tests/localtime.c
0,0 → 1,175
//=================================================================
//
// localtime.c
//
// Testcase for C library localtime() function
//
//=================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-03-05
// Description: Contains testcode for C library localtime() function
//
//
//####DESCRIPTIONEND####
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// INCLUDES
 
#include <time.h>
#include <cyg/infra/testcase.h>
 
// HOW TO START TESTS
 
# define START_TEST( test ) test(0)
 
// FUNCTIONS
 
static int
cmp_structtm(struct tm *tm1, struct tm *tm2)
{
if ((tm1->tm_sec != tm2->tm_sec) ||
(tm1->tm_min != tm2->tm_min) ||
(tm1->tm_hour != tm2->tm_hour) ||
(tm1->tm_mday != tm2->tm_mday) ||
(tm1->tm_mon != tm2->tm_mon) ||
(tm1->tm_year != tm2->tm_year) ||
(tm1->tm_wday != tm2->tm_wday) ||
(tm1->tm_yday != tm2->tm_yday) ||
(tm1->tm_isdst != tm2->tm_isdst))
return 1;
else
return 0;
}
 
static void
test( CYG_ADDRWORD data )
{
struct tm tm1, *tm2;
time_t t;
// make this predictable - independent of the user option
cyg_libc_time_setzoneoffsets(0, 3600);
cyg_libc_time_setdst( CYG_LIBC_TIME_DSTOFF );
 
tm1.tm_sec = 4;
tm1.tm_min = 23;
tm1.tm_hour = 20;
tm1.tm_mday = 21;
tm1.tm_mon = 1;
tm1.tm_year = 74;
tm1.tm_wday = 4;
tm1.tm_yday = 51;
tm1.tm_isdst = 0;
t = (time_t)130710184;
 
tm2 = localtime(&t);
CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "localtime test #1");
 
 
tm1.tm_sec = 1;
tm1.tm_min = 21;
tm1.tm_hour = 4;
tm1.tm_mday = 5;
tm1.tm_mon = 0;
tm1.tm_wday = 2;
tm1.tm_yday = 4;
tm1.tm_year = 99;
tm1.tm_isdst = 0;
 
t = (time_t)915510061;
tm2 = localtime(&t);
CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "localtime test #2");
 
tm1.tm_sec = 54;
tm1.tm_min = 24;
tm1.tm_hour = 1;
tm1.tm_mday = 1;
tm1.tm_mon = 0;
tm1.tm_year = 100;
tm1.tm_wday = 6;
tm1.tm_yday = 0;
tm1.tm_isdst = 0;
 
t = (time_t)946689894;
 
tm2 = localtime(&t);
CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "localtime Y2K test #3");
 
cyg_libc_time_setdst( CYG_LIBC_TIME_DSTON );
 
tm1.tm_sec = 54;
tm1.tm_min = 24;
tm1.tm_hour = 0;
tm1.tm_mday = 1;
tm1.tm_mon = 5;
tm1.tm_wday = 2;
tm1.tm_yday = 150;
tm1.tm_year = 66;
tm1.tm_isdst = 1;
 
t = (time_t)-113186106;
 
tm2 = localtime(&t);
CYG_TEST_PASS_FAIL(!cmp_structtm(&tm1, tm2), "localtime test #4");
 
CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library "
"localtime() function");
} // test()
 
 
int
main(int argc, char *argv[])
{
CYG_TEST_INIT();
 
CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library "
"localtime() function");
 
START_TEST( test );
 
CYG_TEST_NA("Testing is not applicable to this configuration");
 
} // main()
 
// EOF localtime.c
/v2_0/tests/clock.c
0,0 → 1,241
//=================================================================
//
// clock.c
//
// Testcase for C library clock()
//
//=================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): ctarpy, jlarmour
// Contributors:
// Date: 1999-03-05
// Description: Contains testcode for C library clock() function
//
//
//####DESCRIPTIONEND####
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // Configuration header
#include <pkgconf/system.h>
#include <pkgconf/isoinfra.h>
#include <pkgconf/infra.h>
 
#include <cyg/infra/testcase.h>
 
// This test is bound to fail often on the synthetic target -- we
// don't have exclusive access to the CPU.
 
#if defined(CYGPKG_HAL_SYNTH)
# define NA_MSG "Timing accuracy not guaranteed on synthetic target"
#elif !defined(CYGINT_ISO_MAIN_STARTUP)
# define NA_MSG "Requires main() startup"
#elif defined(CYGDBG_USE_TRACING)
# define NA_MSG "Cannot give an accurate test when tracing is enabled"
#endif
 
#ifdef NA_MSG
void
cyg_start(void)
{
CYG_TEST_INIT();
CYG_TEST_NA( NA_MSG );
}
 
#else
 
 
// INCLUDES
 
#include <time.h>
#include <cyg/infra/diag.h>
#include <cyg/hal/hal_cache.h>
#include <cyg/hal/hal_intr.h>
 
 
// CONSTANTS
 
// This defines how many loops before we decide that
// the clock doesnt work
#define MAX_TIMEOUT 100000
 
// Percentage error before we declare fail: range 0 - 100
#define TOLERANCE 40
 
// Number of samples to take
#define SAMPLES 30
 
// We ignore ctrs[0] because it's always 0
// We ignore ctrs[1] because it will always be odd since it was
// the first measurement taken at the start of the looping, and
// the initial clock measurement (in clocks[0]) was not treated as
// part of the loop and therefore can't be considered to take the same
// time.
// We ignore ctrs[2] because it always seems to be substantially faster
// that the other samples. Probably due to cache/timing effect after the
// previous loop.
// Finally, ctrs[3] is skipped because it's also very fast on ARM targets.
 
#define SKIPPED_SAMPLES 6
 
 
// FUNCTIONS
 
static int
my_abs(int i)
{
return (i < 0) ? -i : i;
} // my_abs()
 
 
// Clock measurement is done in a separate function so that alignment
// constraints are deterministic - some processors may perform better
// in loops that are better aligned, so by making it always the same
// function, this is prevented.
// FIXME: how do we guarantee the compiler won't inline this on -O3?
static unsigned long
clock_loop( const int timeout, clock_t prevclock, clock_t *newclock )
{
clock_t c=0;
long i;
 
for (i=0; i<timeout; i++) {
c = clock();
if ( c != prevclock )
break; // Hit the next clock pulse
}
if (i==timeout)
CYG_TEST_FAIL_FINISH("No change in clock state!");
 
// it should not overflow in the lifetime of this test
if (c < prevclock)
CYG_TEST_FAIL_FINISH("Clock decremented!");
 
*newclock = c;
 
return i;
} // clock_loop()
 
// both of these get zeroed out
static unsigned long ctrs[SAMPLES];
static clock_t clocks[SAMPLES];
 
int
main(int argc, char *argv[])
{
unsigned long mean=0, sum=0, maxerr=0;
int i;
 
CYG_TEST_INIT();
 
CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library "
"clock() function");
 
// First disable the caches - they may affect the timing loops
// below - causing the elapsed time during the clock() call to vary.
{
register CYG_INTERRUPT_STATE oldints;
 
HAL_DISABLE_INTERRUPTS(oldints);
HAL_DCACHE_SYNC();
HAL_ICACHE_DISABLE();
HAL_DCACHE_DISABLE();
HAL_DCACHE_SYNC();
HAL_ICACHE_INVALIDATE_ALL();
HAL_DCACHE_INVALIDATE_ALL();
HAL_RESTORE_INTERRUPTS(oldints);
}
 
// This waits for a clock tick, to ensure that we are at the
// start of a clock period. Then sit in a tight loop to get
// the clock period. Repeat this, and make sure that it the
// two timed periods are acceptably close.
 
clocks[0] = clock();
if (clocks[0] == (clock_t)-1) // unimplemented is potentially valid.
{
#ifdef CYGSEM_LIBC_TIME_CLOCK_WORKING
CYG_TEST_FAIL_FINISH( "clock() returns -1, meaning unimplemented");
#else
CYG_TEST_PASS_FINISH( "clock() returns -1, meaning unimplemented");
#endif
} // if
 
// record clocks in a tight consistent loop to avoid random variations
for (i=1; i<SAMPLES; i++) {
ctrs[i] = clock_loop( MAX_TIMEOUT, clocks[i-1], &clocks[i] );
}
 
for (i=0;i<SAMPLES;i++) {
// output what we got - useful for diagnostics of occasional
// test failures
diag_printf("clocks[%d] = %d, ctrs[%d] = %d\n", i, clocks[i],
i, ctrs[i]);
 
// Now we work out the error etc.
if (i>=SKIPPED_SAMPLES) {
sum += ctrs[i];
}
}
 
// deduce out the average
mean = sum / (SAMPLES-SKIPPED_SAMPLES);
 
// now go through valid results and compare against average
for (i=SKIPPED_SAMPLES;i<SAMPLES;i++) {
unsigned long err;
 
err = (100 * my_abs(ctrs[i]-mean)) / mean;
if (err > TOLERANCE) {
diag_printf("mean=%d, ctrs[%d]=%d, err=%d\n", mean, i, ctrs[i],
err);
CYG_TEST_FAIL_FINISH("clock() within tolerance");
}
if (err > maxerr)
maxerr=err;
}
 
diag_printf("mean=%d, maxerr=%d\n", mean, maxerr);
CYG_TEST_PASS_FINISH("clock() stable");
 
} // main()
 
#endif // ifndef NA_MSG
 
// EOF clock.c
/v2_0/tests/strftime.c
0,0 → 1,195
//=================================================================
//
// strftime.c
//
// Testcase for C library strftime() function
//
//=================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//=================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors:
// Date: 1999-03-05
// Description: Contains testcode for C library strftime() function
//
//
//####DESCRIPTIONEND####
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// INCLUDES
 
#include <time.h>
#include <cyg/infra/testcase.h>
 
// HOW TO START TESTS
 
# define START_TEST( test ) test(0)
 
// FUNCTIONS
 
static int my_strcmp(const char *s1, const char *s2)
{
for ( ; *s1 == *s2 ; s1++,s2++ )
{
if ( *s1 == '\0' )
break;
} // for
 
return (*s1 - *s2);
} // my_strcmp()
 
static void
test( CYG_ADDRWORD data )
{
struct tm tm1;
char s[1000];
size_t size;
tm1.tm_sec = 4;
tm1.tm_min = 23;
tm1.tm_hour = 20;
tm1.tm_mday = 21;
tm1.tm_mon = 1;
tm1.tm_year = 74;
tm1.tm_wday = 4;
tm1.tm_yday = 51;
tm1.tm_isdst = 0;
size = strftime(s, 1000, "", &tm1);
CYG_TEST_PASS_FAIL((size==0) && (*s=='\0'), "strftime test #1");
 
size = strftime(s, 1000, "%a", &tm1);
CYG_TEST_PASS_FAIL((size==3) && !my_strcmp(s, "Thu"), "strftime test #2");
 
size = strftime(s, 1000, "%A", &tm1);
CYG_TEST_PASS_FAIL((size==8) && !my_strcmp(s, "Thursday"),
"strftime test #3");
 
size = strftime(s, 1000, "%b", &tm1);
CYG_TEST_PASS_FAIL((size==3) && !my_strcmp(s, "Feb"),
"strftime test #4");
 
size = strftime(s, 1000, "%B", &tm1);
CYG_TEST_PASS_FAIL((size==8) && !my_strcmp(s, "February"),
"strftime test #5");
 
size = strftime(s, 1000, "%d", &tm1);
CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "21"),
"strftime test #6");
 
size = strftime(s, 1000, "%H", &tm1);
CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "20"),
"strftime test #7");
 
size = strftime(s, 1000, "%I", &tm1);
CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "09"),
"strftime test #8");
 
size = strftime(s, 1000, "%j", &tm1);
CYG_TEST_PASS_FAIL((size==3) && !my_strcmp(s, "051"),
"strftime test #9");
 
size = strftime(s, 1000, "%m", &tm1);
CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "02"),
"strftime test #10");
 
size = strftime(s, 1000, "%M", &tm1);
CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "23"),
"strftime test #11");
 
size = strftime(s, 1000, "%p", &tm1);
CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "pm"),
"strftime test #12");
 
size = strftime(s, 1000, "%S", &tm1);
CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "04"),
"strftime test #13");
 
size = strftime(s, 1000, "%U", &tm1);
CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "07"),
"strftime test #14");
 
size = strftime(s, 1000, "%w", &tm1);
CYG_TEST_PASS_FAIL((size==1) && !my_strcmp(s, "4"),
"strftime test #15");
 
size = strftime(s, 1000, "%W", &tm1);
CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "07"),
"strftime test #16");
 
size = strftime(s, 1000, "%y", &tm1);
CYG_TEST_PASS_FAIL((size==2) && !my_strcmp(s, "74"),
"strftime test #17");
 
size = strftime(s, 1000, "%Y", &tm1);
CYG_TEST_PASS_FAIL((size==4) && !my_strcmp(s, "1974"),
"strftime test #18");
 
size = strftime(s, 1000, "%%", &tm1);
CYG_TEST_PASS_FAIL((size==1) && !my_strcmp(s, "%"),
"strftime test #19");
 
size = strftime(s, 5, "%Y", &tm1);
CYG_TEST_PASS_FAIL((size==4) && !my_strcmp(s, "1974"),
"strftime test #20");
 
size = strftime(s, 4, "%Y", &tm1);
CYG_TEST_PASS_FAIL((size==0), "strftime test #21");
 
 
CYG_TEST_FINISH("Finished tests from testcase " __FILE__ " for C library "
"strftime() function");
} // test()
 
 
int
main(int argc, char *argv[])
{
CYG_TEST_INIT();
 
CYG_TEST_INFO("Starting tests from testcase " __FILE__ " for C library "
"strftime() function");
 
START_TEST( test );
 
CYG_TEST_NA("Testing is not applicable to this configuration");
 
} // main()
 
// EOF strftime.c
/v2_0/include/time.inl
0,0 → 1,820
#ifndef CYGONCE_LIBC_TIME_INL
#define CYGONCE_LIBC_TIME_INL
//===========================================================================
//
// time.inl
//
// Inline implementations of date and time routines from <time.h>
//
//===========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//===========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors:
// Date: 1999-02-25
// Purpose: Provide inline implementations for some of the date and time
// routines declared in <time.h> for ISO C section 7.12 and
// POSIX 1003.1 8.3.4-8.3.7
// Description:
// Usage: Do not include this file directly. Instead include <time.h>
//
//####DESCRIPTIONEND####
//
//===========================================================================
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// INCLUDES
 
#include <cyg/infra/cyg_type.h> // Common type definitions and support
#include <time.h> // Header for this file
#include <cyg/infra/cyg_ass.h> // Assertion infrastructure
#include <cyg/infra/cyg_trac.h> // Tracing infrastructure
 
// DEFINES
 
// The following are overriden by the libc implementation to get a non-inline
// version to prevent duplication of code
 
#ifndef CYGPRI_LIBC_TIME_ASCTIME_R_INLINE
# define CYGPRI_LIBC_TIME_ASCTIME_R_INLINE extern __inline__
#endif
 
#ifndef CYGPRI_LIBC_TIME_CTIME_R_INLINE
# define CYGPRI_LIBC_TIME_CTIME_R_INLINE extern __inline__
#endif
 
#ifndef CYGPRI_LIBC_TIME_GMTIME_R_INLINE
# define CYGPRI_LIBC_TIME_GMTIME_R_INLINE extern __inline__
#endif
 
#ifndef CYGPRI_LIBC_TIME_LOCALTIME_R_INLINE
# define CYGPRI_LIBC_TIME_LOCALTIME_R_INLINE extern __inline__
#endif
 
#ifndef CYGPRI_LIBC_TIME_DIFFTIME_INLINE
# define CYGPRI_LIBC_TIME_DIFFTIME_INLINE extern __inline__
#endif
 
#ifndef CYGPRI_LIBC_TIME_MKTIME_INLINE
# define CYGPRI_LIBC_TIME_MKTIME_INLINE extern __inline__
#endif
 
#ifndef CYGPRI_LIBC_TIME_ASCTIME_INLINE
# define CYGPRI_LIBC_TIME_ASCTIME_INLINE extern __inline__
#endif
 
#ifndef CYGPRI_LIBC_TIME_CTIME_INLINE
# define CYGPRI_LIBC_TIME_CTIME_INLINE extern __inline__
#endif
 
#ifndef CYGPRI_LIBC_TIME_GMTIME_INLINE
# define CYGPRI_LIBC_TIME_GMTIME_INLINE extern __inline__
#endif
 
#ifndef CYGPRI_LIBC_TIME_LOCALTIME_INLINE
# define CYGPRI_LIBC_TIME_LOCALTIME_INLINE extern __inline__
#endif
 
#ifndef CYGPRI_LIBC_TIME_GETZONEOFFSETS_INLINE
# define CYGPRI_LIBC_TIME_GETZONEOFFSETS_INLINE extern __inline__
#endif
 
#ifndef CYGPRI_LIBC_TIME_SETZONEOFFSETS_INLINE
# define CYGPRI_LIBC_TIME_SETZONEOFFSETS_INLINE extern __inline__
#endif
 
#ifndef CYGPRI_LIBC_TIME_SETDST_INLINE
# define CYGPRI_LIBC_TIME_SETDST_INLINE extern __inline__
#endif
 
#define CYGNUM_LIBC_TIME_EPOCH_WDAY 4 // Jan 1st 1970 was a Thursday
 
#ifdef __cplusplus
extern "C" {
#endif
 
// EXTERNS
 
// These are used in the dst access functions below. Do not access these
// directly - use the functions declared in time.h instead
 
extern Cyg_libc_time_dst cyg_libc_time_current_dst_stat;
extern time_t cyg_libc_time_current_std_offset;
extern time_t cyg_libc_time_current_dst_offset;
 
// INLINE FUNCTIONS
 
//===========================================================================
//
// Utility functions
 
//////////////////////////////////
// cyg_libc_time_year_is_leap() //
//////////////////////////////////
//
// This returns true if the year is a leap year.
// The argument is of type int in line with struct tm
//
 
static __inline__ cyg_bool
cyg_libc_time_year_is_leap( int __year )
{
cyg_bool _leap=false;
 
if (!(__year % 400))
_leap = true;
else if (!(__year % 4) && (__year % 100))
_leap = true;
return _leap;
} // cyg_libc_time_year_is_leap()
 
 
////////////////////////////////////
// cyg_libc_time_getzoneoffsets() //
////////////////////////////////////
//
// This function retrieves the current state of the Daylight Savings Time
// and the offsets of both STD and DST
// The offsets are both in time_t's i.e. seconds
//
 
CYGPRI_LIBC_TIME_GETZONEOFFSETS_INLINE Cyg_libc_time_dst
cyg_libc_time_getzoneoffsets( time_t *__stdoffset, time_t *__dstoffset )
{
CYG_REPORT_FUNCNAMETYPE("cyg_libc_time_getzoneoffsets",
"returning DST state %d");
CYG_REPORT_FUNCARG2("__stdoffset is at address %08x, "
"__dstoffset is at %08x", __stdoffset, __dstoffset);
 
CYG_CHECK_DATA_PTR(__stdoffset, "__stdoffset is not a valid pointer!");
CYG_CHECK_DATA_PTR(__dstoffset, "__dstoffset is not a valid pointer!");
 
*__stdoffset = cyg_libc_time_current_std_offset;
*__dstoffset = cyg_libc_time_current_dst_offset;
 
CYG_REPORT_RETVAL(cyg_libc_time_current_dst_stat);
 
return cyg_libc_time_current_dst_stat;
} // cyg_libc_time_getzoneoffsets()
 
 
////////////////////////////////////
// cyg_libc_time_setzoneoffsets() //
////////////////////////////////////
//
// This function sets the offsets used when Daylight Savings Time is enabled
// or disabled. The offsets are in time_t's i.e. seconds
//
 
CYGPRI_LIBC_TIME_SETZONEOFFSETS_INLINE void
cyg_libc_time_setzoneoffsets( time_t __stdoffset, time_t __dstoffset )
{
CYG_REPORT_FUNCNAME("cyg_libc_time_setzoneoffsets");
CYG_REPORT_FUNCARG2DV(__stdoffset, __dstoffset);
 
cyg_libc_time_current_std_offset = __stdoffset;
cyg_libc_time_current_dst_offset = __dstoffset;
 
CYG_REPORT_RETURN();
} // cyg_libc_time_setzoneoffsets()
 
 
////////////////////////////
// cyg_libc_time_setdst() //
////////////////////////////
//
// This function sets the state of Daylight Savings Time: on, off, or unknown
//
 
CYGPRI_LIBC_TIME_SETDST_INLINE void
cyg_libc_time_setdst( Cyg_libc_time_dst __state )
{
CYG_REPORT_FUNCNAME("cyg_libc_time_setdst");
CYG_REPORT_FUNCARG1("__state=%d", __state);
 
cyg_libc_time_current_dst_stat = __state;
 
CYG_REPORT_RETURN();
} // cyg_libc_time_setdst()
 
 
 
//===========================================================================
//
// POSIX 1003.1 functions
 
/////////////////////////////////
// asctime_r() - POSIX.1 8.3.4 //
/////////////////////////////////
//
// This returns a textual representation of a struct tm, and writes
// the string to return into __buf
//
 
#ifdef CYGFUN_LIBC_TIME_POSIX
# define __asctime_r asctime_r
#else
// prototype internal function
__externC char *
__asctime_r( const struct tm *__timeptr, char *__buf );
#endif
 
#ifdef CYGIMP_LIBC_TIME_ASCTIME_R_INLINE
 
#include <cyg/libc/time/timeutil.h> // for cyg_libc_time_{day,month}_name
// and cyg_libc_time_itoa()
#include <string.h> // for memcpy()
 
CYGPRI_LIBC_TIME_ASCTIME_R_INLINE char *
__asctime_r( const struct tm *__timeptr, char *__buf )
{
cyg_uint8 __i;
// These initializers are [4] since C++ dictates you _must_ leave space
// for the trailing '\0', even though ISO C says you don't need to!
 
CYG_REPORT_FUNCNAMETYPE("asctime_r", "returning \"%s\"");
CYG_REPORT_FUNCARG2("__timeptr = %08x, __buf = %08x", __timeptr, __buf);
 
// paranoia - most of these aren't required but could be helpful to
// a programmer debugging their own app.
CYG_CHECK_DATA_PTR(__timeptr, "__timeptr is not a valid pointer!");
CYG_CHECK_DATA_PTR(__buf, "__buf is not a valid pointer!");
 
CYG_PRECONDITION((__timeptr->tm_sec >= 0) && (__timeptr->tm_sec < 62),
"__timeptr->tm_sec out of range!");
CYG_PRECONDITION((__timeptr->tm_min >= 0) && (__timeptr->tm_min < 60),
"__timeptr->tm_min out of range!");
CYG_PRECONDITION((__timeptr->tm_hour >= 0) && (__timeptr->tm_hour < 24),
"__timeptr->tm_hour out of range!");
// Currently I don't check _actual_ numbers of days in each month here
// FIXME: No reason why not though
CYG_PRECONDITION((__timeptr->tm_mday >= 1) && (__timeptr->tm_mday < 32),
"__timeptr->tm_mday out of range!");
CYG_PRECONDITION((__timeptr->tm_mon >= 0) && (__timeptr->tm_mon < 12),
"__timeptr->tm_mon out of range!");
CYG_PRECONDITION((__timeptr->tm_wday >= 0) && (__timeptr->tm_wday < 7),
"__timeptr->tm_wday out of range!");
CYG_PRECONDITION((__timeptr->tm_yday >= 0) && (__timeptr->tm_yday < 366),
"__timeptr->tm_yday out of range!");
CYG_PRECONDITION((__timeptr->tm_year > -1900) &&
(__timeptr->tm_year < 8100),
"__timeptr->tm_year out of range!");
// we can't use strftime because ISO C is stupid enough not to allow
// the strings in asctime() to be localized. Duh.
 
// day of the week
memcpy(&__buf[0], cyg_libc_time_day_name[__timeptr->tm_wday], 3);
__buf[3] = ' ';
 
// month
memcpy(&__buf[4], cyg_libc_time_month_name[__timeptr->tm_mon], 3);
__buf[7] = ' ';
 
__i = 8;
 
// day of the month
__i += cyg_libc_time_itoa( (cyg_uint8 *)&__buf[__i], __timeptr->tm_mday, 2,
true);
__buf[__i++] = ' ';
 
// hour
__i += cyg_libc_time_itoa( (cyg_uint8 *)&__buf[__i], __timeptr->tm_hour, 2,
true);
__buf[__i++] = ':';
 
// minute
__i += cyg_libc_time_itoa( (cyg_uint8 *)&__buf[__i], __timeptr->tm_min, 2,
true);
__buf[__i++] = ':';
 
// second
__i += cyg_libc_time_itoa((cyg_uint8 *) &__buf[__i], __timeptr->tm_sec, 2,
true);
__buf[__i++] = ' ';
 
// year
__i += cyg_libc_time_itoa( (cyg_uint8 *)&__buf[__i],
1900+__timeptr->tm_year, 0, true);
__buf[__i++] = '\n';
__buf[__i++] = '\0';
 
CYG_REPORT_RETVAL(__buf);
return __buf;
} // asctime_r()
 
#endif // ifdef CYGIMP_LIBC_TIME_ASCTIME_R_INLINE
 
////////////////////////////////
// gmtime_r() - POSIX.1 8.3.6 //
////////////////////////////////
//
// This converts a time_t into a struct tm expressed in UTC, and stores
// the result in the space occupied by __result
//
 
#ifdef CYGFUN_LIBC_TIME_POSIX
# define __gmtime_r gmtime_r
#else
// prototype internal function
__externC struct tm *
__gmtime_r( const time_t *__timer, struct tm *__result );
#endif
 
#ifdef CYGIMP_LIBC_TIME_GMTIME_R_INLINE
 
#include <cyg/libc/time/timeutil.h> // for cyg_libc_time_month_lengths
 
CYGPRI_LIBC_TIME_GMTIME_R_INLINE struct tm *
__gmtime_r( const time_t *__timer, struct tm *__result )
{
time_t _tim;
const cyg_uint8 *_months_p;
 
CYG_REPORT_FUNCNAMETYPE("gmtime_r", "returning %08x");
CYG_CHECK_DATA_PTR(__timer, "__timer is not a valid pointer!");
CYG_CHECK_DATA_PTR(__result, "__result is not a valid pointer!");
CYG_REPORT_FUNCARG2("*__timer=%d, __result is at %08x",
*__timer, __result);
 
#define CYGNUM_LIBC_TIME_SECSPERDAY (60*60*24)
#define CYGNUM_LIBC_TIME_SECSPERYEAR (CYGNUM_LIBC_TIME_SECSPERDAY * 365)
#define CYGNUM_LIBC_TIME_SECSPERLEAPYEAR (CYGNUM_LIBC_TIME_SECSPERDAY * 366)
 
_tim = *__timer;
 
// First, work out year. Start off with 1970 and work forwards or backwards
// depending on the sign of _tim
__result->tm_year = 70;
 
// we also work out the day of the week of the start of the year as we
// go along
__result->tm_wday = CYGNUM_LIBC_TIME_EPOCH_WDAY;
 
while (_tim < 0) {
// Work backwards
 
--__result->tm_year;
 
// Check for a leap year.
if (cyg_libc_time_year_is_leap(1900 + __result->tm_year)) {
_tim += CYGNUM_LIBC_TIME_SECSPERLEAPYEAR;
__result->tm_wday -= 366;
} // if
else {
_tim += CYGNUM_LIBC_TIME_SECSPERYEAR;
__result->tm_wday -= 365;
} // else
 
} // while
 
while (_tim >= CYGNUM_LIBC_TIME_SECSPERYEAR) {
// Work forwards
 
if (cyg_libc_time_year_is_leap(1900 + __result->tm_year)) {
// But if this is a leap year, its possible that we are in the
// middle of the last "extra" day
if (_tim < CYGNUM_LIBC_TIME_SECSPERLEAPYEAR)
break;
 
_tim -= CYGNUM_LIBC_TIME_SECSPERLEAPYEAR;
__result->tm_wday += 366;
} // if
else {
_tim -= CYGNUM_LIBC_TIME_SECSPERYEAR;
__result->tm_wday += 365;
}
++__result->tm_year;
} // while
 
// Day of the year. We know _tim is +ve now
CYG_ASSERT(_tim >= 0,
"Number of seconds since start of year is negative!");
__result->tm_yday = _tim / CYGNUM_LIBC_TIME_SECSPERDAY;
 
// Day of the week. Normalize to be 0..6, and note that it might
// be negative, so we have to deal with the modulus being
// implementation-defined for -ve numbers (ISO C 6.3.5)
__result->tm_wday = (((__result->tm_wday + __result->tm_yday)%7)+7)%7;
// Month and Day of the month
 
_months_p = cyg_libc_time_month_lengths[
cyg_libc_time_year_is_leap(1900 + __result->tm_year) ? 1 : 0 ];
 
__result->tm_mday = __result->tm_yday+1;
 
for (__result->tm_mon = 0;
__result->tm_mday > _months_p[__result->tm_mon];
++__result->tm_mon) {
__result->tm_mday -= _months_p[__result->tm_mon];
 
} // for
 
_tim -= __result->tm_yday*CYGNUM_LIBC_TIME_SECSPERDAY;
 
// hours, mins secs
__result->tm_hour = (int) (_tim / 3600);
_tim %= 3600;
__result->tm_min = (int) (_tim / 60);
__result->tm_sec = (int) (_tim % 60);
 
__result->tm_isdst = 0; // gmtime always returns non-DST
 
CYG_REPORT_RETVAL(__result);
 
return __result;
} // gmtime_r()
 
#endif // ifdef CYGIMP_LIBC_TIME_GMTIME_R_INLINE
 
///////////////////////////////////
// localtime_r() - POSIX.1 8.3.7 //
///////////////////////////////////
//
// This converts a time_t into a struct tm expressed in local time, and
// stores the result in the space occupied by __result
//
 
#ifdef CYGFUN_LIBC_TIME_POSIX
# define __localtime_r localtime_r
#else
// prototype internal function
__externC struct tm *
__localtime_r( const time_t *__timer, struct tm *__result );
#endif
 
#ifdef CYGIMP_LIBC_TIME_LOCALTIME_R_INLINE
 
#include <cyg/libc/time/timeutil.h> // for cyg_libc_time_normalize_structtm()
 
CYGPRI_LIBC_TIME_LOCALTIME_R_INLINE struct tm *
__localtime_r( const time_t *__timer, struct tm *__result )
{
time_t __stdoffset, __dstoffset;
CYG_REPORT_FUNCNAMETYPE("localtime_r", "returning %08x");
CYG_CHECK_DATA_PTR(__timer, "__timer is not a valid pointer!");
CYG_CHECK_DATA_PTR(__result, "__result is not a valid pointer!");
CYG_REPORT_FUNCARG2("*__timer=%d, __result is at %08x",
*__timer, __result);
 
__gmtime_r(__timer, __result);
 
// Adjust for STD/DST
__result->tm_isdst = cyg_libc_time_getzoneoffsets(&__stdoffset,
&__dstoffset);
 
if (__result->tm_isdst == 0) { // STD
__result->tm_sec += __stdoffset;
cyg_libc_time_normalize_structtm( __result );
} // if
else if (__result->tm_isdst > 0) { // DST
__result->tm_sec += __dstoffset;
cyg_libc_time_normalize_structtm( __result );
} // if
// Don't do anything for tm_isdst == -1
 
CYG_REPORT_RETVAL(__result);
 
return __result;
} // localtime_r()
 
#endif // ifdef CYGIMP_LIBC_TIME_LOCALTIME_R_INLINE
 
 
///////////////////////////////
// ctime_r() - POSIX.1 8.3.5 //
///////////////////////////////
//
// This returns the equivalent of ctime() but writes to __buf
// to store the returned string
//
 
#ifdef CYGFUN_LIBC_TIME_POSIX
# define __ctime_r ctime_r
#else
// prototype internal function
__externC char *
__ctime_r( const time_t *__timer, char *__buf );
#endif
 
#ifdef CYGIMP_LIBC_TIME_CTIME_R_INLINE
 
CYGPRI_LIBC_TIME_CTIME_R_INLINE char *
__ctime_r( const time_t *__timer, char *__buf )
{
struct tm _mytm;
 
CYG_REPORT_FUNCNAMETYPE("ctime_r", "returning \"%s\"");
 
CYG_CHECK_DATA_PTR(__timer, "__timer is not a valid pointer!");
CYG_CHECK_DATA_PTR(__buf, "__buf is not a valid pointer!");
 
CYG_REPORT_FUNCARG2("*__timer = %d, __buf=%08x", *__timer, __buf);
 
__localtime_r( __timer, &_mytm );
 
__asctime_r(&_mytm, __buf);
 
CYG_REPORT_RETVAL(__buf);
 
return __buf;
} // ctime_r()
 
#endif // ifdef CYGIMP_LIBC_TIME_CTIME_R_INLINE
 
 
//===========================================================================
//
// ISO C functions
 
// Time manipulation functions - ISO C 7.12.2
 
/////////////////////////////////
// difftime() - ISO C 7.12.2.2 //
/////////////////////////////////
//
// This returns (__time1 - __time0) in seconds
//
 
#ifdef CYGIMP_LIBC_TIME_DIFFTIME_INLINE
 
CYGPRI_LIBC_TIME_DIFFTIME_INLINE double
difftime( time_t __time1, time_t __time0 )
{
double _ret;
CYG_REPORT_FUNCNAMETYPE("difftime", "returning %f");
CYG_REPORT_FUNCARG2("__time1=%d, __time0=%d", __time1, __time0);
 
_ret = (double)(__time1 - __time0);
CYG_REPORT_RETVAL(_ret);
 
return _ret;
} // difftime()
 
#endif // ifdef CYGIMP_LIBC_TIME_DIFFTIME_INLINE
 
///////////////////////////////
// mktime() - ISO C 7.12.2.3 //
///////////////////////////////
//
// This converts a "struct tm" to a "time_t"
//
 
#ifdef CYGIMP_LIBC_TIME_MKTIME_INLINE
 
#include <cyg/libc/time/timeutil.h> // for cyg_libc_time_normalize_structtm()
// and cyg_libc_time_month_lengths
 
CYGPRI_LIBC_TIME_MKTIME_INLINE time_t
mktime( struct tm *__timeptr )
{
time_t _ret;
cyg_count16 _i;
cyg_count32 _daycount;
cyg_bool _leap;
 
CYG_REPORT_FUNCNAMETYPE("mktime", "returning %d");
CYG_REPORT_FUNCARG1( "__timeptr is at address %08x", __timeptr);
 
CYG_CHECK_DATA_PTR(__timeptr, "__timeptr is not a valid pointer!");
 
// First deal with STD/DST. If tm_isdst==-1 (the "autodetect" value)
// we assume its already in UTC. FIXME: is this correct behaviour? Hmm....
 
#if 0
// FIXME: This doesn't seem to be the way to go
if (__timeptr->tm_isdst == 0) { // STD
// take _off_ the std offset to get us back to UTC from localtime
__timeptr->tm_sec -= (int)cyg_libc_time_current_std_offset;
} // if
else if (__timeptr->tm_isdst > 0) { // DST
// take _off_ the dst offset to get us back to UTC from localtime
__timeptr->tm_sec -= (int)cyg_libc_time_current_dst_offset;
} // if
#endif
cyg_libc_time_normalize_structtm(__timeptr);
 
// check if a time_t can hold the year. FIXME: we assume it is
// 32 bits which gives the year range 1902 - 2038
if ( (__timeptr->tm_year <= 2) || (__timeptr->tm_year >= 138) ) {
CYG_REPORT_RETVAL(-1);
return (time_t)-1;
}
 
// fill in the rest of the struct tm i.e. tm_wday and tm_yday
_leap = cyg_libc_time_year_is_leap(1900 + __timeptr->tm_year);
 
for (_i=0, _daycount=0; _i<12; ++_i) {
if (_i == __timeptr->tm_mon) {
_daycount += __timeptr->tm_mday - 1;
break;
} // if
else {
_daycount += cyg_libc_time_month_lengths[_leap][_i];
} // else
} // for
 
CYG_ASSERT(_i<12, "Reached end of year. __timeptr->tm_mon must be bad");
 
__timeptr->tm_yday = _daycount;
// now tm_wday
 
if (__timeptr->tm_year > 70) {
for (_i=70; _i < __timeptr->tm_year; ++_i)
_daycount += (cyg_libc_time_year_is_leap(1900 + _i) ? 366 : 365);
} // if
else if (__timeptr->tm_year < 70) {
for (_i=70; _i > __timeptr->tm_year; --_i)
_daycount -= (cyg_libc_time_year_is_leap(1900 + _i-1) ? 366 : 365);
} // else if
 
__timeptr->tm_wday = (_daycount + CYGNUM_LIBC_TIME_EPOCH_WDAY) % 7;
 
// if _daycount was negative, on some targets the modulo operator will
// return negative, so we adjust for that
 
if (__timeptr->tm_wday < 0)
__timeptr->tm_wday += 7;
 
// now finally work out return value
 
_ret = __timeptr->tm_sec + 60*__timeptr->tm_min + 60*60*__timeptr->tm_hour;
_ret += _daycount*24*60*60;
CYG_REPORT_RETVAL(_ret);
 
return _ret;
} // mktime()
 
#endif // ifdef CYGIMP_LIBC_TIME_MKTIME_INLINE
 
 
// Time conversion functions - ISO C 7.12.3
 
////////////////////////////////
// asctime() - ISO C 7.12.3.1 //
////////////////////////////////
//
// This returns a textual representation of a struct tm
//
 
#ifdef CYGIMP_LIBC_TIME_ASCTIME_INLINE
 
extern char cyg_libc_time_asctime_buf[];
 
CYGPRI_LIBC_TIME_ASCTIME_INLINE char *
asctime( const struct tm *__timeptr )
{
CYG_REPORT_FUNCNAMETYPE("__asctime", "returning \"%s\"");
CYG_REPORT_FUNCARG1("__timeptr = %08x", __timeptr);
 
// paranoia
CYG_CHECK_DATA_PTR(__timeptr, "__timeptr is not a valid pointer!");
 
(void)__asctime_r( __timeptr, cyg_libc_time_asctime_buf );
 
CYG_REPORT_RETVAL(cyg_libc_time_asctime_buf);
 
return cyg_libc_time_asctime_buf;
} // asctime()
 
#endif // ifdef CYGIMP_LIBC_TIME_ASCTIME_INLINE
 
 
///////////////////////////////
// gmtime() - ISO C 7.12.3.3 //
///////////////////////////////
//
// This converts a time_t into a struct tm expressed in UTC
//
 
#ifdef CYGIMP_LIBC_TIME_GMTIME_INLINE
 
extern struct tm cyg_libc_time_gmtime_buf;
 
CYGPRI_LIBC_TIME_GMTIME_INLINE struct tm *
gmtime( const time_t *__timer )
{
CYG_REPORT_FUNCNAMETYPE("gmtime", "returning %08x");
CYG_CHECK_DATA_PTR(__timer, "__timer is not a valid pointer!");
CYG_REPORT_FUNCARG1("*__timer=%d", *__timer);
 
__gmtime_r(__timer, &cyg_libc_time_gmtime_buf);
 
CYG_REPORT_RETVAL(&cyg_libc_time_gmtime_buf);
 
return &cyg_libc_time_gmtime_buf;
} // gmtime()
 
#endif // ifdef CYGIMP_LIBC_TIME_GMTIME_INLINE
 
 
//////////////////////////////////
// localtime() - ISO C 7.12.3.4 //
//////////////////////////////////
//
// This converts a time_t into a struct tm expressed in local time
//
 
#ifdef CYGIMP_LIBC_TIME_LOCALTIME_INLINE
 
extern struct tm cyg_libc_time_localtime_buf;
 
CYGPRI_LIBC_TIME_LOCALTIME_INLINE struct tm *
localtime( const time_t *__timer )
{
CYG_REPORT_FUNCNAMETYPE("localtime", "returning %08x");
CYG_CHECK_DATA_PTR(__timer, "__timer is not a valid pointer!");
CYG_REPORT_FUNCARG1("*__timer=%d", *__timer);
 
__localtime_r(__timer, &cyg_libc_time_localtime_buf);
 
CYG_REPORT_RETVAL(&cyg_libc_time_localtime_buf);
 
return &cyg_libc_time_localtime_buf;
} // localtime()
 
#endif // ifdef CYGIMP_LIBC_TIME_LOCALTIME_INLINE
 
 
//////////////////////////////
// ctime() - ISO C 7.12.3.2 //
//////////////////////////////
//
// This returns asctime(localtime(__timeptr))
//
 
#ifdef CYGIMP_LIBC_TIME_CTIME_INLINE
 
CYGPRI_LIBC_TIME_CTIME_INLINE char *
ctime( const time_t *__timer )
{
char *_str;
 
CYG_REPORT_FUNCNAMETYPE("ctime", "returning \"%s\"");
CYG_CHECK_DATA_PTR( __timer, "__timer is not a valid pointer!");
CYG_REPORT_FUNCARG1("*__timer = %d", *__timer);
 
_str = asctime(localtime(__timer));
 
CYG_REPORT_RETVAL(_str);
 
return _str;
} // ctime()
 
#endif // ifdef CYGIMP_LIBC_TIME_CTIME_INLINE
 
 
#ifdef __cplusplus
} // extern "C"
#endif
 
#endif // CYGONCE_LIBC_TIME_INL multiple inclusion protection
 
// EOF time.inl
/v2_0/include/timeutil.h
0,0 → 1,111
#ifndef CYGONCE_LIBC_TIME_TIMEUTIL_H
#define CYGONCE_LIBC_TIME_TIMEUTIL_H
//========================================================================
//
// timeutil.h
//
// ISO C date and time implementation support functions
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-03-03
// Purpose: Provide declarations for support functions used by the
// ISO C date and time implementation
// Description:
// Usage: #include <cyg/libc/time/timeutil.h>
//
//####DESCRIPTIONEND####
//
//========================================================================
 
// INCLUDES
 
#include <cyg/infra/cyg_type.h> // Common type definitions and support
 
#ifdef __cplusplus
extern "C" {
#endif
 
// GLOBALS
 
// Strings of the days and month names
// FIXME: should comment out "const" in multi-dimensional arrays until
// PR 19440 is fixed
extern const char cyg_libc_time_day_name[7][10];
extern const cyg_uint8 cyg_libc_time_day_name_len[7];
extern const char cyg_libc_time_month_name[12][10];
extern const cyg_uint8 cyg_libc_time_month_name_len[12];
 
// number of days in each month, defined for normal and leap years
extern const cyg_uint8 cyg_libc_time_month_lengths[2][12];
 
 
// FUNCTION PROTOTYPES
 
////////////////////////////////////////
// cyg_libc_time_normalize_structtm() //
////////////////////////////////////////
//
// cyg_libc_time_normalize_structtm() will adjust the fields of a struct tm
// so that they are within the normal ranges expected.
// tm_wday, tm_yday, and tm_isdst are ignored
 
extern void
cyg_libc_time_normalize_structtm( struct tm *__timeptr );
 
//////////////////////////
// cyg_libc_time_itoa() //
//////////////////////////
//
// This converts num to a string and puts it into s padding with
// "0"'s if padzero is set, or spaces otherwise if necessary.
// The number of chars written to s is returned
//
 
extern cyg_uint8
cyg_libc_time_itoa( cyg_uint8 *__s, cyg_int32 __num, cyg_uint8 __width,
cyg_bool __padzero );
 
#ifdef __cplusplus
} // extern "C"
#endif
 
#endif // CYGONCE_LIBC_TIME_TIMEUTIL_H multiple inclusion protection
 
// EOF timeutil.h
/v2_0/include/time.h
0,0 → 1,321
#ifndef CYGONCE_LIBC_TIME_TIME_H
#define CYGONCE_LIBC_TIME_TIME_H
/*===========================================================================
//
// time.h
//
// Date and time routines from ISO C section 7.12 and POSIX 1003.1
//
//===========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
// Copyright (C) 2003 Gary Thomas
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//===========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors:
// Date: 2000-04-14
// Purpose: Provide definitions required by ISO C section 7.12 and
// POSIX 1003.1 8.3.4-8.3.7
// Description:
// Usage: Do not include this file directly - use #include <time.h>
//
//####DESCRIPTIONEND####
//
//=========================================================================*/
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// INCLUDES
 
#include <cyg/infra/cyg_type.h> // Common type definitions and support
 
// TYPE DEFINITIONS
 
// Define struct tm as per ISO C para 7.12.1
struct tm {
int tm_sec; // seconds after the minute - [0..61]
// (note 61 allows for two leap seconds)
int tm_min; // minutes after the hour - [0..59]
int tm_hour; // hours since midnight - [0..23]
int tm_mday; // days of the month - [1..31]
int tm_mon; // months since January - [0..11]
int tm_year; // years since 1900
int tm_wday; // days since Sunday - [0..6]
int tm_yday; // days since January 1 - [0..365]
int tm_isdst; // Daylight Saving Time flag - positive if DST is in
// effect, 0 if not in effect, and negative if the info
// is not available
};
 
// The following struct is used by the implementation-defined functions
// to manipulate the Daylight Savings Time state
typedef enum {
CYG_LIBC_TIME_DSTNA = -1,
CYG_LIBC_TIME_DSTOFF = 0,
CYG_LIBC_TIME_DSTON = 1
} Cyg_libc_time_dst;
 
// FUNCTION PROTOTYPES
 
#ifdef __cplusplus
extern "C" {
#endif
 
//===========================================================================
//
// POSIX 1003.1 functions
 
#ifdef CYGFUN_LIBC_TIME_POSIX
 
/////////////////////////////////
// asctime_r() - POSIX.1 8.3.4 //
/////////////////////////////////
//
// This returns a textual representation of a struct tm, and writes
// the string to return into __buf
//
 
extern char *
asctime_r( const struct tm *__timeptr, char *__buf );
 
///////////////////////////////
// ctime_r() - POSIX.1 8.3.5 //
///////////////////////////////
//
// This returns the equivalent of ctime() but writes to __buf
// to store the returned string
//
 
extern char *
ctime_r( const time_t *__timer, char *__buf );
 
////////////////////////////////
// gmtime_r() - POSIX.1 8.3.6 //
////////////////////////////////
//
// This converts a time_t into a struct tm expressed in UTC, and stores
// the result in the space occupied by __result
//
 
extern struct tm *
gmtime_r( const time_t *__timer, struct tm *__result );
 
///////////////////////////////////
// localtime_r() - POSIX.1 8.3.7 //
///////////////////////////////////
//
// This converts a time_t into a struct tm expressed in local time, and
// stores the result in the space occupied by __result
//
 
extern struct tm *
localtime_r( const time_t *__timer, struct tm *__result );
 
/////////////////////////////////////////////////////////
// strptime() -
/////////////////////////////////////////////////////////
//
// Parse a time string into a struct tm
//
 
extern char *
strptime( const char *__s, const char *__format,
struct tm *__timeptr); //__attribute__ ((format (strftime, 2)));
 
 
#endif // ifdef CYGFUN_LIBC_TIME_POSIX
 
//===========================================================================
 
// ISO C functions
 
// Time manipulation functions - ISO C 7.12.2
 
//////////////////////////////
// clock() - ISO C 7.12.2.1 //
//////////////////////////////
//
// Returns processor time used in "clock"s. For a single process,
// multi-threaded system this will just be the time since booting
//
 
extern clock_t
clock( void );
 
/////////////////////////////////
// difftime() - ISO C 7.12.2.2 //
/////////////////////////////////
//
// This returns (__time1 - __time0) in seconds
//
 
extern double
difftime( time_t __time1, time_t __time0 );
 
///////////////////////////////
// mktime() - ISO C 7.12.2.3 //
///////////////////////////////
//
// This converts a "struct tm" to a "time_t"
//
 
extern time_t
mktime( struct tm *__timeptr );
 
/////////////////////////////
// time() - ISO C 7.12.2.4 //
/////////////////////////////
//
// This returns calendar time as a time_t
//
 
extern time_t
time( time_t *__timer );
 
// Time conversion functions - ISO C 7.12.3
 
////////////////////////////////
// asctime() - ISO C 7.12.3.1 //
////////////////////////////////
//
// This returns a textual representation of a struct tm
//
 
extern char *
asctime( const struct tm *__timeptr );
 
//////////////////////////////
// ctime() - ISO C 7.12.3.2 //
//////////////////////////////
//
// This returns asctime(localtime(__timeptr))
//
 
extern char *
ctime( const time_t *__timer );
 
///////////////////////////////
// gmtime() - ISO C 7.12.3.3 //
///////////////////////////////
//
// This converts a time_t into a struct tm expressed in UTC
//
 
extern struct tm *
gmtime( const time_t *__timer );
 
//////////////////////////////////
// localtime() - ISO C 7.12.3.4 //
//////////////////////////////////
//
// This converts a time_t into a struct tm expressed in local time
//
 
extern struct tm *
localtime( const time_t *__timer );
 
/////////////////////////////////
// strftime() - ISO C 7.12.3.5 //
/////////////////////////////////
//
// This converts a string using format specifiers that signify various
// time-related quantities
//
 
extern size_t
strftime( char *__s, size_t __maxsize, const char *__format,
const struct tm *__timeptr); //__attribute__ ((format (strftime, 3)));
 
//===========================================================================
 
// Implementation-specific functions
 
////////////////////////////////////
// cyg_libc_time_setzoneoffsets() //
////////////////////////////////////
//
// This function sets the offsets used when Daylight Savings Time is enabled
// or disabled. The offsets are in time_t's
//
 
extern void
cyg_libc_time_setzoneoffsets( time_t __stdoffset, time_t __dstoffset );
 
////////////////////////////
// cyg_libc_time_setdst() //
////////////////////////////
//
// This function sets the state of Daylight Savings Time: on, off, or unknown
//
 
extern void
cyg_libc_time_setdst( Cyg_libc_time_dst __state );
 
 
////////////////////////////////////
// cyg_libc_time_getzoneoffsets() //
////////////////////////////////////
//
// This function retrieves the current state of the Daylight Savings Time
// and the offsets of both STD and DST
// The offsets are both in time_t's
//
 
extern Cyg_libc_time_dst
cyg_libc_time_getzoneoffsets( time_t *__stdoffset, time_t *__dstoffset );
 
/////////////////////////////
// cyg_libc_time_settime() //
/////////////////////////////
//
// This function sets the current time for the system. The time is
// specified as a time_t in UTC. It returns non-zero on error.
//
 
extern cyg_bool
cyg_libc_time_settime( time_t __utctime );
 
 
#ifdef __cplusplus
} // extern "C"
#endif
 
#include <cyg/libc/time/time.inl>
 
#endif // CYGONCE_LIBC_TIME_TIME_H multiple inclusion protection
 
// EOF time.h
/v2_0/ChangeLog
0,0 → 1,147
2003-02-24 Jonathan Larmour <jifl@eCosCentric.com>
 
* cdl/time.cdl: Fix doc link.
 
2003-01-28 Jonathan Larmour <jifl@eCosCentric.com>
 
* cdl/time.cdl: Correct reference to
CYGSEM_LIBC_TIME_POSIX_TIME_ROUTINES in CYGPKG_LIBC_TIME_TESTS to
CYGFUN_LIBC_TIME_POSIX.
 
2003-01-27 Gary Thomas <gary@mlbassoc.com>
 
* tests/strptime.c:
* src/strptime.cxx:
* include/time.h:
* cdl/time.cdl: Add support for strptime().
 
2002-05-14 Jesper Skov <jskov@redhat.com>
 
* cdl/time.cdl: Added -Wno-format to the compiler flags. This is
to avoid warnings about Y2K problems with the format specifiers
used in the strftime test.
 
2002-01-09 Nick Garnett <nickg@redhat.com>
 
* tests/clock.c (cyg_start): Added CYG_TEST_INIT() to
NOTAPPLICABLE version of cyg_start() so that the breakpoints are
correctly sequenced in the testfarm and it does not think that
this is a failure.
 
2001-06-22 Jesper Skov <jskov@redhat.com>
 
* cdl/time.cdl (CYGFUN_LIBC_TIME_SUS_EXTNS): Added.
* src/strftime.cxx (do_format): Added some Single UNIX
extensions.
 
2001-04-25 Bart Veer <bartv@redhat.com>
 
* tests/time.c (MAX_TIMEOUT):
Increase timeout to cope with fast architectures such as the
synthetic target.
 
2001-04-17 Bart Veer <bartv@redhat.com>
 
* tests/clock.c:
Cope with synthetic target reorg
 
2000-11-29 Jonathan Larmour <jlarmour@redhat.com>
 
* tests/clock.c: Some targets are quite inconsistent, so skip
6 samples now, and increase the tolerance to 40%.
Also NA if tracing enabled.
Also output the mean and maximum error reached, even when passing.
 
2000-11-27 Jesper Skov <jskov@redhat.com>
 
* tests/clock.c: Skip fourth sample too.
 
2000-11-14 Jesper Skov <jskov@redhat.com>
 
* tests/clock.c: Skip first three samples.
 
2000-10-30 Jonathan Larmour <jlarmour@redhat.com>
 
* include/time.inl: Ensure POSIX *_r functions can be accessed by
non-POSIX implementation even when CYGFUN_LIBC_TIME_POSIX is off.
 
* src/asctime_r.cxx: No need to make conditional on posix CDL option -
we may want to define an internal-only function.
* src/ctime_r.cxx: Ditto
* src/gmtime_r.cxx: Ditto
* src/localtime_r.cxx: Ditto
 
* cdl/time.cdl: abs() is also a requirement
 
* src/clock.cxx (clock): Always use unsigned long longs for temp
variables (and make sure it's used), rather than making
assumptions about clock_t.
 
* tests/clock.c: Rewrite
 
2000-07-26 Jonathan Larmour <jlarmour@redhat.co.uk>
 
* cdl/time.cdl: Add CYGINT_ISO_DIV dependency
 
2000-07-24 Jonathan Larmour <jlarmour@redhat.co.uk>
 
* src/time.cxx:
* src/settime.cxx:
Wallclock moved to io/
 
2000-06-20 Jonathan Larmour <jlarmour@redhat.co.uk>
 
* include/time.inl (__gmtime_r): Don't save leap year status when
calculating tm_wday
 
2000-06-17 Jonathan Larmour <jlarmour@redhat.co.uk>
 
* include/time.inl (gmtime_r): Deal with boundary case correctly
 
* tests/gmtime.c (test): Add a couple more test cases
 
2000-05-02 Jonathan Larmour <jlarmour@redhat.co.uk>
 
* include/time.h: Just use the defaults for time_t, clock_t and
CLOCKS_PER_SEC in isoinfra
 
* New package
Separated original libc out into separate packages on functional
boundaries.
Header files are now managed by isoinfra package
Plenty of cleanups done, but no major functionality changes
 
//===========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//===========================================================================
/v2_0/src/ctime_r.cxx
0,0 → 1,67
//========================================================================
//
// ctime_r.cxx
//
// POSIX 1003.1 date and time implementation for ctime_r()
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-02-26
// Purpose: Provide implementation of POSIX 1003.1 ctime()
// Description: This file provides the linkable symbol version of ctime_r()
// Usage:
//
//####DESCRIPTIONEND####
//
//========================================================================
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// The following lines allow ctime_r() to be included non-inline which
// actually defines it as a function here
#define CYGPRI_LIBC_TIME_CTIME_R_INLINE
#ifndef CYGIMP_LIBC_TIME_CTIME_R_INLINE
# define CYGIMP_LIBC_TIME_CTIME_R_INLINE
#endif
 
#include <time.h> // Main date and time definitions
 
// EOF ctime_r.cxx
/v2_0/src/gmtime.cxx
0,0 → 1,75
//========================================================================
//
// gmtime.cxx
//
// ISO C date and time implementation for gmtime()
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-02-26
// Purpose: Provide implementation of ISO C gmtime()
// Description: This file provides the linkable symbol version of gmtime()
// Usage:
//
//####DESCRIPTIONEND####
//
//========================================================================
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// INCLUDES
 
#include <cyg/infra/cyg_type.h> // Common type definitions and support
 
// The following lines allow gmtime() to be included non-inline which
// actually defines it as a function here
#define CYGPRI_LIBC_TIME_GMTIME_INLINE
#ifndef CYGIMP_LIBC_TIME_GMTIME_INLINE
# define CYGIMP_LIBC_TIME_GMTIME_INLINE
#endif
 
#include <time.h> // Main date and time definitions
 
// GLOBALS
 
struct tm cyg_libc_time_gmtime_buf;
 
// EOF gmtime.cxx
/v2_0/src/asctime.cxx
0,0 → 1,77
//========================================================================
//
// asctime.cxx
//
// ISO C date and time implementation for asctime()
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-02-26
// Purpose: Provide implementation of ISO C asctime()
// Description: This file provides the linkable symbol version of asctime()
// Usage:
//
//####DESCRIPTIONEND####
//
//========================================================================
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// INCLUDES
 
#include <cyg/infra/cyg_type.h> // Common type definitions and support
 
// The following lines allow asctime() to be included non-inline which
// actually defines it as a function here
#define CYGPRI_LIBC_TIME_ASCTIME_INLINE
#ifndef CYGIMP_LIBC_TIME_ASCTIME_INLINE
# define CYGIMP_LIBC_TIME_ASCTIME_INLINE
#endif
 
#include <time.h> // Main date and time definitions
 
// GLOBALS
 
// 26 isn't such a magic value if you work out what asctime is returning
// It should do until 23:59:59 31st Dec 9999 anyway :-)
char cyg_libc_time_asctime_buf[26];
 
// EOF asctime.cxx
/v2_0/src/mktime.cxx
0,0 → 1,67
//========================================================================
//
// mktime.cxx
//
// ISO C date and time implementation for mktime()
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-02-26
// Purpose: Provide implementation of ISO C mktime()
// Description: This file provides the linkable symbol version of mktime()
// Usage:
//
//####DESCRIPTIONEND####
//
//========================================================================
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// The following lines allow mktime() to be included non-inline which
// actually defines it as a function here
#define CYGPRI_LIBC_TIME_MKTIME_INLINE
#ifndef CYGIMP_LIBC_TIME_MKTIME_INLINE
# define CYGIMP_LIBC_TIME_MKTIME_INLINE
#endif
 
#include <time.h> // Main date and time definitions
 
// EOF mktime.cxx
/v2_0/src/difftime.cxx
0,0 → 1,67
//========================================================================
//
// difftime.cxx
//
// ISO C date and time implementation for difftime()
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-02-26
// Purpose: Provide implementation of ISO C difftime()
// Description: This file provides the linkable symbol version of difftime()
// Usage:
//
//####DESCRIPTIONEND####
//
//========================================================================
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// The following lines allow difftime() to be included non-inline which
// actually defines it as a function here
#define CYGPRI_LIBC_TIME_DIFFTIME_INLINE
#ifndef CYGIMP_LIBC_TIME_DIFFTIME_INLINE
# define CYGIMP_LIBC_TIME_DIFFTIME_INLINE
#endif
 
#include <time.h> // Main date and time definitions
 
// EOF difftime.cxx
/v2_0/src/localtime_r.cxx
0,0 → 1,68
//========================================================================
//
// localtime_r.cxx
//
// POSIX 1003.1 date and time implementation for localtime_r()
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-02-26
// Purpose: Provide implementation of POSIX 1003.1 localtime()
// Description: This file provides the linkable symbol version of
// localtime_r()
// Usage:
//
//####DESCRIPTIONEND####
//
//========================================================================
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// The following lines allow localtime_r() to be included non-inline which
// actually defines it as a function here
#define CYGPRI_LIBC_TIME_LOCALTIME_R_INLINE
#ifndef CYGIMP_LIBC_TIME_LOCALTIME_R_INLINE
# define CYGIMP_LIBC_TIME_LOCALTIME_R_INLINE
#endif
 
#include <time.h> // Main date and time definitions
 
// EOF localtime_r.cxx
/v2_0/src/clock.cxx
0,0 → 1,135
//===========================================================================
//
// clock.cxx
//
// ISO C date and time implementation for clock()
//
//===========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//===========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-03-05
// Purpose: Provides an implementation of the ISO C function clock()
// from ISO C section 7.12.2.1
// Description: This file uses the kernel real time clock to determine
// the complete running time of the system - since we only
// have one task, even though there are perhaps multiple threads
// that is still the running time of the "program"
// Usage:
//
//####DESCRIPTIONEND####
//
//===========================================================================
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // Configuration header
 
#ifdef CYGSEM_LIBC_TIME_CLOCK_WORKING
# include <pkgconf/kernel.h> // Kernel config header
#endif
 
// INCLUDES
 
#include <cyg/infra/cyg_type.h> // Common type definitions and support
#include <cyg/infra/cyg_ass.h> // Assertion infrastructure
#include <cyg/infra/cyg_trac.h> // Tracing infrastructure
 
#include <time.h> // Header for all time-related functions
 
#ifdef CYGSEM_LIBC_TIME_CLOCK_WORKING
# include <cyg/kernel/clock.hxx> // Kernel clock definitions
# include <cyg/kernel/clock.inl> // Kernel clock inline functions
#endif
 
 
// TRACE
 
# if defined(CYGDBG_USE_TRACING) && defined(CYGNUM_LIBC_TIME_CLOCK_TRACE_LEVEL)
static int clock_trace = CYGNUM_LIBC_TIME_CLOCK_TRACE_LEVEL;
# define TL1 (0 < clock_trace)
# else
# define TL1 (0)
# endif
 
// FUNCTIONS
 
externC clock_t
clock( void )
{
CYG_REPORT_FUNCNAMETYPE( "clock", "returning clock tick %d" );
CYG_REPORT_FUNCARGVOID();
 
#ifdef CYGSEM_LIBC_TIME_CLOCK_WORKING
cyg_tick_count curr_clock; // kernel clock value
Cyg_Clock::cyg_resolution resolution; // kernel clock resolution
clock_t clocks;
unsigned long long temp;
 
CYG_TRACE0( TL1, "getting clock resolution" );
// get the resolution
resolution = Cyg_Clock::real_time_clock->get_resolution();
 
CYG_TRACE2( TL1, "got resolution dividend %d divisor %d. Getting "
"clock value", resolution.dividend, resolution.divisor );
 
// get the value
curr_clock = Cyg_Clock::real_time_clock->current_value();
 
CYG_TRACE1( TL1, "got clock value %d", curr_clock );
// scale the value so that clock()/CLOCKS_PER_SEC works
// We use an unsigned long long to avoid overflow as the dividend
// and divisors tend to be huge
temp = (1000000000 / CLOCKS_PER_SEC);
temp *= resolution.divisor;
temp = (unsigned long long)curr_clock * resolution.dividend / temp;
clocks = (clock_t)temp;
CYG_REPORT_RETVAL( clocks );
return clocks;
 
#else // i.e. ifndef CYGSEM_LIBC_TIME_CLOCK_WORKING
CYG_REPORT_RETVAL( -1 );
return (clock_t) -1;
#endif
 
} // clock()
 
 
// EOF clock.cxx
/v2_0/src/timeutil.cxx
0,0 → 1,295
//========================================================================
//
// timeutil.cxx
//
// ISO C date and time implementation support functions
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors:
// Date: 2000-04-28
// Purpose: Provide support functions used by the ISO C date and time
// implementation
// Description: This file provides the functions:
// cyg_libc_time_normalize_structtm()
// cyg_libc_time_getzoneoffsets()
// cyg_libc_time_setzoneoffsets()
// cyg_libc_time_setdst()
// cyg_libc_time_itoa()
// and the globals:
// cyg_libc_time_day_name
// cyg_libc_time_day_name_len
// cyg_libc_time_month_name
// cyg_libc_time_month_name_len
// cyg_libc_time_month_lengths
// cyg_libc_time_current_dst_stat
// cyg_libc_time_current_std_offset
// cyg_libc_time_current_dst_offset
// Usage:
//
//####DESCRIPTIONEND####
//
//========================================================================
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// INCLUDES
 
// define these functions as outline, not inline, functions in this file
#define CYGPRI_LIBC_TIME_GETZONEOFFSETS_INLINE extern "C"
#define CYGPRI_LIBC_TIME_SETZONEOFFSETS_INLINE extern "C"
#define CYGPRI_LIBC_TIME_SETDST_INLINE extern "C"
 
#include <cyg/infra/cyg_type.h> // Common type definitions and support
#include <cyg/libc/time/timeutil.h>// Header for this file
#include <time.h> // Main date and time definitions
#include <stdlib.h> // for div() and abs()
 
 
// GLOBALS
 
// FIXME: PR19440 - const char & -fwritable-strings don't mix
const char cyg_libc_time_day_name[7][10] = {
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday",
"Saturday"
};
const cyg_uint8 cyg_libc_time_day_name_len[7] = { 6, 6, 7, 9, 8, 6, 8 };
 
// FIXME: PR19440 - const char & -fwritable-strings don't mix
const char cyg_libc_time_month_name[12][10] = {
"January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
};
const cyg_uint8 cyg_libc_time_month_name_len[12] = { 7, 8, 5, 5, 3, 4,
4, 6, 9, 7, 8, 8 };
 
const cyg_uint8 cyg_libc_time_month_lengths[2][12] = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
 
Cyg_libc_time_dst cyg_libc_time_current_dst_stat =
(Cyg_libc_time_dst)CYGNUM_LIBC_TIME_DST_DEFAULT_STATE;
time_t cyg_libc_time_current_std_offset =
(time_t)CYGNUM_LIBC_TIME_STD_DEFAULT_OFFSET;
time_t cyg_libc_time_current_dst_offset =
(time_t)CYGNUM_LIBC_TIME_DST_DEFAULT_OFFSET;
 
 
// FUNCTIONS
 
////////////////////////////////////////
// cyg_libc_time_normalize_structtm() //
////////////////////////////////////////
//
// cyg_libc_time_normalize_structtm() will adjust the fields of a struct tm
// so that they are within the normal ranges expected.
// tm_wday, tm_yday and tm_isdst are ignored
 
externC void
cyg_libc_time_normalize_structtm( struct tm *timeptr )
{
div_t t;
 
CYG_REPORT_FUNCNAME("cyg_libc_time_normalize_structtm");
CYG_REPORT_FUNCARG1("timeptr is at address %08x", timeptr);
 
// normalize seconds to 0..59
if ((timeptr->tm_sec < 0) || (timeptr->tm_sec > 59)) {
t = div(timeptr->tm_sec, 60);
while (t.rem < 0) {
t.rem += 60;
--t.quot;
}
timeptr->tm_min += t.quot;
timeptr->tm_sec = t.rem;
} // if
 
// normalize minutes to 0..59
if ((timeptr->tm_min < 0) || (timeptr->tm_min > 59)) {
t = div(timeptr->tm_min, 60);
while (t.rem < 0) {
t.rem += 60;
--t.quot;
}
timeptr->tm_hour += t.quot;
timeptr->tm_min = t.rem;
} // if
 
// normalize hours to 0..23
if ((timeptr->tm_hour < 0) || (timeptr->tm_hour > 23)) {
t = div(timeptr->tm_hour, 24);
while (t.rem < 0) {
t.rem += 24;
--t.quot;
}
timeptr->tm_mday += t.quot;
timeptr->tm_hour = t.rem;
} // if
// we wait before normalizing tm_mday as per ISO C 7.12.2.3 (although
// actually it only makes sense if you think about it
 
// normalize months to 0..11
if ((timeptr->tm_mon < 0) || (timeptr->tm_mon > 11)) {
t = div(timeptr->tm_mon, 12);
while (t.rem < 0) {
t.rem += 12;
--t.quot;
}
timeptr->tm_year += t.quot;
timeptr->tm_mon = t.rem;
} // if
 
// now tm_mday which needs to go to 1..31
cyg_bool leap = cyg_libc_time_year_is_leap(timeptr->tm_year);
 
while (timeptr->tm_mday < 1) {
// move back a month
 
if (--timeptr->tm_mon < 0) {
--timeptr->tm_year;
timeptr->tm_mon = 11;
leap = cyg_libc_time_year_is_leap(timeptr->tm_year);
} // if
 
// we move backward the number of days in the _new_ current month
timeptr->tm_mday += cyg_libc_time_month_lengths[leap][timeptr->tm_mon];
 
} // while
 
while (timeptr->tm_mday >
cyg_libc_time_month_lengths[leap][timeptr->tm_mon]) {
 
// move forward a month
// we move forward the number of days in the _old_ current month
timeptr->tm_mday -= cyg_libc_time_month_lengths[leap][timeptr->tm_mon];
 
if (++timeptr->tm_mon > 11) {
++timeptr->tm_year;
timeptr->tm_mon = 0;
leap = cyg_libc_time_year_is_leap(timeptr->tm_year);
} // if
} // while
 
CYG_REPORT_RETURN();
 
} // cyg_libc_time_normalize_structtm()
 
 
//////////////////////////
// cyg_libc_time_itoa() //
//////////////////////////
//
// This converts num to a string and puts it into s padding with
// "0"'s if padzero is set, or spaces otherwise if necessary.
// The number of chars written to s is returned
//
 
// This implementation is probably suboptimal in terms of performance
// but there wouldn't be much in it with only 11 chars max to convert :-/.
// Actually FIXME: what if someone passes a width >11
 
externC cyg_uint8
cyg_libc_time_itoa( cyg_uint8 *s, cyg_int32 num, cyg_uint8 width,
cyg_bool padzero )
{
CYG_REPORT_FUNCNAMETYPE("cyg_libc_time_itoa", "returning %d");
CYG_REPORT_FUNCARG4( "s=%08x, num=%d, width=%d, padzero=%d",
s, num, width, padzero );
 
CYG_CHECK_DATA_PTR(s, "input string not a valid pointer");
 
// special case for zero otherwise we'd have to treat it specially later
// on anyway
if (num==0) {
cyg_ucount8 i;
for (i=0; i<width; ++i)
s[i] = padzero ? '0' : ' ';
CYG_REPORT_RETVAL(i);
return i;
}
// return value
cyg_uint8 ret=0;
// Pre-fiddle for negative numbers
if ((num < 0) && (width > 0)) {
*s++ = '-';
--width;
num = abs(num);
++ret;
}
cyg_ucount32 i;
cyg_bool reachednum = false;
cyg_uint8 c, j;
 
// i starts off with factor of 10 digits - which is the string length
// of a positive 32-bit number
for (i=1000000000, j=10; i>0; i/=10, --j) {
c = (num / i);
 
if (!reachednum && c==0) {
if (j <= width) {
*s++ = padzero ? '0' : ' ';
++ret;
}
} // if
else {
*s++ = c + '0';
++ret;
reachednum = true;
}
num %= i;
} // for
CYG_POSTCONDITION(ret >= width, "Didn't output enough chars!");
 
CYG_REPORT_RETVAL(ret);
return ret;
} // cyg_libc_time_itoa()
 
 
// EOF timeutil.cxx
/v2_0/src/strftime.cxx
0,0 → 1,334
//========================================================================
//
// strftime.cxx
//
// ISO C date and time implementation for strftime()
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-02-26
// Purpose: Provide implementation of the ISO C function strftime()
// from ISO C section 7.12.3.5
// Description: This file provides the implementation of strftime()
// Usage:
//
//####DESCRIPTIONEND####
//
//========================================================================
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// INCLUDES
 
#include <cyg/infra/cyg_type.h> // Common type definitions and support
#include <cyg/infra/cyg_ass.h> // Assertion infrastructure
#include <cyg/infra/cyg_trac.h> // Tracing infrastructure
#include <time.h> // Main date and time definitions
#include <cyg/libc/time/timeutil.h>// For cyg_libc_time_{day,month}_name{,_len}
 
// FUNCTION PROTOTYPES
 
// FIXME: This all needs to be internationalized and localized, both in
// terms of reading and writing multibyte characters, and that it should
// refer to the settings of LC_TIME
 
// FUNCTIONS
 
// This helper function actually processes the format. Which format to insert
// is indicated by fmtchar, sizeleft is the maximum space allowed to be used
// in buf. The number of bytes written is returned, or -1 if there was no
// space
 
static cyg_int8
do_format(cyg_uint8 fmtchar, cyg_ucount32 sizeleft, char *buf,
const struct tm *timeptr)
{
cyg_count8 i;
 
switch (fmtchar) {
case 'a':
if (sizeleft<3)
return -1;
buf[0] = cyg_libc_time_day_name[timeptr->tm_wday][0];
buf[1] = cyg_libc_time_day_name[timeptr->tm_wday][1];
buf[2] = cyg_libc_time_day_name[timeptr->tm_wday][2];
return 3;
case 'A':
if (sizeleft < cyg_libc_time_day_name_len[timeptr->tm_wday])
return -1;
for (i=0; i<cyg_libc_time_day_name_len[timeptr->tm_wday]; ++i)
buf[i] = cyg_libc_time_day_name[timeptr->tm_wday][i];
return i;
#ifdef CYGFUN_LIBC_TIME_SUS_EXTNS
case 'h':
// ** fall through **
#endif
case 'b':
if (sizeleft<3)
return -1;
buf[0] = cyg_libc_time_month_name[timeptr->tm_mon][0];
buf[1] = cyg_libc_time_month_name[timeptr->tm_mon][1];
buf[2] = cyg_libc_time_month_name[timeptr->tm_mon][2];
return 3;
case 'B':
if (sizeleft < cyg_libc_time_month_name_len[timeptr->tm_mon])
return -1;
for (i=0; i<cyg_libc_time_month_name_len[timeptr->tm_mon]; ++i)
buf[i] = cyg_libc_time_month_name[timeptr->tm_mon][i];
return i;
case 'c':
if (sizeleft < 26)
return -1;
 
// Recurse! Note that we know that we will have left room for the
// trailing NULL in the strftime body
i = strftime( buf, sizeleft+1, "%a %b %d %I:%M:%S%p %Y", timeptr);
return ((0==i) ? -1 : i);
case 'd':
if (sizeleft < 2)
return -1;
buf[0] = (timeptr->tm_mday / 10) + '0';
buf[1] = (timeptr->tm_mday % 10) + '0';
return 2;
#ifdef CYGFUN_LIBC_TIME_SUS_EXTNS
case 'e':
if (sizeleft < 2)
return -1;
i = (timeptr->tm_mday / 10);
buf[0] = (0 == i) ? ' ' : i + '0';
buf[1] = (timeptr->tm_mday % 10) + '0';
return 2;
#endif
case 'H':
if (sizeleft < 2)
return -1;
buf[0] = (timeptr->tm_hour / 10) + '0';
buf[1] = (timeptr->tm_hour % 10) + '0';
return 2;
case 'I':
if (sizeleft < 2)
return -1;
buf[0] = ((timeptr->tm_hour%12 + 1) / 10) + '0';
buf[1] = ((timeptr->tm_hour%12 + 1) % 10) + '0';
return 2;
case 'j':
if (sizeleft < 3)
return -1;
buf[0] = (timeptr->tm_yday / 100) + '0';
buf[1] = ((timeptr->tm_yday % 100) / 10) + '0';
buf[2] = (timeptr->tm_yday % 10) + '0';
return 3;
case 'm':
if (sizeleft < 2)
return -1;
buf[0] = ((timeptr->tm_mon+1) / 10) + '0';
buf[1] = ((timeptr->tm_mon+1) % 10) + '0';
return 2;
case 'M':
if (sizeleft < 2)
return -1;
buf[0] = (timeptr->tm_min / 10) + '0';
buf[1] = (timeptr->tm_min % 10) + '0';
return 2;
case 'p':
if (sizeleft < 2)
return -1;
buf[0] = (timeptr->tm_hour > 11) ? 'p' : 'a';
buf[1] = 'm';
return 2;
case 'S':
if (sizeleft < 2)
return -1;
buf[0] = (timeptr->tm_sec / 10) + '0';
buf[1] = (timeptr->tm_sec % 10) + '0';
return 2;
#ifdef CYGFUN_LIBC_TIME_SUS_EXTNS
case 'T':
if (sizeleft < 8)
return -1;
 
// Recurse! Note that we know that we will have left room for the
// trailing NULL in the strftime body
i = strftime( buf, sizeleft+1, "%H:%M:%S", timeptr);
return ((0==i) ? -1 : i);
#endif
case 'U':
if (sizeleft < 2)
return -1;
i = (timeptr->tm_yday - timeptr->tm_wday + 7) / 7;
buf[0] = (i / 10) + '0';
buf[1] = (i % 10) + '0';
return 2;
case 'w':
// Don't need to check size - we'll always be called with sizeleft > 0
buf[0] = timeptr->tm_wday + '0';
return 1;
case 'W':
if (sizeleft < 2)
return -1;
i = (timeptr->tm_yday + ((8-timeptr->tm_wday) % 7)) / 7;
buf[0] = (i / 10) + '0';
buf[1] = (i % 10) + '0';
return 2;
case 'x':
if (sizeleft < 15)
return -1;
 
// Recurse! Note that we know that we will have left room for the
// trailing NULL in the strftime body
 
i = strftime( buf, sizeleft+1, "%a %b %d %Y", timeptr);
 
return (0==i) ? -1 : i;
case 'X':
if (sizeleft < 10)
return -1;
 
// Recurse! Note that we know that we will have left room for the
// trailing NULL in the strftime body
 
i = strftime( buf, sizeleft+1, "%I:%M:%S%p", timeptr);
 
return (0==i) ? -1 : i;
case 'y':
if (sizeleft < 2)
return -1;
buf[0] = ((timeptr->tm_year % 100) / 10) + '0';
buf[1] = ((timeptr->tm_year % 100) % 10) + '0';
return 2;
case 'Y':
if (sizeleft < 4)
return -1;
buf[0] = ((1900+timeptr->tm_year) / 1000) + '0';
buf[1] = (((1900+timeptr->tm_year) % 1000) / 100) + '0';
buf[2] = ((timeptr->tm_year % 100) / 10) + '0';
buf[3] = (timeptr->tm_year % 10) + '0';
return 4;
case 'Z':
// FIXME: Should store zone in timeptr->tm_zone, or failing that
// read TZ env variable using tzset()
return 0;
case '%':
// Don't need to check size - we'll always be called with sizeleft > 0
buf[0] = '%';
return 1;
default:
CYG_FAIL("invalid format character!");
return -1;
} // switch
 
} // do_format()
 
externC size_t
strftime( char *s, size_t maxsize, const char *format,
const struct tm *timeptr)
{
CYG_REPORT_FUNCNAMETYPE("strftime", "returning string length %d");
CYG_CHECK_DATA_PTR(s, "string s is not a valid address!");
CYG_CHECK_DATA_PTR(format, "format string is not at a valid address!");
CYG_CHECK_DATA_PTR(timeptr,
"struct tm argument is not at a valid address!");
CYG_REPORT_FUNCARG4("s is at address %08x, maxsize=%d, format=\"%s\", "
"timeptr is at address %08x",
s, maxsize, format, timeptr);
 
CYG_PRECONDITION((timeptr->tm_sec >= 0) && (timeptr->tm_sec < 62),
"timeptr->tm_sec out of range!");
CYG_PRECONDITION((timeptr->tm_min >= 0) && (timeptr->tm_min < 60),
"timeptr->tm_min out of range!");
CYG_PRECONDITION((timeptr->tm_hour >= 0) && (timeptr->tm_hour < 24),
"timeptr->tm_hour out of range!");
// Currently I don't check _actual_ numbers of days in each month here
// FIXME: No reason why not though
CYG_PRECONDITION((timeptr->tm_mday >= 1) && (timeptr->tm_mday < 32),
"timeptr->tm_mday out of range!");
CYG_PRECONDITION((timeptr->tm_mon >= 0) && (timeptr->tm_mon < 12),
"timeptr->tm_mon out of range!");
CYG_PRECONDITION((timeptr->tm_wday >= 0) && (timeptr->tm_wday < 7),
"timeptr->tm_wday out of range!");
CYG_PRECONDITION((timeptr->tm_yday >= 0) && (timeptr->tm_yday < 366),
"timeptr->tm_yday out of range!");
CYG_PRECONDITION((timeptr->tm_year > -1900) &&
(timeptr->tm_year < 8100),
"timeptr->tm_year out of range!");
 
if (!maxsize) {
CYG_REPORT_RETVAL(0);
return 0;
} // if
 
// lets leave the room for the trailing null up front
--maxsize;
 
cyg_ucount32 i, spos;
cyg_int8 dof_ret;
for (i=0, spos=0; (spos<maxsize) && (format[i] != '\0'); ++i) {
if (format[i] == '%') {
if (format[++i] == '\0')
break;
dof_ret = do_format(format[i], maxsize - spos, &s[spos], timeptr);
// was there room to write _anything_?
if (dof_ret < 0) {
spos=0; // ISO says we must return 0 and the contents of s
// are indeterminate
break;
}
spos += dof_ret;
}
else {
s[spos++] = format[i];
} // else
} // for
s[spos] = '\0';
CYG_REPORT_RETVAL(spos);
return spos;
 
} // strftime()
 
 
// EOF strftime.cxx
/v2_0/src/time.cxx
0,0 → 1,105
//========================================================================
//
// time.cxx
//
// ISO C date and time implementation for time()
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-03-04
// Purpose: Provide implementation of ISO C time() as defined in
// ISO C section 7.12.2.4
// Description: This file provides an implementation of time() using
// the "wallclock" device
// Usage:
//
//####DESCRIPTIONEND####
//
//========================================================================
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// INCLUDES
 
#include <cyg/infra/cyg_type.h> // Common type definitions and support
#include <cyg/infra/cyg_ass.h> // Assertion infrastructure
#include <cyg/infra/cyg_trac.h> // Tracing infrastructure
#include <time.h> // Main date and time definitions
 
#ifdef CYGSEM_LIBC_TIME_TIME_WORKING
# include <cyg/io/wallclock.hxx> // Wallclock class definitions
#endif
 
// FUNCTIONS
 
externC time_t
time( time_t *timer )
{
CYG_REPORT_FUNCNAMETYPE("time", "returning %d");
if (timer) // its allowed to be NULL
CYG_CHECK_DATA_PTR( timer, "timer is not a valid pointer!");
CYG_REPORT_FUNCARG1("timer = %08x", timer);
 
#ifdef CYGSEM_LIBC_TIME_TIME_WORKING
time_t ret;
 
ret = (time_t) Cyg_WallClock::wallclock->get_current_time();
if (timer)
*timer = ret;
 
CYG_REPORT_RETVAL(ret);
 
return ret;
 
#else // i.e. ifndef CYGSEM_LIBC_TIME_TIME_WORKING
 
if (timer)
*timer = (time_t)-1;
CYG_REPORT_RETVAL(-1);
return (time_t)-1;
 
#endif
 
} // time()
 
 
// EOF time.cxx
/v2_0/src/ctime.cxx
0,0 → 1,67
//========================================================================
//
// ctime.cxx
//
// ISO C date and time implementation for ctime()
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-02-26
// Purpose: Provide implementation of ISO C ctime()
// Description: This file provides the linkable symbol version of ctime()
// Usage:
//
//####DESCRIPTIONEND####
//
//========================================================================
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// The following lines allow ctime() to be included non-inline which
// actually defines it as a function here
#define CYGPRI_LIBC_TIME_CTIME_INLINE
#ifndef CYGIMP_LIBC_TIME_CTIME_INLINE
# define CYGIMP_LIBC_TIME_CTIME_INLINE
#endif
 
#include <time.h> // Main date and time definitions
 
// EOF ctime.cxx
/v2_0/src/gmtime_r.cxx
0,0 → 1,67
//========================================================================
//
// gmtime_r.cxx
//
// POSIX 1003.1 date and time implementation for gmtime_r()
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-02-26
// Purpose: Provide implementation of POSIX 1003.1 gmtime()
// Description: This file provides the linkable symbol version of gmtime_r()
// Usage:
//
//####DESCRIPTIONEND####
//
//========================================================================
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// The following lines allow gmtime_r() to be included non-inline which
// actually defines it as a function here
#define CYGPRI_LIBC_TIME_GMTIME_R_INLINE
#ifndef CYGIMP_LIBC_TIME_GMTIME_R_INLINE
# define CYGIMP_LIBC_TIME_GMTIME_R_INLINE
#endif
 
#include <time.h> // Main date and time definitions
 
// EOF gmtime_r.cxx
/v2_0/src/asctime_r.cxx
0,0 → 1,71
//========================================================================
//
// asctime_r.cxx
//
// POSIX 1003.1 date and time implementation for asctime_r()
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-02-26
// Purpose: Provide implementation of POSIX 1003.1 asctime()
// Description: This file provides the linkable symbol version of asctime_r()
// Usage:
//
//####DESCRIPTIONEND####
//
//========================================================================
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// INCLUDES
 
#include <cyg/infra/cyg_type.h> // Common type definitions and support
 
// The following lines allow asctime_r() to be included non-inline which
// actually defines it as a function here
#define CYGPRI_LIBC_TIME_ASCTIME_R_INLINE
#ifndef CYGIMP_LIBC_TIME_ASCTIME_R_INLINE
# define CYGIMP_LIBC_TIME_ASCTIME_R_INLINE
#endif
 
#include <time.h> // Main date and time definitions
 
// EOF asctime_r.cxx
/v2_0/src/strptime.cxx
0,0 → 1,427
//
// Adapted for use in eCos by Gary Thomas
// Copyright (C) 2003 Gary Thomas
//
 
/*
 
* (Royal Institute of Technology, Stockholm, Sweden).
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Neither the name of KTH nor the names of its contributors may be
* used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY KTH AND ITS CONTRIBUTORS ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KTH OR ITS CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
 
#include <stddef.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
 
static const char *weekdays[] = {
"Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
NULL
};
 
static const char *month[] = {
"January",
"February",
"Mars",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December",
NULL,
};
 
static const char *ampm[] = {
"am",
"pm",
NULL
};
 
/*
* Try to match `*buf' to one of the strings in `strs'. Return the
* index of the matching string (or -1 if none). Also advance buf.
*/
 
static int
match_string (const char **buf, const char **strs, int ablen)
{
int i = 0;
 
for (i = 0; strs[i] != NULL; ++i) {
int len = ablen > 0 ? ablen : strlen (strs[i]);
 
if (strncasecmp (*buf, strs[i], len) == 0) {
*buf += len;
return i;
}
}
return -1;
}
 
/*
* tm_year is relative this year
*/
 
const int tm_year_base = 1900;
 
/*
* Return TRUE iff `year' was a leap year.
*/
 
static int
is_leap_year (int year)
{
return (year % 4) == 0 && ((year % 100) != 0 || (year % 400) == 0);
}
 
/*
* Return the weekday [0,6] (0 = Sunday) of the first day of `year'
*/
 
static int
first_day (int year)
{
int ret = 4; // Jan 1, 1970 was on Thursday
 
for (; year > 1970; --year)
ret = (ret + 365 + is_leap_year (year) ? 1 : 0) % 7;
return ret;
}
 
/*
* Set `timeptr' given `wnum' (week number [0, 53])
*/
 
static void
set_week_number_sun (struct tm *timeptr, int wnum)
{
int fday = first_day (timeptr->tm_year + tm_year_base);
 
timeptr->tm_yday = wnum * 7 + timeptr->tm_wday - fday;
if (timeptr->tm_yday < 0) {
timeptr->tm_wday = fday;
timeptr->tm_yday = 0;
}
}
 
/*
* Set `timeptr' given `wnum' (week number [0, 53])
*/
 
static void
set_week_number_mon (struct tm *timeptr, int wnum)
{
int fday = (first_day (timeptr->tm_year + tm_year_base) + 6) % 7;
 
timeptr->tm_yday = wnum * 7 + (timeptr->tm_wday + 6) % 7 - fday;
if (timeptr->tm_yday < 0) {
timeptr->tm_wday = (fday + 1) % 7;
timeptr->tm_yday = 0;
}
}
 
/*
* Set `timeptr' given `wnum' (week number [0, 53])
*/
 
static void
set_week_number_mon4 (struct tm *timeptr, int wnum)
{
int fday = (first_day (timeptr->tm_year + tm_year_base) + 6) % 7;
int offset = 0;
 
if (fday < 4)
offset += 7;
 
timeptr->tm_yday = offset + (wnum - 1) * 7 + timeptr->tm_wday - fday;
if (timeptr->tm_yday < 0) {
timeptr->tm_wday = fday;
timeptr->tm_yday = 0;
}
}
 
/*
*
*/
 
char *
strptime (const char *buf, const char *format, struct tm *timeptr)
{
char c;
 
timeptr->tm_yday = 1; // So it's always valid
timeptr->tm_isdst = 0;
 
for (; (c = *format) != '\0'; ++format) {
char *s;
int ret;
 
if (isspace (c)) {
while (isspace (*buf))
++buf;
} else if (c == '%' && format[1] != '\0') {
c = *++format;
if (c == 'E' || c == 'O')
c = *++format;
switch (c) {
case 'A' :
ret = match_string (&buf, weekdays, 0);
if (ret < 0)
return NULL;
timeptr->tm_wday = ret;
break;
case 'a' :
ret = match_string (&buf, weekdays, 3);
if (ret < 0)
return NULL;
timeptr->tm_wday = ret;
break;
case 'B' :
ret = match_string (&buf, month, 0);
if (ret < 0)
return NULL;
timeptr->tm_mon = ret;
break;
case 'b' :
case 'h' :
ret = match_string (&buf, month, 3);
if (ret < 0)
return NULL;
timeptr->tm_mon = ret;
break;
case 'C' :
ret = strtol (buf, &s, 10);
if (s == buf)
return NULL;
timeptr->tm_year = (ret * 100) - tm_year_base;
buf = s;
break;
case 'c' :
// Date and Time in the current locale - unsupported
return NULL;
case 'D' : /* %m/%d/%y */
s = strptime (buf, "%m/%d/%y", timeptr);
if (s == NULL)
return NULL;
buf = s;
break;
case 'd' :
case 'e' :
ret = strtol (buf, &s, 10);
if (s == buf)
return NULL;
timeptr->tm_mday = ret;
buf = s;
break;
case 'H' :
case 'k' :
ret = strtol (buf, &s, 10);
if (s == buf)
return NULL;
timeptr->tm_hour = ret;
buf = s;
break;
case 'I' :
case 'l' :
ret = strtol (buf, &s, 10);
if (s == buf)
return NULL;
if (ret == 12)
timeptr->tm_hour = 0;
else
timeptr->tm_hour = ret;
buf = s;
break;
case 'j' :
ret = strtol (buf, &s, 10);
if (s == buf)
return NULL;
timeptr->tm_yday = ret - 1;
buf = s;
break;
case 'm' :
ret = strtol (buf, &s, 10);
if (s == buf)
return NULL;
timeptr->tm_mon = ret - 1;
buf = s;
break;
case 'M' :
ret = strtol (buf, &s, 10);
if (s == buf)
return NULL;
timeptr->tm_min = ret;
buf = s;
break;
case 'n' :
if (*buf == '\n')
++buf;
else
return NULL;
break;
case 'p' :
ret = match_string (&buf, ampm, 0);
if (ret < 0)
return NULL;
if (timeptr->tm_hour == 0) {
if (ret == 1)
timeptr->tm_hour = 12;
} else
timeptr->tm_hour += 12;
break;
case 'r' : /* %I:%M:%S %p */
s = strptime (buf, "%I:%M:%S %p", timeptr);
if (s == NULL)
return NULL;
buf = s;
break;
case 'R' : /* %H:%M */
s = strptime (buf, "%H:%M", timeptr);
if (s == NULL)
return NULL;
buf = s;
break;
case 'S' :
ret = strtol (buf, &s, 10);
if (s == buf)
return NULL;
timeptr->tm_sec = ret;
buf = s;
break;
case 't' :
if (*buf == '\t')
++buf;
else
return NULL;
break;
case 'T' : /* %H:%M:%S */
case 'X' :
s = strptime (buf, "%H:%M:%S", timeptr);
if (s == NULL)
return NULL;
buf = s;
break;
case 'u' :
ret = strtol (buf, &s, 10);
if (s == buf)
return NULL;
timeptr->tm_wday = ret - 1;
buf = s;
break;
case 'w' :
ret = strtol (buf, &s, 10);
if (s == buf)
return NULL;
timeptr->tm_wday = ret;
buf = s;
break;
case 'U' :
ret = strtol (buf, &s, 10);
if (s == buf)
return NULL;
set_week_number_sun (timeptr, ret);
buf = s;
break;
case 'V' :
ret = strtol (buf, &s, 10);
if (s == buf)
return NULL;
set_week_number_mon4 (timeptr, ret);
buf = s;
break;
case 'W' :
ret = strtol (buf, &s, 10);
if (s == buf)
return NULL;
set_week_number_mon (timeptr, ret);
buf = s;
break;
case 'x' :
s = strptime (buf, "%Y:%m:%d", timeptr);
if (s == NULL)
return NULL;
buf = s;
break;
case 'y' :
ret = strtol (buf, &s, 10);
if (s == buf)
return NULL;
if (ret < 70)
timeptr->tm_year = 100 + ret;
else
timeptr->tm_year = ret;
buf = s;
break;
case 'Y' :
ret = strtol (buf, &s, 10);
if (s == buf)
return NULL;
timeptr->tm_year = ret - tm_year_base;
buf = s;
break;
case 'Z' :
// Timezone spec not handled
return NULL;
case '\0' :
--format;
/* FALLTHROUGH */
case '%' :
if (*buf == '%')
++buf;
else
return NULL;
break;
default :
if (*buf == '%' || *++buf == c)
++buf;
else
return NULL;
break;
}
} else {
if (*buf == c)
++buf;
else
return NULL;
}
}
return (char *)buf;
}
 
// strptime.cxx
/v2_0/src/localtime.cxx
0,0 → 1,71
//========================================================================
//
// localtime.cxx
//
// ISO C date and time implementation for localtime()
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-02-26
// Purpose: Provide implementation of ISO C localtime()
// Description: This file provides the linkable symbol version of localtime()
// Usage:
//
//####DESCRIPTIONEND####
//
//========================================================================
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// The following lines allow localtime() to be included non-inline which
// actually defines it as a function here
#define CYGPRI_LIBC_TIME_LOCALTIME_INLINE
#ifndef CYGIMP_LIBC_TIME_LOCALTIME_INLINE
# define CYGIMP_LIBC_TIME_LOCALTIME_INLINE
#endif
 
#include <time.h> // Main date and time definitions
 
// GLOBALS
 
struct tm cyg_libc_time_localtime_buf;
 
// EOF localtime.cxx
/v2_0/src/settime.cxx
0,0 → 1,97
//========================================================================
//
// settime.cxx
//
// Date and time support function to set time
//
//========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos is free software; you can redistribute it and/or modify it under
// the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): jlarmour
// Contributors: jlarmour
// Date: 1999-02-26
// Purpose: Provide support function to set the time
// Description: The wallclock device is used to store the time in UTC
// Usage:
//
//####DESCRIPTIONEND####
//
//========================================================================
 
// CONFIGURATION
 
#include <pkgconf/libc_time.h> // C library configuration
 
// INCLUDES
 
#include <cyg/infra/cyg_type.h> // Common type definitions and support
#include <time.h> // Main date and time definitions
#include <cyg/infra/cyg_ass.h> // Assertion infrastructure
#include <cyg/infra/cyg_trac.h> // Tracing infrastructure
#ifdef CYGSEM_LIBC_TIME_SETTIME_WORKING
# include <cyg/io/wallclock.hxx> // Wallclock class definitions
#endif
 
// FUNCTIONS
 
/////////////////////////////
// cyg_libc_time_settime() //
/////////////////////////////
//
// This function sets the current time for the system. The time is
// specified as a time_t in UTC. It returns non-zero on error.
//
 
externC cyg_bool
cyg_libc_time_settime( time_t utctime )
{
CYG_REPORT_FUNCNAMETYPE("cyg_libc_time_settime", "returning status %d");
CYG_REPORT_FUNCARG1DV(utctime);
 
#ifdef CYGSEM_LIBC_TIME_SETTIME_WORKING
 
Cyg_WallClock::wallclock->set_current_time((cyg_uint32) utctime);
CYG_REPORT_RETVAL(false);
return false;
#else
CYG_REPORT_RETVAL(true);
return true;
#endif
 
} // cyg_libc_time_settime()
 
// EOF settime.cxx

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.