#include "util.h"
#include "strv.h"
#include "utf8.h"
+#include "ctype.h"
int write_string_to_file(FILE *f, const char *line) {
errno = 0;
}
/**
- * 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;
int r;
assert(filename);
+ assert(pattern);
assert(field);
r = read_full_file(filename, &status, NULL);
return -ENOENT;
t += strlen(pattern);
- t += strspn(t, WHITESPACE);
+ 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);