File: date_8c-source.html

package info (click to toggle)
klone 1.1.1.dfsg1-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 6,480 kB
  • ctags: 4,238
  • sloc: ansic: 16,288; makefile: 384; sh: 351
file content (225 lines) | stat: -rw-r--r-- 13,371 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>KLone: date.c Source File</title>
<link href="kl.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.3.9.1 -->
<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="modules.html">Modules</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="dirs.html">Directories</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a></div>
<div class="nav">
<a class="el" href="dir_000000.html">src</a>&nbsp;/&nbsp;<a class="el" href="dir_000001.html">libutils</a></div>
<h1>date.c</h1><a href="date_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">/*</span>
00002 <span class="comment"> * Copyright (c) 2005, 2006 by KoanLogic s.r.l. &lt;http://www.koanlogic.com&gt;</span>
00003 <span class="comment"> * All rights reserved.</span>
00004 <span class="comment"> *</span>
00005 <span class="comment"> * This file is part of KLone, and as such it is subject to the license stated</span>
00006 <span class="comment"> * in the LICENSE file which you have received as part of this distribution.</span>
00007 <span class="comment"> *</span>
00008 <span class="comment"> * $Id: date.c,v 1.9 2006/04/22 13:14:46 tat Exp $</span>
00009 <span class="comment"> */</span>
00010 
00011 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
00012 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
00013 <span class="preprocessor">#include &lt;time.h&gt;</span>
00014 <span class="preprocessor">#include &lt;ctype.h&gt;</span>
00015 <span class="preprocessor">#include &lt;fcntl.h&gt;</span>
00016 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
00017 <span class="preprocessor">#include &lt;dirent.h&gt;</span>
00018 <span class="preprocessor">#include &lt;sys/stat.h&gt;</span>
00019 <span class="preprocessor">#include &lt;<a class="code" href="klone_8h.html">klone/klone.h</a>&gt;</span>
00020 <span class="preprocessor">#include &lt;<a class="code" href="os_8h.html">klone/os.h</a>&gt;</span>
00021 <span class="preprocessor">#include &lt;<a class="code" href="utils_8h.html">klone/utils.h</a>&gt;</span>
00022 
<a name="l00028"></a><a class="code" href="group__u__t.html#ga0">00028</a> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="group__u__t.html#ga0">days3</a>[] = { 
00029     <span class="stringliteral">"Sun"</span>, <span class="stringliteral">"Mon"</span>, <span class="stringliteral">"Tue"</span>, <span class="stringliteral">"Wed"</span>, <span class="stringliteral">"Thu"</span>, <span class="stringliteral">"Fri"</span>, <span class="stringliteral">"Sat"</span> 
00030 };
<a name="l00031"></a><a class="code" href="group__u__t.html#ga1">00031</a> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="group__u__t.html#ga1">days</a>[] = { 
00032     <span class="stringliteral">"Sunday"</span>, <span class="stringliteral">"Monday"</span>, <span class="stringliteral">"Tuesday"</span>, <span class="stringliteral">"Wednesday"</span>, <span class="stringliteral">"Thursday"</span>,  <span class="stringliteral">"Friday"</span>,
00033     <span class="stringliteral">"Saturday"</span>, <span class="stringliteral">"Sunday"</span> 
00034 };
<a name="l00035"></a><a class="code" href="group__u__t.html#ga2">00035</a> <span class="keyword">const</span> <span class="keywordtype">char</span>* <a class="code" href="group__u__t.html#ga2">months</a>[] = { 
00036     <span class="stringliteral">"Jan"</span>, <span class="stringliteral">"Feb"</span>, <span class="stringliteral">"Mar"</span>, <span class="stringliteral">"Apr"</span>, <span class="stringliteral">"May"</span>, <span class="stringliteral">"Jun"</span>, 
00037     <span class="stringliteral">"Jul"</span>, <span class="stringliteral">"Aug"</span>, <span class="stringliteral">"Sep"</span>, <span class="stringliteral">"Oct"</span>, <span class="stringliteral">"Nov"</span>, <span class="stringliteral">"Dec"</span> 
00038 };
00039 
00040 <span class="keyword">static</span> <span class="keywordtype">int</span> month_idx(<span class="keyword">const</span> <span class="keywordtype">char</span> *mon)
00041 {
00042     <span class="keywordtype">int</span> i;
00043 
00044     dbg_return_if (mon == NULL, -1);
00045     
00046     <span class="keywordflow">for</span>(i = 0; i &lt; 12; ++i)
00047         <span class="keywordflow">if</span>(strcasecmp(months[i], mon) == 0)
00048             <span class="keywordflow">return</span> i;
00049 
00050     <span class="keywordflow">return</span> -1;
00051 }
00052 
<a name="l00065"></a><a class="code" href="group__u__t.html#ga5">00065</a> <span class="keywordtype">int</span> <a class="code" href="group__u__t.html#ga5">u_asctime_to_tt</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *str, time_t *tp)
00066 {
00067     <span class="keyword">enum</span> { BUFSZ = 64 };
00068     <span class="keywordtype">char</span> wday[BUFSZ], mon[BUFSZ];
00069     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> day, year, hour, min, sec;
00070     <span class="keyword">struct </span>tm tm;
00071     <span class="keywordtype">int</span> i;
00072 
00073     dbg_return_if (str == NULL, ~0);
00074     dbg_return_if (tp == NULL, ~0);
00075     dbg_return_if (strlen(str) &gt;= BUFSZ, ~0);
00076 
00077     dbg_err_if((i = sscanf(str, <span class="stringliteral">"%s %s %u %u:%u:%u %u"</span>, wday, 
00078         mon, &amp;day, &amp;hour, &amp;min, &amp;sec, &amp;year)) != 7);
00079 
00080     memset(&amp;tm, 0, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> tm));
00081 
00082     <span class="comment">/* time */</span>
00083     tm.tm_sec = sec; tm.tm_min = min; tm.tm_hour = hour;
00084 
00085     <span class="comment">/* date */</span>
00086     tm.tm_mday = day; 
00087     tm.tm_mon = month_idx(mon);
00088     tm.tm_year = year - 1900;
00089 
00090     dbg_err_if(tm.tm_mon &lt; 0);
00091 
00092     *tp = timegm(&amp;tm);
00093     
00094     <span class="keywordflow">return</span> 0;
00095 err:
00096     <span class="keywordflow">return</span> ~0;
00097 }
00098 
<a name="l00111"></a><a class="code" href="group__u__t.html#ga6">00111</a> <span class="keywordtype">int</span> <a class="code" href="group__u__t.html#ga6">u_rfc850_to_tt</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *str, time_t *tp)
00112 {
00113     <span class="keyword">enum</span> { BUFSZ = 64 };
00114     <span class="keywordtype">char</span> wday[BUFSZ], mon[BUFSZ], tzone[BUFSZ];
00115     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> day, year, hour, min, sec;
00116     <span class="keyword">struct </span>tm tm;
00117     <span class="keywordtype">int</span> i;
00118     <span class="keywordtype">char</span> c;
00119 
00120     dbg_return_if (str == NULL, ~0);
00121     dbg_return_if (tp == NULL, ~0);
00122     dbg_return_if (strlen(str) &gt;= BUFSZ, ~0);
00123 
00124     dbg_err_if((i = sscanf(str, <span class="stringliteral">"%[^,], %u%c%[^-]%c%u %u:%u:%u %s"</span>, wday, 
00125         &amp;day, &amp;c, mon, &amp;c, &amp;year, &amp;hour, &amp;min, &amp;sec, tzone)) != 10);
00126 
00127     memset(&amp;tm, 0, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> tm));
00128 
00129     <span class="comment">/* time */</span>
00130     tm.tm_sec = sec; tm.tm_min = min; tm.tm_hour = hour;
00131 
00132     <span class="comment">/* date */</span>
00133     tm.tm_mday = day; 
00134     tm.tm_mon = month_idx(mon);
00135     tm.tm_year = year - 1900;
00136 
00137     dbg_err_if(tm.tm_mon &lt; 0);
00138 
00139 <span class="preprocessor">#ifdef HAVE_TMZONE</span>
00140 <span class="preprocessor"></span>    <span class="comment">/* time zone */</span>
00141     tm.tm_zone = tzone;
00142 <span class="preprocessor">#endif</span>
00143 <span class="preprocessor"></span>
00144     *tp = timegm(&amp;tm);
00145 
00146     <span class="keywordflow">return</span> 0;
00147 err:
00148     <span class="keywordflow">return</span> ~0;
00149 }
00150 
<a name="l00163"></a><a class="code" href="group__u__t.html#ga7">00163</a> <span class="keywordtype">int</span> <a class="code" href="group__u__t.html#ga7">u_rfc822_to_tt</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *str, time_t *tp)
00164 {
00165     <span class="keyword">enum</span> { BUFSZ = 64 };
00166     <span class="keywordtype">char</span> wday[BUFSZ], mon[BUFSZ], tzone[BUFSZ];
00167     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> day, year, hour, min, sec;
00168     <span class="keyword">struct </span>tm tm;
00169 
00170     dbg_return_if (str == NULL, ~0);
00171     dbg_return_if (tp == NULL, ~0);
00172     dbg_return_if (strlen(str) &gt;= BUFSZ, ~0);
00173 
00174     dbg_err_if(sscanf(str, <span class="stringliteral">"%[^,], %u %s %u %u:%u:%u %s"</span>, wday, 
00175         &amp;day, mon, &amp;year, &amp;hour, &amp;min, &amp;sec, tzone) != 8);
00176 
00177     memset(&amp;tm, 0, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> tm));
00178 
00179     <span class="comment">/* time */</span>
00180     tm.tm_sec = sec; tm.tm_min = min; tm.tm_hour = hour;
00181 
00182     <span class="comment">/* date */</span>
00183     tm.tm_mday = day; 
00184     tm.tm_mon = month_idx(mon);
00185     tm.tm_year = year - 1900; 
00186 
00187     dbg_err_if(tm.tm_mon &lt; 0);
00188 
00189 <span class="preprocessor">#ifdef HAVE_TMZONE</span>
00190 <span class="preprocessor"></span>    <span class="comment">/* time zone */</span>
00191     tm.tm_zone = tzone;
00192 <span class="preprocessor">#endif</span>
00193 <span class="preprocessor"></span>
00194     *tp = timegm(&amp;tm);
00195 
00196     <span class="keywordflow">return</span> 0;
00197 err:
00198     <span class="keywordflow">return</span> ~0;
00199 }
00200 
<a name="l00213"></a><a class="code" href="group__u__t.html#ga8">00213</a> <span class="keywordtype">int</span> <a class="code" href="group__u__t.html#ga8">u_httpdate_to_tt</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *str, time_t *tp)
00214 {
00215     dbg_return_if (str == NULL, ~0);
00216     dbg_return_if (tp == NULL, ~0);
00217     dbg_return_if (strlen(str) &lt; 4, ~0);
00218 
00219     <span class="keywordflow">if</span>(str[3] == <span class="charliteral">','</span>)
00220         <span class="keywordflow">return</span> <a class="code" href="group__u__t.html#ga7">u_rfc822_to_tt</a>(str, tp);
00221     <span class="keywordflow">else</span> <span class="keywordflow">if</span>(str[3] == <span class="charliteral">' '</span>)
00222         <span class="keywordflow">return</span> <a class="code" href="group__u__t.html#ga5">u_asctime_to_tt</a>(str, tp);
00223 
00224     <span class="keywordflow">return</span> <a class="code" href="group__u__t.html#ga6">u_rfc850_to_tt</a>(str, tp);
00225 }
00226 
<a name="l00241"></a><a class="code" href="group__u__t.html#ga9">00241</a> <span class="keywordtype">int</span> <a class="code" href="group__u__t.html#ga9">u_tt_to_rfc822</a>(<span class="keywordtype">char</span> dst[], time_t ts)
00242 {
00243     <span class="keyword">enum</span> { RFC822_DATE_BUFSZ = 32 };
00244     <span class="keywordtype">char</span> buf[RFC822_DATE_BUFSZ];
00245     <span class="keyword">struct </span>tm tm;
00246 
00247     dbg_return_if (dst == NULL, ~0);
00248 
00249 <span class="preprocessor">#ifdef OS_WIN</span>
00250 <span class="preprocessor"></span>    memcpy(&amp;tm, gmtime(&amp;ts), <span class="keyword">sizeof</span>(tm));
00251 <span class="preprocessor">#else</span>
00252 <span class="preprocessor"></span>    dbg_err_if(gmtime_r(&amp;ts, &amp;tm) == NULL);
00253 <span class="preprocessor">#endif</span>
00254 <span class="preprocessor"></span>
00255     dbg_err_if(tm.tm_wday &gt; 6 || tm.tm_wday &lt; 0);
00256     dbg_err_if(tm.tm_mon &gt; 11 || tm.tm_mon &lt; 0);
00257 
00258     dbg_err_if(u_snprintf(buf, RFC822_DATE_BUFSZ, 
00259                 <span class="stringliteral">"%s, %02u %s %02u %02u:%02u:%02u GMT"</span>,
00260                 <a class="code" href="group__u__t.html#ga0">days3</a>[tm.tm_wday], 
00261                 tm.tm_mday, <a class="code" href="group__u__t.html#ga2">months</a>[tm.tm_mon], tm.tm_year + 1900, 
00262                 tm.tm_hour, tm.tm_min, tm.tm_sec));
00263 
00264     <span class="comment">/* copy out */</span>
00265     u_sstrncpy(dst, buf, RFC822_DATE_BUFSZ - 1);
00266 
00267     <span class="keywordflow">return</span> 0;
00268 err:
00269     <span class="keywordflow">return</span> ~0;
00270 }
00271 
</pre></div><hr>
<div> 
  <div style="text-align:left">
    <a href="http://www.koanlogic.com/kl/cont/gb/html/products.html">&larr;Products</a>
  </div>
  <div style="text-align:center;">
    &copy; 2005-2006 - <a href="http://www.koanlogic.com">KoanLogic S.r.l.</a> - All rights reserved
  </div>
</div>

</body>
</html>