This addresses an issue introduced early in 0.103 development when the
start/end timestamps were added to the scan summary.
The localtime function equivalent on Windows has the argument order reversed.
... | ... |
@@ -62,7 +62,8 @@ int main(int argc, char **argv) |
62 | 62 |
{ |
63 | 63 |
int ds, dms, ret, infected = 0, err = 0; |
64 | 64 |
struct timeval t1, t2; |
65 |
- time_t starttime; |
|
65 |
+ time_t date_start, date_end; |
|
66 |
+ |
|
66 | 67 |
struct optstruct *opts; |
67 | 68 |
const struct optstruct *opt; |
68 | 69 |
char buffer[26]; |
... | ... |
@@ -142,9 +143,7 @@ int main(int argc, char **argv) |
142 | 142 |
sigaction(SIGPIPE, &sigact, NULL); |
143 | 143 |
#endif |
144 | 144 |
|
145 |
- time(&starttime); |
|
146 |
- /* ctime() does \n, but I need it once more */ |
|
147 |
- |
|
145 |
+ date_start = time(NULL); |
|
148 | 146 |
gettimeofday(&t1, NULL); |
149 | 147 |
|
150 | 148 |
ret = client(opts, &infected, &err); |
... | ... |
@@ -152,6 +151,9 @@ int main(int argc, char **argv) |
152 | 152 |
|
153 | 153 |
/* TODO: Implement STATUS in clamd */ |
154 | 154 |
if (!optget(opts, "no-summary")->enabled) { |
155 |
+ struct tm tmp; |
|
156 |
+ |
|
157 |
+ date_end = time(NULL); |
|
155 | 158 |
gettimeofday(&t2, NULL); |
156 | 159 |
ds = t2.tv_sec - t1.tv_sec; |
157 | 160 |
dms = t2.tv_usec - t1.tv_usec; |
... | ... |
@@ -168,10 +170,26 @@ int main(int argc, char **argv) |
168 | 168 |
logg("Not moved: %d\n", notmoved); |
169 | 169 |
} |
170 | 170 |
logg("Time: %d.%3.3d sec (%d m %d s)\n", ds, dms / 1000, ds / 60, ds % 60); |
171 |
- strftime(buffer, sizeof(buffer), "%Y:%m:%d %H:%M:%S", localtime(&t1.tv_sec)); |
|
171 |
+ |
|
172 |
+#ifdef _WIN32 |
|
173 |
+ if (0 != localtime_s(&tmp, &date_start)) { |
|
174 |
+#else |
|
175 |
+ if (!localtime_r(&date_start, &tmp)) { |
|
176 |
+#endif |
|
177 |
+ logg("!Failed to get local time for Start Date.\n"); |
|
178 |
+ } |
|
179 |
+ strftime(buffer, sizeof(buffer), "%Y:%m:%d %H:%M:%S", &tmp); |
|
172 | 180 |
logg("Start Date: %s\n", buffer); |
173 |
- strftime(buffer, sizeof(buffer), "%Y:%m:%d %H:%M:%S", localtime(&t2.tv_sec)); |
|
174 |
- logg("End Date: %s\n", buffer); |
|
181 |
+ |
|
182 |
+#ifdef _WIN32 |
|
183 |
+ if (0 != localtime_s(&tmp, &date_end)) { |
|
184 |
+#else |
|
185 |
+ if (!localtime_r(&date_end, &tmp)) { |
|
186 |
+#endif |
|
187 |
+ logg("!Failed to get local time for End Date.\n"); |
|
188 |
+ } |
|
189 |
+ strftime(buffer, sizeof(buffer), "%Y:%m:%d %H:%M:%S", &tmp); |
|
190 |
+ logg("End Date: %s\n", buffer); |
|
175 | 191 |
} |
176 | 192 |
|
177 | 193 |
logg_close(); |
... | ... |
@@ -62,6 +62,8 @@ int main(int argc, char **argv) |
62 | 62 |
int ds, dms, ret; |
63 | 63 |
double mb, rmb; |
64 | 64 |
struct timeval t1, t2; |
65 |
+ time_t date_start, date_end; |
|
66 |
+ |
|
65 | 67 |
char buffer[26]; |
66 | 68 |
#ifndef _WIN32 |
67 | 69 |
sigset_t sigset; |
... | ... |
@@ -155,13 +157,16 @@ int main(int argc, char **argv) |
155 | 155 |
|
156 | 156 |
memset(&info, 0, sizeof(struct s_info)); |
157 | 157 |
|
158 |
+ date_start = time(NULL); |
|
158 | 159 |
gettimeofday(&t1, NULL); |
159 | 160 |
|
160 | 161 |
ret = scanmanager(opts); |
161 | 162 |
|
162 | 163 |
if (!optget(opts, "no-summary")->enabled) { |
163 |
- gettimeofday(&t2, NULL); |
|
164 |
+ struct tm tmp; |
|
164 | 165 |
|
166 |
+ date_end = time(NULL); |
|
167 |
+ gettimeofday(&t2, NULL); |
|
165 | 168 |
ds = t2.tv_sec - t1.tv_sec; |
166 | 169 |
dms = t2.tv_usec - t1.tv_usec; |
167 | 170 |
ds -= (dms < 0) ? (1) : (0); |
... | ... |
@@ -185,10 +190,26 @@ int main(int argc, char **argv) |
185 | 185 |
rmb = info.rblocks * (CL_COUNT_PRECISION / 1024) / 1024.0; |
186 | 186 |
logg("Data read: %2.2lf MB (ratio %.2f:1)\n", rmb, info.rblocks ? (double)info.blocks / (double)info.rblocks : 0); |
187 | 187 |
logg("Time: %u.%3.3u sec (%u m %u s)\n", ds, dms / 1000, ds / 60, ds % 60); |
188 |
- strftime(buffer, sizeof(buffer), "%Y:%m:%d %H:%M:%S", localtime(&t1.tv_sec)); |
|
189 |
- logg("Start Date: %s\n", buffer); |
|
190 |
- strftime(buffer, sizeof(buffer), "%Y:%m:%d %H:%M:%S", localtime(&t2.tv_sec)); |
|
191 |
- logg("End Date: %s\n", buffer); |
|
188 |
+ |
|
189 |
+#ifdef _WIN32 |
|
190 |
+ if (0 != localtime_s(&tmp, &date_start)) { |
|
191 |
+#else |
|
192 |
+ if (!localtime_r(&date_start, &tmp)) { |
|
193 |
+#endif |
|
194 |
+ logg("!Failed to get local time for Start Date.\n"); |
|
195 |
+ } |
|
196 |
+ strftime(buffer, sizeof(buffer), "%Y:%m:%d %H:%M:%S", &tmp); |
|
197 |
+ logg("Start Date: %s\n", buffer); |
|
198 |
+ |
|
199 |
+#ifdef _WIN32 |
|
200 |
+ if (0 != localtime_s(&tmp, &date_end)) { |
|
201 |
+#else |
|
202 |
+ if (!localtime_r(&date_end, &tmp)) { |
|
203 |
+#endif |
|
204 |
+ logg("!Failed to get local time for End Date.\n"); |
|
205 |
+ } |
|
206 |
+ strftime(buffer, sizeof(buffer), "%Y:%m:%d %H:%M:%S", &tmp); |
|
207 |
+ logg("End Date: %s\n", buffer); |
|
192 | 208 |
} |
193 | 209 |
|
194 | 210 |
optfree(opts); |