- Added, cleaned up and/or documentated _{begin,end}thread{,ex}.
[wine] / dlls / msvcrt / time.c
1 /*
2  * msvcrt.dll date/time functions
3  *
4  * Copyright 1996,1998 Marcus Meissner
5  * Copyright 1996 Jukka Iivonen
6  * Copyright 1997,2000 Uwe Bonnes
7  * Copyright 2000 Jon Griffiths
8  */
9
10 #include <time.h>
11 #include <sys/times.h>
12
13 #include "msvcrt.h"
14 #include "msvcrt/sys/timeb.h"
15 #include "msvcrt/time.h"
16
17
18 DEFAULT_DEBUG_CHANNEL(msvcrt);
19
20
21 /* INTERNAL: Return formatted current time/date */
22 char* msvcrt_get_current_time(char* out, const char* format)
23 {
24   static const MSVCRT_time_t bad_time = (MSVCRT_time_t)-1;
25   time_t t;
26   struct tm *_tm = NULL;
27   char *retval = NULL;
28
29   if (time(&t) != bad_time && (_tm = localtime(&t)) &&
30       strftime(out,9,format,_tm) == 8)
31     retval = out;
32   return retval;
33 }
34
35 /**********************************************************************
36  *              _strdate (MSVCRT.@)
37  */
38 char* _strdate(char* date)
39 {
40   return msvcrt_get_current_time(date,"%m/%d/%y");
41 }
42
43 /*********************************************************************
44  *              _strtime (MSVCRT.@)
45  */
46 char* _strtime(char* date)
47 {
48   return msvcrt_get_current_time(date,"%H:%M:%S");
49 }
50
51 /*********************************************************************
52  *              clock (MSVCRT.@)
53  */
54 MSVCRT_clock_t MSVCRT_clock(void)
55 {
56   struct tms alltimes;
57   clock_t res;
58
59   times(&alltimes);
60   res = alltimes.tms_utime + alltimes.tms_stime +
61         alltimes.tms_cutime + alltimes.tms_cstime;
62   /* FIXME: We need some symbolic representation for CLOCKS_PER_SEC,
63    *  10 holds only for Windows/Linux_i86)
64    */
65   return 10*res;
66 }
67
68 /*********************************************************************
69  *              difftime (MSVCRT.@)
70  */
71 double MSVCRT_difftime(MSVCRT_time_t time1, MSVCRT_time_t time2)
72 {
73     return (double)(time1 - time2);
74 }
75
76 /*********************************************************************
77  *              time (MSVCRT.@)
78  */
79 MSVCRT_time_t MSVCRT_time(MSVCRT_time_t* buf)
80 {
81   MSVCRT_time_t curtime = time(NULL);
82   return buf ? *buf = curtime : curtime;
83 }
84
85 /*********************************************************************
86  *              _ftime (MSVCRT.@)
87  */
88 void _ftime(struct _timeb *buf)
89 {
90   buf->time = MSVCRT_time(NULL);
91   buf->millitm = 0; /* FIXME */
92   buf->timezone = 0;
93   buf->dstflag = 0;
94 }