added Vector_zeroEnd() function
[util-vserver.git] / util-vserver / lib_internal / matchlist-initbyvserver.c
1 // $Id$    --*- c -*--
2
3 // Copyright (C) 2004 Enrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
4 //  
5 // This program is free software; you can redistribute it and/or modify
6 // it under the terms of the GNU General Public License as published by
7 // the Free Software Foundation; version 2 of the License.
8 //  
9 // This program is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //  
14 // You should have received a copy of the GNU General Public License
15 // along with this program; if not, write to the Free Software
16 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17
18
19 #ifdef HAVE_CONFIG_H
20 #  include <config.h>
21 #endif
22 #include "pathconfig.h"
23
24 #include "matchlist.h"
25 #include "util-io.h"
26
27 #include "vserver.h"
28
29
30
31 bool
32 MatchList_initByVserver(struct MatchList *list, char const *vserver,
33                         char const **res_appdir)
34 {
35   vcCfgStyle    style;
36   char const    *vdir;
37   char const    *appdir;
38
39   style  = vc_getVserverCfgStyle(vserver);
40   vdir   = vc_getVserverVdir(  vserver, style, true);
41   appdir = vc_getVserverAppDir(vserver, style, "vunify");
42
43   if (vdir==0 || appdir==0) {
44     free((char *)appdir);
45     free((char *)vdir);
46     return false;
47   }
48
49   {
50     size_t              l1 = strlen(appdir);
51     char                tmp[l1 + sizeof("/exclude")];
52     char const *        excl_list;
53
54     memcpy(tmp,    appdir, l1);
55     memcpy(tmp+l1, "/exclude", 9);
56
57     excl_list = tmp;
58     if (access(excl_list, R_OK)==-1) excl_list = CONFDIR   "/.defaults/apps/vunify/exclude";
59     if (access(excl_list, R_OK)==-1) excl_list = PKGLIBDIR "/defaults/vunify-exclude";
60
61       // 'vdir' is transferred to matchlist and must not be free'ed here
62     MatchList_initManually(list, vserver, vdir, excl_list);
63   }
64
65   if (res_appdir!=0)
66     *res_appdir = appdir;
67   else
68     free((char *)appdir);
69   
70   return true;
71 }
72