X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Ffileio.c;h=603a1c7b38755ad35fec95f48915367341776361;hb=1e5413f74faa378172d556e5dec35ab55de16bbf;hp=23bc742e75ad71c0674d3345cf580aa0fb693331;hpb=0a7b53bdd2bb36c9543830c087954f184cd06535;p=elogind.git diff --git a/src/shared/fileio.c b/src/shared/fileio.c index 23bc742e7..603a1c7b3 100644 --- a/src/shared/fileio.c +++ b/src/shared/fileio.c @@ -24,6 +24,7 @@ #include "util.h" #include "strv.h" #include "utf8.h" +#include "ctype.h" int write_string_to_file(FILE *f, const char *line) { errno = 0; @@ -672,12 +673,20 @@ int get_status_field(const char *filename, const char *pattern, char **field) { return -ENOENT; t += strlen(pattern); - /* 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"); + if (*t) { + t += strspn(t, " \t"); + + /* Also skip zeros, because when this is used for + * capabilities, we don't want the zeros. This way the + * same capability set always maps to the same string, + * irrespective of the total capability set size. For + * other numbers it shouldn't matter. */ + t += strspn(t, "0"); + /* Back off one char if there's nothing but whitespace + and zeros */ + if (!*t || isspace(*t)) + t --; + } len = strcspn(t, WHITESPACE);