X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Fsrc%2Fvbuild.cc;h=706ce3ef8305899c118b24f1e4006fafe8424a6e;hb=a917f24ef7b003dcef54a3db2644cf9cb4bc2db2;hp=1ad79a9b442708f637b77196b2a9681d0e5e1a15;hpb=da691fd4bad5e187b307b7fd86bf5fd61e47c3fc;p=util-vserver.git diff --git a/util-vserver/src/vbuild.cc b/util-vserver/src/vbuild.cc index 1ad79a9..706ce3e 100644 --- a/util-vserver/src/vbuild.cc +++ b/util-vserver/src/vbuild.cc @@ -22,6 +22,10 @@ It uses hard link whenever possible instead of duplicating files. Once done, it sets the immutable bits. */ +#ifdef HAVE_CONFIG_H +# include +#endif + #include #include #include @@ -34,6 +38,8 @@ #include #include #include +#include + #include "vutil.h" using namespace std; @@ -211,6 +217,12 @@ static int vbuild_copy ( return ret; } +static void +prepareVserver(Vserver const UNUSED &src, char const UNUSED *dst) +{ + assert(false); +} + int main (int argc, char *argv[]) { int ret = -1; @@ -241,31 +253,32 @@ int main (int argc, char *argv[]) if (i!=argc-2){ usage(); }else{ - string refserv = argv[i++]; - string newserv = argv[i]; - list packages; + Vserver refserv(argv[i++]); + + prepareVserver(refserv, argv[i]); + Vserver newserv(argv[i]); + list packages; // Load the files which are not configuration files from // the packages vutil_loadallpkg (refserv,packages); set files; - for (list::iterator it=packages.begin(); it!=packages.end(); it++){ + for (list::iterator it=packages.begin(); it!=packages.end(); it++){ (*it).loadfiles(refserv,files); } // Now, we do a recursive copy of refserv into newserv umask (0); - mkdir (newserv.c_str(),0755); // Check if it is on the same volume struct stat refst,newst; - if (vutil_lstat(refserv,refst)!=-1 - && vutil_lstat(newserv,newst)!=1){ + if (vutil_lstat(refserv.getVdir().c_str(),refst)!=-1 + && vutil_lstat(newserv.getVdir().c_str(),newst)!=1){ if (refst.st_dev != newst.st_dev){ - fprintf (stderr,"Can't vbuild %s because it is not on the same volume as %s\n" - ,newserv.c_str(),refserv.c_str()); + fprintf (stderr,"Can't vbuild %s because it is not on the same volume as %s\n", + newserv.getVdir().c_str(),refserv.getVdir().c_str()); }else{ stats.nbdir = stats.nblink = stats.nbcopy = stats.nbsymlink = 0; stats.nbspc = 0; stats.size_copy = 0; - ret = vbuild_copy (refserv,newserv,refst.st_dev,"",files); + ret = vbuild_copy (refserv.getVdir(),newserv.getVdir(),refst.st_dev,"",files); if (statistics){ printf ("Directory created: %d\n",stats.nbdir); printf ("Files copied : %d\n",stats.nbcopy);