From 3876299fa067d0b9bafcd18ba5d66293a951c49d Mon Sep 17 00:00:00 2001 From: John Johansen Date: Fri, 9 Mar 2012 04:24:20 -0800 Subject: [PATCH] Fix caching when used with a newer kernel with the feature directory On newer kernels the features directory causes the creation of a cache/.feature file that contains newline characters. This causes the feature comparison to fail, because get_flags_string() uses fgets which stop reading in the feature file after the first newline. This caches the features comparision to compare a single line of the file against the full kernel feature directory resulting in caching failure. Worse this also means the cache won't get updated as the parser doesn't change what set gets caches after the .feature file gets created. Signed-off-by: John Johansen Acked-By: Steve Beattie --- parser/parser_main.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/parser/parser_main.c b/parser/parser_main.c index ddbdf99b0..3b5ab918e 100644 --- a/parser/parser_main.c +++ b/parser/parser_main.c @@ -844,6 +844,7 @@ out: static void get_flags_string(char **flags, char *flags_file) { char *pos; FILE *f = NULL; + size_t size; /* abort if missing or already set */ if (!flags || *flags) @@ -857,8 +858,10 @@ static void get_flags_string(char **flags, char *flags_file) { if (!*flags) goto fail; - if (!fgets(*flags, FLAGS_STRING_SIZE, f)) + size = fread(*flags, 1, FLAGS_STRING_SIZE - 1, f); + if (!size || ferror(f)) goto fail; + (*flags)[size] = 0; fclose(f); pos = strstr(*flags, "change_hat=");