diff options
author | Simone Rota <sip@crux.nu> | 2005-11-11 23:40:48 +0100 |
---|---|---|
committer | Simone Rota <sip@crux.nu> | 2005-11-11 23:40:48 +0100 |
commit | 9ac667e68d3e36eb99272eac57219002ee2318e6 (patch) | |
tree | 042e98d4801e1c37decd4647659783665d53946e /pkgrm.cc | |
download | pkgutils-9ac667e68d3e36eb99272eac57219002ee2318e6.tar.gz pkgutils-9ac667e68d3e36eb99272eac57219002ee2318e6.tar.xz |
Initial import
Diffstat (limited to 'pkgrm.cc')
-rw-r--r-- | pkgrm.cc | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/pkgrm.cc b/pkgrm.cc new file mode 100644 index 00000000..a779f718 --- /dev/null +++ b/pkgrm.cc @@ -0,0 +1,78 @@ +// +// pkgutils +// +// Copyright (c) 2000-2005 Per Liden +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +// USA. +// + +#include "pkgrm.h" +#include <unistd.h> + +void pkgrm::run(int argc, char** argv) +{ + // + // Check command line options + // + string o_package; + string o_root; + + for (int i = 1; i < argc; i++) { + string option(argv[i]); + if (option == "-r" || option == "--root") { + assert_argument(argv, argc, i); + o_root = argv[i + 1]; + i++; + } else if (option[0] == '-' || !o_package.empty()) { + throw runtime_error("invalid option " + option); + } else { + o_package = option; + } + } + + if (o_package.empty()) + throw runtime_error("option missing"); + + // + // Check UID + // + if (getuid()) + throw runtime_error("only root can remove packages"); + + // + // Remove package + // + { + db_lock lock(o_root, true); + db_open(o_root); + + if (!db_find_pkg(o_package)) + throw runtime_error("package " + o_package + " not installed"); + + db_rm_pkg(o_package); + ldconfig(); + db_commit(); + } +} + +void pkgrm::print_help() const +{ + cout << "usage: " << utilname << " [options] <package>" << endl + << "options:" << endl + << " -r, --root <path> specify alternative installation root" << endl + << " -v, --version print version and exit" << endl + << " -h, --help print help and exit" << endl; +} |