1 /** 2 * D header file for C99. 3 * 4 * $(C_HEADER_DESCRIPTION pubs.opengroup.org/onlinepubs/009695399/basedefs/_time.h.html, _time.h) 5 * 6 * Copyright: Copyright Sean Kelly 2005 - 2009. 7 * License: Distributed under the 8 * $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0). 9 * (See accompanying file LICENSE) 10 * Authors: Sean Kelly, 11 * Alex Rønne Petersen 12 * Source: $(DRUNTIMESRC core/stdc/_time.d) 13 * Standards: ISO/IEC 9899:1999 (E) 14 */ 15 16 module core.sys.posix.stdc.time; 17 18 version (Posix): 19 20 import core.stdc.config; 21 22 version (OSX) 23 version = Darwin; 24 else version (iOS) 25 version = Darwin; 26 else version (TVOS) 27 version = Darwin; 28 else version (WatchOS) 29 version = Darwin; 30 31 extern (C): 32 @trusted: // There are only a few functions here that use unsafe C strings. 33 nothrow: 34 @nogc: 35 36 /// 37 struct tm 38 { 39 int tm_sec; /// seconds after the minute [0-60] 40 int tm_min; /// minutes after the hour [0-59] 41 int tm_hour; /// hours since midnight [0-23] 42 int tm_mday; /// day of the month [1-31] 43 int tm_mon; /// months since January [0-11] 44 int tm_year; /// years since 1900 45 int tm_wday; /// days since Sunday [0-6] 46 int tm_yday; /// days since January 1 [0-365] 47 int tm_isdst; /// Daylight Savings Time flag 48 c_long tm_gmtoff; /// offset from CUT in seconds 49 char* tm_zone; /// timezone abbreviation 50 } 51 52 public import core.sys.posix.sys.types : time_t, clock_t; 53 54 /// 55 version (CRuntime_Glibc) 56 { 57 enum clock_t CLOCKS_PER_SEC = 1_000_000; 58 clock_t clock(); 59 } 60 else version (CRuntime_Musl) 61 { 62 enum clock_t CLOCKS_PER_SEC = 1_000_000; 63 clock_t clock(); 64 } 65 else version (CRuntime_Bionic) 66 { 67 enum clock_t CLOCKS_PER_SEC = 1_000_000; 68 clock_t clock(); 69 } 70 else version (CRuntime_UClibc) 71 { 72 enum clock_t CLOCKS_PER_SEC = 1_000_000; 73 clock_t clock(); 74 } 75 else version (OSX) 76 { 77 enum clock_t CLOCKS_PER_SEC = 1_000_000; // was 100 until OSX 10.4/10.5 78 version (X86) 79 extern (C) pragma(mangle, "clock$UNIX2003") clock_t clock(); 80 else 81 clock_t clock(); 82 } 83 else version (Darwin) // other Darwins (iOS, TVOS, WatchOS) 84 { 85 enum clock_t CLOCKS_PER_SEC = 1_000_000; 86 clock_t clock(); 87 } 88 else version (FreeBSD) 89 { 90 enum clock_t CLOCKS_PER_SEC = 128; 91 clock_t clock(); 92 } 93 else version (NetBSD) 94 { 95 enum clock_t CLOCKS_PER_SEC = 100; 96 clock_t clock(); 97 } 98 else version (OpenBSD) 99 { 100 enum clock_t CLOCKS_PER_SEC = 100; 101 clock_t clock(); 102 } 103 else version (DragonFlyBSD) 104 { 105 enum clock_t CLOCKS_PER_SEC = 128; 106 clock_t clock(); 107 } 108 else version (Solaris) 109 { 110 enum clock_t CLOCKS_PER_SEC = 1_000_000; 111 clock_t clock(); 112 } 113 else 114 { 115 static assert(0, "unsupported system"); 116 } 117 118 version (Darwin) 119 { 120 /// 121 void tzset(); // non-standard 122 /// 123 extern __gshared const(char)*[2] tzname; // non-standard 124 } 125 else version (CRuntime_Glibc) 126 { 127 /// 128 void tzset(); // non-standard 129 /// 130 extern __gshared const(char)*[2] tzname; // non-standard 131 } 132 else version (FreeBSD) 133 { 134 /// 135 void tzset(); // non-standard 136 /// 137 extern __gshared const(char)*[2] tzname; // non-standard 138 } 139 else version (NetBSD) 140 { 141 /// 142 void tzset(); // non-standard 143 /// 144 extern __gshared const(char)*[2] tzname; // non-standard 145 } 146 else version (OpenBSD) 147 { 148 /// 149 void tzset(); // non-standard 150 /// 151 extern __gshared const(char)*[2] tzname; // non-standard 152 } 153 else version (DragonFlyBSD) 154 { 155 /// 156 void tzset(); // non-standard 157 /// 158 extern __gshared const(char)*[2] tzname; // non-standard 159 } 160 else version (Solaris) 161 { 162 /// 163 void tzset(); 164 /// 165 extern __gshared const(char)*[2] tzname; 166 } 167 else version (CRuntime_Bionic) 168 { 169 /// 170 void tzset(); 171 /// 172 extern __gshared const(char)*[2] tzname; 173 } 174 else version (CRuntime_Musl) 175 { 176 /// 177 void tzset(); // non-standard 178 /// 179 extern __gshared const(char)*[2] tzname; // non-standard 180 } 181 else version (CRuntime_UClibc) 182 { 183 /// 184 void tzset(); 185 /// 186 extern __gshared const(char)*[2] tzname; 187 } 188 else 189 { 190 static assert(false, "Unsupported platform"); 191 }