From 9a08cbfcc1ef900a04580f35afe2a4592d7d6030 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 6 May 2024 02:45:20 +0200 Subject: Adding upstream version 1.19.8. Signed-off-by: Daniel Baumann --- src/update.c | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 src/update.c (limited to 'src/update.c') diff --git a/src/update.c b/src/update.c new file mode 100644 index 0000000..313f09d --- /dev/null +++ b/src/update.c @@ -0,0 +1,124 @@ +/* + * dpkg - main program for package management + * update.c - options which update the ‘available’ database + * + * Copyright © 1995 Ian Jackson + * + * This 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 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, see . + */ + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "main.h" + +int +updateavailable(const char *const *argv) +{ + const char *sourcefile= argv[0]; + char *availfile; + int count= 0; + + modstatdb_init(); + + switch (cipaction->arg_int) { + case act_avclear: + if (sourcefile) badusage(_("--%s takes no arguments"),cipaction->olong); + break; + case act_avreplace: case act_avmerge: + if (sourcefile == NULL) + sourcefile = "-"; + else if (sourcefile && argv[1]) + badusage(_("--%s takes at most one Packages-file argument"), + cipaction->olong); + break; + default: + internerr("unknown action '%d'", cipaction->arg_int); + } + + if (!f_noact) { + const char *dbdir = dpkg_db_get_dir(); + + if (access(dbdir, W_OK)) { + if (errno != EACCES) + ohshite(_("unable to access dpkg database directory '%s' for bulk available update"), + dbdir); + else + ohshit(_("required write access to dpkg database directory '%s' for bulk available update"), + dbdir); + } + modstatdb_lock(); + } + + switch (cipaction->arg_int) { + case act_avreplace: + printf(_("Replacing available packages info, using %s.\n"),sourcefile); + break; + case act_avmerge: + printf(_("Updating available packages info, using %s.\n"),sourcefile); + break; + case act_avclear: + break; + default: + internerr("unknown action '%d'", cipaction->arg_int); + } + + availfile = dpkg_db_get_path(AVAILFILE); + + if (cipaction->arg_int == act_avmerge) + parsedb(availfile, pdb_parse_available, NULL); + + if (cipaction->arg_int != act_avclear) + count += parsedb(sourcefile, + pdb_parse_available | pdb_ignoreolder | pdb_dash_is_stdin, + NULL); + + if (!f_noact) { + writedb(availfile, wdb_dump_available); + modstatdb_unlock(); + } + + free(availfile); + + if (cipaction->arg_int != act_avclear) + printf(P_("Information about %d package was updated.\n", + "Information about %d packages was updated.\n", count), count); + + modstatdb_done(); + + return 0; +} + +int +forgetold(const char *const *argv) +{ + if (*argv) + badusage(_("--%s takes no arguments"), cipaction->olong); + + warning(_("obsolete '--%s' option; unavailable packages are automatically cleaned up"), + cipaction->olong); + + return 0; +} -- cgit v1.2.3