Add iso8601_add_nanoseconds, add define for BILLION
This commit is contained in:
parent
20a7d92d1c
commit
a0800d0ed2
|
@ -7,13 +7,13 @@
|
|||
|
||||
#include "iso8601.h"
|
||||
|
||||
// Below are all the includes used throughout the library.
|
||||
/* Below are all the includes used throughout the library. */
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
|
||||
#include <stdio.h>
|
||||
#define BILLION (1000000000L)
|
||||
|
||||
/* options for text editors
|
||||
kate: replace-trailing-space-save true; space-indent true; tab-width 4;
|
||||
|
|
|
@ -71,6 +71,7 @@ int iso8601_lt(const struct iso8601_date* d1, const struct iso8601_date* d2);
|
|||
int iso8601_lte(const struct iso8601_date* d1, const struct iso8601_date* d2);
|
||||
int iso8601_eq(const struct iso8601_date* d1, const struct iso8601_date* d2);
|
||||
void iso8601_add_seconds(struct iso8601_date* date, long seconds);
|
||||
void iso8601_add_nanoseconds(struct iso8601_date* date, long nano);
|
||||
|
||||
/* leap.c */
|
||||
int iso8601_seconds_leap(const struct iso8601_date* date);
|
||||
|
|
|
@ -50,7 +50,7 @@ int iso8601_valid_leap(const struct iso8601_date* date)
|
|||
{
|
||||
int num_ly = 0, i = 0;
|
||||
|
||||
if(date->nsec < 0 || date->nsec >= 1000000000) return 0;
|
||||
if(date->nsec < 0 || date->nsec >= BILLION) return 0;
|
||||
|
||||
switch(date->sec) {
|
||||
case 0 ... 86399:
|
||||
|
|
|
@ -68,6 +68,25 @@ void iso8601_add_seconds(struct iso8601_date* date, long seconds)
|
|||
|
||||
|
||||
|
||||
void iso8601_add_nanoseconds(struct iso8601_date* date, long nsec)
|
||||
{
|
||||
ldiv_t qr;
|
||||
|
||||
qr = ldiv(nsec, BILLION);
|
||||
date->nsec += qr.rem;
|
||||
if(date->nsec > BILLION) {
|
||||
date->nsec -= BILLION;
|
||||
++qr.quot;
|
||||
} else if(date->nsec < 0) {
|
||||
date->nsec += BILLION;
|
||||
--qr.quot;
|
||||
}
|
||||
|
||||
iso8601_add_seconds(date, qr.quot);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* options for text editors
|
||||
kate: replace-trailing-space-save true; space-indent true; tab-width 4;
|
||||
vim: expandtab:ts=4:sw=4
|
||||
|
|
|
@ -46,7 +46,7 @@ int iso8601_parse(const char* str, struct iso8601_date* earliest, struct iso8601
|
|||
++dig; \
|
||||
num *= 10; \
|
||||
num += ch - '0'; \
|
||||
if(num > 1000000000) { \
|
||||
if(num > BILLION) { \
|
||||
return -1; \
|
||||
} \
|
||||
}while(0)
|
||||
|
|
Loading…
Reference in New Issue