From: Lennart Poettering Date: Sun, 25 Oct 2015 21:37:43 +0000 (+0100) Subject: user-util: simplify uid parsing a bit X-Git-Tag: v228~145^2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b1d5277372a26e5a5b9980174652e1e287ba6b14;p=thirdparty%2Fsystemd.git user-util: simplify uid parsing a bit --- diff --git a/src/basic/user-util.c b/src/basic/user-util.c index 637391f4a79..ebeac99d312 100644 --- a/src/basic/user-util.c +++ b/src/basic/user-util.c @@ -31,40 +31,35 @@ bool uid_is_valid(uid_t uid) { /* Some libc APIs use UID_INVALID as special placeholder */ - if (uid == (uid_t) 0xFFFFFFFF) + if (uid == (uid_t) UINT32_C(0xFFFFFFFF)) return false; /* A long time ago UIDs where 16bit, hence explicitly avoid the 16bit -1 too */ - if (uid == (uid_t) 0xFFFF) + if (uid == (uid_t) UINT32_C(0xFFFF)) return false; return true; } -int parse_uid(const char *s, uid_t* ret_uid) { - unsigned long ul = 0; - uid_t uid; +int parse_uid(const char *s, uid_t *ret) { + uint32_t uid = 0; int r; assert(s); - r = safe_atolu(s, &ul); + assert_cc(sizeof(uid_t) == sizeof(uint32_t)); + r = safe_atou32(s, &uid); if (r < 0) return r; - uid = (uid_t) ul; - - if ((unsigned long) uid != ul) - return -ERANGE; - if (!uid_is_valid(uid)) return -ENXIO; /* we return ENXIO instead of EINVAL * here, to make it easy to distuingish * invalid numeric uids invalid * strings. */ - if (ret_uid) - *ret_uid = uid; + if (ret) + *ret = uid; return 0; }