]> err.no Git - varnish/commitdiff
Clone the stevedore before calling its init function and be more precise
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 13 Jun 2006 13:10:09 +0000 (13:10 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 13 Jun 2006 13:10:09 +0000 (13:10 +0000)
about any optional arguments.

git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@174 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/varnishd.c

index de317eb80ad0ccae9fb5125a50237a279b53207f..a38766d7a4d109f975b182beeafa7386ae00d27c 100644 (file)
@@ -309,22 +309,27 @@ cmp_storage(struct stevedore *s, const char *p, const char *q)
 static void
 setup_storage(const char *sflag)
 {
-       const char *p;
+       const char *p, *q;
+       struct stevedore *stp;
 
-       p = strchr(sflag, ',');
+       q = p = strchr(sflag, ',');
        if (p == NULL)
-               p = strchr(sflag, '\0');
+               q = p = strchr(sflag, '\0');
+       else
+               q++;
        if (!cmp_storage(&sma_stevedore, sflag, p)) {
-               heritage.stevedore = &sma_stevedore;
+               stp = &sma_stevedore;
        } else if (!cmp_storage(&smf_stevedore, sflag, p)) {
-               heritage.stevedore = &smf_stevedore;
+               stp = &smf_stevedore;
        } else {
                fprintf(stderr, "Unknown storage method \"%*.*s\"\n",
                        p - sflag, p - sflag, sflag);
                exit (2);
        }
-       if (heritage.stevedore->init != NULL)
-               heritage.stevedore->init(heritage.stevedore, p);
+       heritage.stevedore = malloc(sizeof *heritage.stevedore);
+       *heritage.stevedore = *stp;
+       if (stp->init != NULL)
+               stp->init(heritage.stevedore, q);
 }
 
 /*--------------------------------------------------------------------*/