diff options
-rw-r--r-- | src/shared/fileio.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/shared/fileio.c b/src/shared/fileio.c index 4e2b4442db..23bc742e75 100644 --- a/src/shared/fileio.c +++ b/src/shared/fileio.c @@ -650,9 +650,9 @@ int executable_is_script(const char *path, char **interpreter) { } /** - * Retrieve one field from a file like /proc/self/status. - * pattern should start with '\n' and end with ':'. Whitespace - * after ':' will be skipped. field must be freed afterwards. + * Retrieve one field from a file like /proc/self/status. pattern + * should start with '\n' and end with a ':'. Whitespace and zeros + * after the ':' will be skipped. field must be freed afterwards. */ int get_status_field(const char *filename, const char *pattern, char **field) { _cleanup_free_ char *status = NULL; @@ -672,7 +672,12 @@ int get_status_field(const char *filename, const char *pattern, char **field) { return -ENOENT; t += strlen(pattern); - t += strspn(t, WHITESPACE); + /* Also skip zeros, because when this is used for capabilities, + * we don't want the zeros. This way the same cabality set + * always maps to the same string, irrespective of the total + * capability set size. For other numbers it shouldn't matter. + */ + t += strspn(t, WHITESPACE "0"); len = strcspn(t, WHITESPACE); |