X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fbasic%2Fparse-util.c;h=757e5b4127041f0de12136b0600702878eb32b35;hp=a580416711d515ae1f081959299b1a9527eebc53;hb=906f94da76802b2aae4dd052018766f5378ae4b8;hpb=1dc76d84ae35f23e10f37925df55bc66c61b0eaa
diff --git a/src/basic/parse-util.c b/src/basic/parse-util.c
index a58041671..757e5b412 100644
--- a/src/basic/parse-util.c
+++ b/src/basic/parse-util.c
@@ -1,5 +1,3 @@
-/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
-
/***
This file is part of systemd.
@@ -19,11 +17,24 @@
along with systemd; If not, see .
***/
+#include
+#include
+#include
+#include
+#include
+#include
+#if defined(__GLIBC__)
+# include
+#endif // defined(__GLIBC__)
+
#include "alloc-util.h"
//#include "extract-word.h"
+#include "macro.h"
#include "parse-util.h"
#include "string-util.h"
-#include "util.h"
+
+/// Additional includes needed by elogind
+#include "musl_missing.h"
int parse_boolean(const char *v) {
assert(v);
@@ -501,7 +512,7 @@ int parse_fractional_part_u(const char **p, size_t digits, unsigned *res) {
s = *p;
/* accept any number of digits, strtoull is limted to 19 */
- for(i=0; i < digits; i++,s++) {
+ for (i=0; i < digits; i++,s++) {
if (*s < '0' || *s > '9') {
if (i == 0)
return -EINVAL;
@@ -528,3 +539,29 @@ int parse_fractional_part_u(const char **p, size_t digits, unsigned *res) {
return 0;
}
+
+int parse_percent_unbounded(const char *p) {
+ const char *pc, *n;
+ unsigned v;
+ int r;
+
+ pc = endswith(p, "%");
+ if (!pc)
+ return -EINVAL;
+
+ n = strndupa(p, pc - p);
+ r = safe_atou(n, &v);
+ if (r < 0)
+ return r;
+
+ return (int) v;
+}
+
+int parse_percent(const char *p) {
+ int v = parse_percent_unbounded(p);
+
+ if (v > 100)
+ return -ERANGE;
+
+ return v;
+}