summaryrefslogtreecommitdiff
path: root/winsup/mingw/include/time.h
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/mingw/include/time.h')
-rw-r--r--winsup/mingw/include/time.h220
1 files changed, 220 insertions, 0 deletions
diff --git a/winsup/mingw/include/time.h b/winsup/mingw/include/time.h
new file mode 100644
index 00000000000..8a29efac898
--- /dev/null
+++ b/winsup/mingw/include/time.h
@@ -0,0 +1,220 @@
+/*
+ * time.h
+ *
+ * Date and time functions and types.
+ *
+ * This file is part of the Mingw32 package.
+ *
+ * Contributors:
+ * Created by Colin Peters <colin@bird.fu.is.saga-u.ac.jp>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ * $Revision$
+ * $Author$
+ * $Date$
+ *
+ */
+
+#ifndef _TIME_H_
+#define _TIME_H_
+
+/* All the headers include this file. */
+#include <_mingw.h>
+
+#define __need_wchar_t
+#define __need_size_t
+#define __need_NULL
+#ifndef RC_INVOKED
+#include <stddef.h>
+#endif /* Not RC_INVOKED */
+
+/*
+ * Need a definition of time_t.
+ */
+#include <sys/types.h>
+
+/*
+ * Number of clock ticks per second. A clock tick is the unit by which
+ * processor time is measured and is returned by 'clock'.
+ */
+#define CLOCKS_PER_SEC ((clock_t)1000)
+#define CLK_TCK CLOCKS_PER_SEC
+
+
+#ifndef RC_INVOKED
+
+__BEGIN_CSTD_NAMESPACE
+
+/*
+ * A type for storing the current time and date. This is the number of
+ * seconds since midnight Jan 1, 1970.
+ * NOTE: Normally this is defined by the above include of sys/types.h
+ */
+#ifndef _TIME_T_DEFINED
+typedef long time_t;
+#define _TIME_T_DEFINED
+#endif
+
+/*
+ * A type for measuring processor time (in clock ticks).
+ */
+#ifndef _CLOCK_T_DEFINED
+typedef long clock_t;
+#define _CLOCK_T_DEFINED
+#endif
+
+
+/*
+ * A structure for storing all kinds of useful information about the
+ * current (or another) time.
+ */
+struct tm
+{
+ int tm_sec; /* Seconds: 0-59 (K&R says 0-61?) */
+ int tm_min; /* Minutes: 0-59 */
+ int tm_hour; /* Hours since midnight: 0-23 */
+ int tm_mday; /* Day 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 Jan. 1: 0-365 */
+ int tm_isdst; /* +1 Daylight Savings Time, 0 No DST,
+ * -1 don't know */
+};
+
+
+clock_t clock (void);
+time_t time (time_t*);
+double difftime (time_t, time_t);
+time_t mktime (struct tm*);
+
+/*
+ * These functions write to and return pointers to static buffers that may
+ * be overwritten by other function calls. Yikes!
+ *
+ * NOTE: localtime, and perhaps the others of the four functions grouped
+ * below may return NULL if their argument is not 'acceptable'. Also note
+ * that calling asctime with a NULL pointer will produce an Invalid Page
+ * Fault and crap out your program. Guess how I know. Hint: stat called on
+ * a directory gives 'invalid' times in st_atime etc...
+ */
+char* asctime (const struct tm*);
+char* ctime (const time_t*);
+struct tm* gmtime (const time_t*);
+struct tm* localtime (const time_t*);
+
+
+size_t strftime (char*, size_t, const char*, const struct tm*);
+
+size_t wcsftime (wchar_t*, size_t, const wchar_t*, const struct tm*);
+
+__END_CSTD_NAMESPACE
+__BEGIN_CGLOBAL_NAMESPACE
+
+#ifndef __STRICT_ANSI__
+extern void _tzset (void);
+
+#ifndef _NO_OLDNAMES
+extern void tzset (void);
+#endif
+
+size_t strftime(char*, size_t, const char*, const struct tm*);
+char* _strdate(char*);
+char* _strtime(char*);
+
+#endif /* Not __STRICT_ANSI__ */
+
+/*
+ * _daylight: non zero if daylight savings time is used.
+ * _timezone: difference in seconds between GMT and local time.
+ * _tzname: standard/daylight savings time zone names (an array with two
+ * elements).
+ */
+#ifdef __MSVCRT__
+
+/* These are for compatibility with pre-VC 5.0 suppied MSVCRT. */
+extern int* __p__daylight (void);
+extern long* __p__timezone (void);
+extern char** __p__tzname (void);
+
+__MINGW_IMPORT int _daylight;
+__MINGW_IMPORT long _timezone;
+__MINGW_IMPORT char *_tzname[2];
+
+#else /* not __MSVCRT (ie. crtdll) */
+
+#ifndef __DECLSPEC_SUPPORTED
+
+extern int* _imp___daylight_dll;
+extern long* _imp___timezone_dll;
+extern char** _imp___tzname;
+
+#define _daylight (*_imp___daylight_dll)
+#define _timezone (*_imp___timezone_dll)
+#define _tzname (*_imp___tzname)
+
+#else /* __DECLSPEC_SUPPORTED */
+
+__MINGW_IMPORT int _daylight_dll;
+__MINGW_IMPORT long _timezone_dll;
+__MINGW_IMPORT char* _tzname[2];
+
+#define _daylight _daylight_dll
+#define _timezone _timezone_dll
+
+#endif /* __DECLSPEC_SUPPORTED */
+
+#endif /* not __MSVCRT__ */
+
+#ifndef _NO_OLDNAMES
+
+#ifdef __MSVCRT__
+
+/* These go in the oldnames import library for MSVCRT. */
+__MINGW_IMPORT int daylight;
+__MINGW_IMPORT long timezone;
+__MINGW_IMPORT char *tzname[2];
+
+#ifndef _WTIME_DEFINED
+
+/* wide function prototypes, also declared in wchar.h */
+
+wchar_t * _wasctime(const struct tm*);
+wchar_t * _wctime(const time_t*);
+wchar_t* _wstrdate(wchar_t*);
+wchar_t* _wstrtime(wchar_t*);
+
+#define _WTIME_DEFINED
+#endif /* _WTIME_DEFINED */
+
+
+#else /* not __MSVCRT__ */
+
+/* CRTDLL is royally messed up when it comes to these macros.
+ TODO: import and alias these via oldnames import library instead
+ of macros. */
+
+#define daylight _daylight
+/* NOTE: timezone not defined because it would conflict with sys/timeb.h.
+ Also, tzname used to a be macro, but now it's in moldname. */
+__MINGW_IMPORT char *tzname[2];
+
+#endif /* not __MSVCRT__ */
+
+#endif /* Not _NO_OLDNAMES */
+
+__END_CGLOBAL_NAMESPACE
+
+#endif /* Not RC_INVOKED */
+
+#endif /* Not _TIME_H_ */
+