X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Ftar.cpp;h=bfb4f5f9761f245dfa83cd8279a0b7a01c05bab0;hb=699493ee7346c578537f4e310702c57012686c22;hp=797bf240425e4fe78451376a55c6e7ecaca38b79;hpb=242c55b17e6608b29a77ca17a5b677e202a3ca90;p=builder.git diff --git a/source/tar.cpp b/source/tar.cpp index 797bf24..bfb4f5f 100644 --- a/source/tar.cpp +++ b/source/tar.cpp @@ -5,11 +5,11 @@ Copyright © 2007-2009 Mikko Rasa, Mikkosoft Productions Distributed under the LGPL */ -#include #include #include #include #include +#include #include "builder.h" #include "sourcepackage.h" #include "tar.h" @@ -22,13 +22,13 @@ Tar::Tar(Builder &b, const TarBall &t): InternalAction(b), tarball(t) { - string basename=tarball.get_name().substr(tarball.get_name().rfind('/')+1); + string basename = FS::basename(tarball.get_path()); announce(tarball.get_package()->get_name(), "TAR ", basename); if(builder.get_verbose()>=2) - cout<<"Create "<get_source(); - FS::Path basedir=FS::basepart(FS::basename(tar.tarball.get_name())); + const FS::Path &pkg_src = tar.tarball.get_package()->get_source(); + FS::Path basedir = FS::basepart(FS::basename(tar.tarball.get_path())); - IO::File out(tar.tarball.get_name(), IO::M_WRITE); - const TargetList &deps=tar.tarball.get_depends(); + IO::File out(tar.tarball.get_path().str(), IO::M_WRITE); + const TargetList &deps = tar.tarball.get_depends(); for(TargetList::const_iterator i=deps.begin(); i!=deps.end(); ++i) { + FileTarget *ft = dynamic_cast(*i); + if(!ft) + continue; + char buf[4096]; memset(buf, 0, 512); - string rel_path=(basedir/relative((*i)->get_name(), pkg_src)).str(); + string rel_path = (basedir/relative(ft->get_path(), pkg_src)).str(); if(rel_path.size()>99) { - cout<<"Can't store "<get_name()); + struct stat st = FS::stat(ft->get_path()); store_number(buf+100, st.st_mode, 7); store_number(buf+108, st.st_uid, 7); store_number(buf+116, st.st_gid, 7); store_number(buf+124, st.st_size, 11); store_number(buf+136, st.st_mtime, 11); - buf[156]='0'; + buf[156] = '0'; memset(buf+148, ' ', 8); - unsigned chk=0; + unsigned chk = 0; for(unsigned j=0; j<512; ++j) - chk+=static_cast(buf[j]); + chk += static_cast(buf[j]); store_number(buf+148, chk, 7); - buf[155]=0; + buf[155] = 0; out.write(buf, 512); - IO::File in((*i)->get_name()); + IO::File in(ft->get_path().str()); for(int j=0; j