if (dpkgAssertMultiArch == 0)
{
std::string const chrootDir = _config->FindDir("DPkg::Chroot-Directory");
- if (chrootDir != "/" && chroot(chrootDir.c_str()) != 0)
- _error->WarningE("getArchitecture", "Couldn't chroot into %s for dpkg --assert-multi-arch", chrootDir.c_str());
// redirect everything to the ultimate sink as we only need the exit-status
int const nullfd = open("/dev/null", O_RDONLY);
dup2(nullfd, STDIN_FILENO);
dup2(nullfd, STDOUT_FILENO);
dup2(nullfd, STDERR_FILENO);
+ if (chrootDir != "/" && chroot(chrootDir.c_str()) != 0)
+ _error->WarningE("getArchitecture", "Couldn't chroot into %s for dpkg --assert-multi-arch", chrootDir.c_str());
execvp(Args[0], (char**) &Args[0]);
_error->WarningE("dpkgGo", "Can't detect if dpkg supports multi-arch!");
_exit(2);
bool const MarkHold = strcasecmp(CmdL.FileList[0],"hold") == 0;
- for (APT::PackageList::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
+ for (APT::PackageList::iterator Pkg = pkgset.begin(); Pkg != pkgset.end();)
{
if ((Pkg->SelectedState == pkgCache::State::Hold) == MarkHold)
{
ioprintf(c1out,_("%s was already set on hold.\n"), Pkg.FullName(true).c_str());
else
ioprintf(c1out,_("%s was already not hold.\n"), Pkg.FullName(true).c_str());
- pkgset.erase(Pkg);
- continue;
+ Pkg = pkgset.erase(Pkg, true);
}
+ else
+ ++Pkg;
}
bool dpkgMultiArch = false;
if (chrootDir != "/" && chroot(chrootDir.c_str()) != 0)
_error->WarningE("getArchitecture", "Couldn't chroot into %s for dpkg --set-selections", chrootDir.c_str());
int const nullfd = open("/dev/null", O_RDONLY);
- dup2(nullfd, STDIN_FILENO);
- dup2(external[0], STDOUT_FILENO);
+ dup2(external[0], STDIN_FILENO);
+ dup2(nullfd, STDOUT_FILENO);
dup2(nullfd, STDERR_FILENO);
execvp(Args[0], (char**) &Args[0]);
_error->WarningE("dpkgGo", "Can't detect if dpkg supports multi-arch!");
FILE* dpkg = fdopen(external[1], "w");
for (APT::PackageList::iterator Pkg = pkgset.begin(); Pkg != pkgset.end(); ++Pkg)
{
+ if (dpkgMultiArch == false)
+ fprintf(dpkg, "%s", Pkg.FullName(true).c_str());
+ else
+ {
+ if (Pkg->CurrentVer != 0)
+ fprintf(dpkg, "%s:%s", Pkg.Name(), Pkg.CurrentVer().Arch());
+ else if (Pkg.VersionList().end() == false)
+ fprintf(dpkg, "%s:%s", Pkg.Name(), Pkg.VersionList().Arch());
+ else
+ fprintf(dpkg, "%s", Pkg.FullName(false).c_str());
+ }
+
if (MarkHold == true)
{
- fprintf(dpkg, "%s hold\n", Pkg.FullName(!dpkgMultiArch).c_str());
+ fprintf(dpkg, " hold\n");
ioprintf(c1out,_("%s set on hold.\n"), Pkg.FullName(true).c_str());
}
else
{
- fprintf(dpkg, "%s install\n", Pkg.FullName(!dpkgMultiArch).c_str());
+ fprintf(dpkg, " install\n");
ioprintf(c1out,_("Canceled hold on %s.\n"), Pkg.FullName(true).c_str());
}
}
/* */
bool ShowHelp(CommandLine &CmdL)
{
- ioprintf(cout,_("%s %s for %s compiled on %s %s\n"),PACKAGE,VERSION,
+ ioprintf(cout,_("%s %s for %s compiled on %s %s\n"),PACKAGE,PACKAGE_VERSION,
COMMON_ARCH,__DATE__,__TIME__);
cout <<
_("Usage: apt-mark [options] {auto|manual} pkg1 [pkg2 ...]\n"
"\n"
"apt-mark is a simple command line interface for marking packages\n"
- "as manual or automatical installed. It can also list marks.\n"
+ "as manually or automatically installed. It can also list marks.\n"
"\n"
"Commands:\n"
" auto - Mark the given packages as automatically installed\n"