#include "vserver.h"
-
+#include <assert.h>
bool
-MatchList_initByVserver(struct MatchList *list, char const *vserver,
- char const **res_appdir)
+MatchList_initByVserver(struct MatchList *list,
+ struct MatchVserverInfo const *vserver)
{
- vcCfgStyle style;
- char const *vdir;
- char const *appdir;
-
- style = vc_getVserverCfgStyle(vserver);
- vdir = vc_getVserverVdir( vserver, style, true);
- appdir = vc_getVserverAppDir(vserver, style, "vunify");
-
- if (vdir==0 || appdir==0) {
- free((char *)appdir);
- free((char *)vdir);
- return false;
- }
-
- {
- size_t l1 = strlen(appdir);
- char tmp[l1 + sizeof("/exclude")];
- char const * excl_list;
-
- memcpy(tmp, appdir, l1);
- memcpy(tmp+l1, "/exclude", 9);
+ assert(vserver->appdir!=0 && vserver->vdir!=0);
+
+ size_t const l = vserver->appdir.l;
+ char tmp[l + sizeof("/exclude")];
+ char const * excl_list;
- excl_list = tmp;
- if (access(excl_list, R_OK)==-1) excl_list = CONFDIR "/.defaults/apps/vunify/exclude";
- if (access(excl_list, R_OK)==-1) excl_list = PKGLIBDIR "/defaults/vunify-exclude";
+ memcpy(tmp, vserver->appdir.d, l);
+ memcpy(tmp+l, "/exclude", 9);
- // 'vdir' is transferred to matchlist and must not be free'ed here
- MatchList_initManually(list, vserver, vdir, excl_list);
- }
+ excl_list = tmp;
+ if (access(excl_list, R_OK)==-1) excl_list = CONFDIR "/.defaults/apps/vunify/exclude";
+ if (access(excl_list, R_OK)==-1) excl_list = PKGLIBDIR "/defaults/vunify-exclude";
- if (res_appdir!=0)
- *res_appdir = appdir;
- else
- free((char *)appdir);
+ MatchList_initManually(list, vserver, 0, excl_list);
return true;
}