summaryrefslogtreecommitdiff
path: root/src/basic
diff options
context:
space:
mode:
authorDavid Tardon <dtardon@redhat.com>2023-05-05 08:09:14 +0200
committerDavid Tardon <dtardon@redhat.com>2023-05-05 08:54:28 +0200
commitb8f83d7f0c35dca6ca3a23c42215d566e2815ca5 (patch)
tree3d6713e2a00c49626ae857361ab71103ad4d4e2a /src/basic
parent9f2f16a344e8a7660756859dcd303f0bf5763b05 (diff)
downloadsystemd-b8f83d7f0c35dca6ca3a23c42215d566e2815ca5.tar.gz
fd-util: introduce parse_fd()
It's a simple wrapper for safe_atoi() that returns error if the parsed fd is < 0 .
Diffstat (limited to 'src/basic')
-rw-r--r--src/basic/parse-util.c15
-rw-r--r--src/basic/parse-util.h1
2 files changed, 16 insertions, 0 deletions
diff --git a/src/basic/parse-util.c b/src/basic/parse-util.c
index a53cbc73b8..d6138f0295 100644
--- a/src/basic/parse-util.c
+++ b/src/basic/parse-util.c
@@ -333,6 +333,21 @@ int parse_errno(const char *t) {
return e;
}
+int parse_fd(const char *t) {
+ int r, fd;
+
+ assert(t);
+
+ r = safe_atoi(t, &fd);
+ if (r < 0)
+ return r;
+
+ if (fd < 0)
+ return -ERANGE;
+
+ return fd;
+}
+
static const char *mangle_base(const char *s, unsigned *base) {
const char *k;
diff --git a/src/basic/parse-util.h b/src/basic/parse-util.h
index 877199529d..c480407c2a 100644
--- a/src/basic/parse-util.h
+++ b/src/basic/parse-util.h
@@ -21,6 +21,7 @@ int parse_size(const char *t, uint64_t base, uint64_t *size);
int parse_sector_size(const char *t, uint64_t *ret);
int parse_range(const char *t, unsigned *lower, unsigned *upper);
int parse_errno(const char *t);
+int parse_fd(const char *t);
#define SAFE_ATO_REFUSE_PLUS_MINUS (1U << 30)
#define SAFE_ATO_REFUSE_LEADING_ZERO (1U << 29)