summaryrefslogtreecommitdiff
path: root/main/update.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/update.c')
-rw-r--r--main/update.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/main/update.c b/main/update.c
new file mode 100644
index 000000000..31939373c
--- /dev/null
+++ b/main/update.c
@@ -0,0 +1,75 @@
+/*
+ * dpkg - main program for package management
+ * update.c - options which update the `available' database
+ *
+ * Copyright (C) 1995 Ian Jackson <iwj10@cus.cam.ac.uk>
+ *
+ * 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,
+ * 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 dpkg; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <fnmatch.h>
+#include <assert.h>
+#include <unistd.h>
+
+#include "config.h"
+#include "dpkg.h"
+#include "dpkg-db.h"
+#include "myopt.h"
+
+#include "main.h"
+
+void availablefrompackages(const char *const *argv, int replace) {
+ const char *sourcefile= argv[0];
+ int count;
+ static struct varbuf vb;
+
+ if (!sourcefile || argv[1])
+ badusage("--%s needs exactly one Packages file argument", cipaction->olong);
+
+ if (!f_noact) {
+ if (access(admindir,W_OK)) {
+ if (errno != EACCES)
+ ohshite("unable to access dpkg status area for bulk available update");
+ else
+ ohshit("bulk available update requires write access to dpkg status area");
+ }
+ lockdatabase(admindir);
+ }
+
+ if (replace) {
+ printf("Replacing available packages info, using %s.\n",sourcefile);
+ } else {
+ printf("Updating available packages info, using %s.\n",sourcefile);
+ }
+
+ varbufaddstr(&vb,admindir);
+ varbufaddstr(&vb,"/" AVAILFILE);
+ varbufaddc(&vb,0);
+
+ if (!replace)
+ parsedb(vb.buf, pdb_recordavailable|pdb_rejectstatus, 0,0,0);
+
+ count= parsedb(sourcefile, pdb_recordavailable|pdb_rejectstatus, 0,0,0);
+
+ if (!f_noact) {
+ writedb(vb.buf,1,0);
+ unlockdatabase(admindir);
+ }
+
+ printf("Information about %d package(s) was updated.\n",count);
+}