Lines Matching refs:duration

2  * $Id: duration.c 4518 2011-02-24 15:39:09Z matthijs $
41 #include <ldns/duration.h>
50 * Create a new 'instant' duration.
56 ldns_duration_type* duration;
58 duration = malloc(sizeof(ldns_duration_type));
59 if (!duration) {
62 duration->years = 0;
63 duration->months = 0;
64 duration->weeks = 0;
65 duration->days = 0;
66 duration->hours = 0;
67 duration->minutes = 0;
68 duration->seconds = 0;
69 return duration;
114 * Create a duration from string.
120 ldns_duration_type* duration = ldns_duration_create();
124 if (!duration) {
128 return duration;
133 ldns_duration_cleanup(duration);
140 duration->years = (time_t) atoi(str+1);
146 duration->months = (time_t) atoi(str+1);
152 duration->days = (time_t) atoi(str+1);
162 duration->hours = (time_t) atoi(str+1);
168 duration->minutes = (time_t) atoi(str+1);
174 duration->seconds = (time_t) atoi(str+1);
182 ldns_duration_cleanup(duration);
185 duration->weeks = (time_t) atoi(str+1);
189 return duration;
198 digits_in_number(time_t duration)
200 uint32_t period = (uint32_t) duration;
212 * Convert a duration to a string.
216 ldns_duration2string(ldns_duration_type* duration)
222 if (!duration) {
226 if (duration->years > 0) {
227 count = count + 1 + digits_in_number(duration->years);
229 if (duration->months > 0) {
230 count = count + 1 + digits_in_number(duration->months);
232 if (duration->weeks > 0) {
233 count = count + 1 + digits_in_number(duration->weeks);
235 if (duration->days > 0) {
236 count = count + 1 + digits_in_number(duration->days);
238 if (duration->hours > 0) {
239 count = count + 1 + digits_in_number(duration->hours);
242 if (duration->minutes > 0) {
243 count = count + 1 + digits_in_number(duration->minutes);
246 if (duration->seconds > 0) {
247 count = count + 1 + digits_in_number(duration->seconds);
258 if (duration->years > 0) {
259 count = digits_in_number(duration->years);
261 snprintf(num, count+2, "%uY", (unsigned int) duration->years);
265 if (duration->months > 0) {
266 count = digits_in_number(duration->months);
268 snprintf(num, count+2, "%uM", (unsigned int) duration->months);
272 if (duration->weeks > 0) {
273 count = digits_in_number(duration->weeks);
275 snprintf(num, count+2, "%uW", (unsigned int) duration->weeks);
279 if (duration->days > 0) {
280 count = digits_in_number(duration->days);
282 snprintf(num, count+2, "%uD", (unsigned int) duration->days);
289 if (duration->hours > 0) {
290 count = digits_in_number(duration->hours);
292 snprintf(num, count+2, "%uH", (unsigned int) duration->hours);
296 if (duration->minutes > 0) {
297 count = digits_in_number(duration->minutes);
299 snprintf(num, count+2, "%uM", (unsigned int) duration->minutes);
303 if (duration->seconds > 0) {
304 count = digits_in_number(duration->seconds);
306 snprintf(num, count+2, "%uS", (unsigned int) duration->seconds);
315 * Convert a duration to a time.
319 ldns_duration2time(ldns_duration_type* duration)
323 if (duration) {
324 period += (duration->seconds);
325 period += (duration->minutes)*60;
326 period += (duration->hours)*3600;
327 period += (duration->days)*86400;
328 period += (duration->weeks)*86400*7;
329 period += (duration->months)*86400*31;
330 period += (duration->years)*86400*365;
334 if (duration->months || duration->years) {
343 * Clean up duration.
347 ldns_duration_cleanup(ldns_duration_type* duration)
349 if (!duration) {
352 free(duration);