better handling of initial rules loading from file - surf-adblock - Surf adblock web extension
 (HTM) git clone git://git.codemadness.org/surf-adblock
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 141791dac93c6f5c7bc5a7525806897b3c3a4255
 (DIR) parent 9014575ee36dc784da9f519c41d44932d248b772
 (HTM) Author: Quentin Rameau <quinq@fifth.space>
       Date:   Sun, 17 Jul 2016 18:38:17 +0200
       
       better handling of initial rules loading from file
       
       Quit on error, but also when no rules were present in the file.
       
       Diffstat:
         M surf-adblock.c                      |      25 ++++++++++++++++---------
       
       1 file changed, 16 insertions(+), 9 deletions(-)
       ---
 (DIR) diff --git a/surf-adblock.c b/surf-adblock.c
       @@ -684,10 +684,10 @@ debugrule(struct filterrule *r)
                       r->isexception, r->block);
        }
        
       -struct filterrule *
       +static int
        loadrules(FILE *fp)
        {
       -        struct filterrule f, *r, *rn = NULL, *rules = NULL;
       +        struct filterrule f, *r, *rn = NULL;
                char *line = NULL;
                size_t linesiz = 0;
                ssize_t n;
       @@ -703,17 +703,17 @@ loadrules(FILE *fp)
        
                        if ((ret = parserule(&f, line) > 0)) {
                                if (!(r = wecalloc(1, sizeof(struct filterrule))))
       -                                return NULL;
       +                                return -1;
                                if (!rules)
                                        rules = rn = r;
                                else
                                        rn = rn->next = r;
                                memcpy(rn, &f, sizeof(struct filterrule));
                        } else if (ret < 0) {
       -                        return NULL;
       +                        return -1;
                        }
                }
       -        return rules;
       +        return (rules != NULL);
        }
        
        Page *
       @@ -870,12 +870,19 @@ webkit_web_extension_initialize(WebKitWebExtension *ext)
                                 filepath, strerror(errno));
                        return;
                }
       -        if (!(rules = loadrules(fp))) {
       -                weprintf("fatal: cannot read rules file %s: %s\n",
       -                         filepath, strerror(errno));
       +
       +        n = loadrules(fp);
       +        fclose(fp);
       +        if (n < 1) {
       +                if (n < 0) {
       +                        weprintf("fatal: cannot read rules from file %s: %s\n",
       +                                 filepath, strerror(errno));
       +                } else  {
       +                        weprintf("fatal: cannot read any rule from file %s\n",
       +                                 filepath);
       +                }
                        return;
                }
       -        fclose(fp);
        
                /* general CSS rules: all sites */
                for (r = rules; r; r = r->next) {