tFix handling of uri-specific parameters - surf - customized build of surf, the suckless webkit browser
 (HTM) git clone git://src.adamsgaard.dk/surf
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 2223417c91569f8314205d8f34c3cdf4d96d6e1a
 (DIR) parent a1328457cff30dc678a1b8e80dc44ddb73ce293c
 (HTM) Author: Quentin Rameau <quinq@fifth.space>
       Date:   Thu, 18 May 2017 12:33:28 +0200
       
       Fix handling of uri-specific parameters
       
       We need to (re)apply uri-specific parameters for each new uri even if
       tthe parameter has already been set to get the correct value.
       
       Thanks to Julien STEINHAUSER <julien.steinhauser@orange.fr> for the
       report!
       
       Diffstat:
         M surf.c                              |      28 +++++++++++++++++++---------
       
       1 file changed, 19 insertions(+), 9 deletions(-)
       ---
 (DIR) diff --git a/surf.c b/surf.c
       t@@ -643,7 +643,7 @@ cookiepolicy_set(const WebKitCookieAcceptPolicy p)
        void
        seturiparameters(Client *c, const char *uri)
        {
       -        Parameter *newconfig = NULL;
       +        Parameter *config, *newconfig = NULL;
                int i;
        
                for (i = 0; i < LENGTH(uriparams); ++i) {
       t@@ -656,16 +656,26 @@ seturiparameters(Client *c, const char *uri)
        
                if (!newconfig)
                        newconfig = defconfig;
       -        if (newconfig == curconfig)
       -                return;
        
                for (i = 0; i < ParameterLast; ++i) {
       -                if (defconfig[i].force)
       -                        continue;
       -                if (newconfig[i].force)
       -                        setparameter(c, 0, i, &newconfig[i].val);
       -                else if (curconfig[i].force)
       -                        setparameter(c, 0, i, &defconfig[i].val);
       +                switch(i) {
       +                case Certificate:
       +                case CookiePolicies:
       +                case Style:
       +                        config = defconfig[i].force ? defconfig :
       +                                 newconfig[i].force ? newconfig :
       +                                 defconfig;
       +                        break;
       +                default:
       +                        if (newconfig == curconfig || defconfig[i].force)
       +                                continue;
       +                        config = newconfig[i].force ? newconfig :
       +                                 curconfig[i].force ? defconfig :
       +                                 NULL;
       +                }
       +
       +                if (config)
       +                        setparameter(c, 0, i, &config[i].val);
                }
        
                curconfig = newconfig;