mirror of
https://github.com/systemd/systemd.git
synced 2026-08-05 07:30:30 +00:00
parse-util: Introduce new parse_range function
This function will be useful for CPUAffinity settings that involve ranges of CPUs. Make it generic and include test coverage to prevent regressions.
This commit is contained in:
@@ -19,6 +19,8 @@
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "extract-word.h"
|
||||
#include "parse-util.h"
|
||||
#include "string-util.h"
|
||||
#include "util.h"
|
||||
@@ -207,6 +209,43 @@ int parse_size(const char *t, uint64_t base, uint64_t *size) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int parse_range(const char *t, unsigned *lower, unsigned *upper) {
|
||||
_cleanup_free_ char *word = NULL;
|
||||
unsigned l, u;
|
||||
int r;
|
||||
|
||||
assert(lower);
|
||||
assert(upper);
|
||||
|
||||
/* Extract the lower bound. */
|
||||
r = extract_first_word(&t, &word, "-", EXTRACT_DONT_COALESCE_SEPARATORS);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r == 0)
|
||||
return -EINVAL;
|
||||
|
||||
r = safe_atou(word, &l);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* Check for the upper bound and extract it if needed */
|
||||
if (!t)
|
||||
/* Single number with no dashes. */
|
||||
u = l;
|
||||
else if (!*t)
|
||||
/* Trailing dash is an error. */
|
||||
return -EINVAL;
|
||||
else {
|
||||
r = safe_atou(t, &u);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
*lower = l;
|
||||
*upper = u;
|
||||
return 0;
|
||||
}
|
||||
|
||||
char *format_bytes(char *buf, size_t l, uint64_t t) {
|
||||
unsigned i;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user