summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2018-05-07 20:26:38 +0200
committerLennart Poettering <lennart@poettering.net>2018-05-17 20:47:21 +0200
commite9eb2c02f0f08dd1d1de57918b277193aa529832 (patch)
treefcba55a13340c7316e6d7d91d52bdbe8bfee08de /src
parent66edd96310515e8236f5b3da62f0a1f5143bcd83 (diff)
downloadsystemd-e9eb2c02f0f08dd1d1de57918b277193aa529832.tar.gz
basic: split parsing of the OOM score adjust value into its own function in parse-util.c
And port config_parse_exec_oom_score_adjust() over to use it. While we are at it, let's also fix config_parse_exec_oom_score_adjust() to accept an empty string for turning off OOM score adjustments set earlier.
Diffstat (limited to 'src')
-rw-r--r--src/basic/parse-util.c17
-rw-r--r--src/basic/parse-util.h2
-rw-r--r--src/core/load-fragment.c35
3 files changed, 39 insertions, 15 deletions
diff --git a/src/basic/parse-util.c b/src/basic/parse-util.c
index fbb32f3dc5..07f43b94e5 100644
--- a/src/basic/parse-util.c
+++ b/src/basic/parse-util.c
@@ -676,3 +676,20 @@ int parse_dev(const char *s, dev_t *ret) {
*ret = d;
return 0;
}
+
+int parse_oom_score_adjust(const char *s, int *ret) {
+ int r, v;
+
+ assert(s);
+ assert(ret);
+
+ r = safe_atoi(s, &v);
+ if (r < 0)
+ return r;
+
+ if (v < OOM_SCORE_ADJ_MIN || v > OOM_SCORE_ADJ_MAX)
+ return -ERANGE;
+
+ *ret = v;
+ return 0;
+}
diff --git a/src/basic/parse-util.h b/src/basic/parse-util.h
index 742063c9a4..2b75b938c7 100644
--- a/src/basic/parse-util.h
+++ b/src/basic/parse-util.h
@@ -118,3 +118,5 @@ int parse_percent(const char *p);
int parse_nice(const char *p, int *ret);
int parse_ip_port(const char *s, uint16_t *ret);
+
+int parse_oom_score_adjust(const char *s, int *ret);
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
index 85e2b1f53f..6c69f4a55f 100644
--- a/src/core/load-fragment.c
+++ b/src/core/load-fragment.c
@@ -506,16 +506,17 @@ int config_parse_exec_nice(
return 0;
}
-int config_parse_exec_oom_score_adjust(const char* unit,
- const char *filename,
- unsigned line,
- const char *section,
- unsigned section_line,
- const char *lvalue,
- int ltype,
- const char *rvalue,
- void *data,
- void *userdata) {
+int config_parse_exec_oom_score_adjust(
+ const char* unit,
+ const char *filename,
+ unsigned line,
+ const char *section,
+ unsigned section_line,
+ const char *lvalue,
+ int ltype,
+ const char *rvalue,
+ void *data,
+ void *userdata) {
ExecContext *c = data;
int oa, r;
@@ -525,14 +526,18 @@ int config_parse_exec_oom_score_adjust(const char* unit,
assert(rvalue);
assert(data);
- r = safe_atoi(rvalue, &oa);
- if (r < 0) {
- log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse the OOM score adjust value, ignoring: %s", rvalue);
+ if (isempty(rvalue)) {
+ c->oom_score_adjust_set = false;
return 0;
}
- if (oa < OOM_SCORE_ADJ_MIN || oa > OOM_SCORE_ADJ_MAX) {
- log_syntax(unit, LOG_ERR, filename, line, 0, "OOM score adjust value out of range, ignoring: %s", rvalue);
+ r = parse_oom_score_adjust(rvalue, &oa);
+ if (r == -ERANGE) {
+ log_syntax(unit, LOG_ERR, filename, line, r, "OOM score adjust value out of range, ignoring: %s", rvalue);
+ return 0;
+ }
+ if (r < 0) {
+ log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse the OOM score adjust value, ignoring: %s", rvalue);
return 0;
}