summaryrefslogtreecommitdiff
path: root/src/basic/parse-util.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2015-11-18 11:31:42 +0100
committerLennart Poettering <lennart@poettering.net>2015-11-18 11:31:42 +0100
commitaa2fb804a18b493ae34f1eda20037ad12f5da2a5 (patch)
tree25d4e7f99f7c0b2943cefa0f1b94fe1601971eef /src/basic/parse-util.c
parentedf1e713816cd514ba2d9c3e1a7661a2d27d38c8 (diff)
parentab15dfb7b1bfc1b4f2ad85aa93e66aeb84a5116c (diff)
Merge pull request #1912 from mustrumr/calendarspec-sub-second-v3
Calendarspec sub second v3
Diffstat (limited to 'src/basic/parse-util.c')
-rw-r--r--src/basic/parse-util.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/basic/parse-util.c b/src/basic/parse-util.c
index 151067e916..3ae99d9334 100644
--- a/src/basic/parse-util.c
+++ b/src/basic/parse-util.c
@@ -490,3 +490,39 @@ int safe_atod(const char *s, double *ret_d) {
*ret_d = (double) d;
return 0;
}
+
+int parse_fractional_part_u(const char **p, size_t digits, unsigned *res) {
+ size_t i;
+ unsigned val = 0;
+ const char *s;
+
+ s = *p;
+
+ /* accept any number of digits, strtoull is limted to 19 */
+ for(i=0; i < digits; i++,s++) {
+ if (*s < '0' || *s > '9') {
+ if (i == 0)
+ return -EINVAL;
+
+ /* too few digits, pad with 0 */
+ for (; i < digits; i++)
+ val *= 10;
+
+ break;
+ }
+
+ val *= 10;
+ val += *s - '0';
+ }
+
+ /* maybe round up */
+ if (*s >= '5' && *s <= '9')
+ val++;
+
+ s += strspn(s, DIGITS);
+
+ *p = s;
+ *res = val;
+
+ return 0;
+}