summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--debian/changelog1
-rw-r--r--src/archives.c28
-rw-r--r--src/configure.c16
-rw-r--r--src/errors.c2
-rw-r--r--src/force.c135
-rw-r--r--src/force.h66
-rw-r--r--src/help.c8
-rw-r--r--src/main.c12
-rw-r--r--src/packages.c17
-rw-r--r--src/remove.c4
-rw-r--r--src/script.c8
-rw-r--r--src/unpack.c6
12 files changed, 166 insertions, 137 deletions
diff --git a/debian/changelog b/debian/changelog
index 28b884502..dc2f550ee 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -17,6 +17,7 @@ dpkg (1.19.5) UNRELEASED; urgency=medium
- dpkg: Simplify maintscript_set_exec_context().
- dpkg: Move force options support into its own file.
- dpkg: Do not hardcode the program name in the --force-help output.
+ - dpkg: Switch force options from individual variables to bit fields.
* Build system:
- Check whether this dist is a release, based only on the version format.
This will avoid having to do a two staged release to get a proper perl
diff --git a/src/archives.c b/src/archives.c
index ab93551b8..f74bceed8 100644
--- a/src/archives.c
+++ b/src/archives.c
@@ -399,7 +399,7 @@ tarobject_extract(struct tarcontext *tc, struct tar_entry *te,
ohshite(_("error setting permissions of '%.255s'"), te->name);
/* Postpone the fsync, to try to avoid massive I/O degradation. */
- if (!fc_unsafe_io)
+ if (!in_force(FORCE_UNSAFE_IO))
namenode->flags |= FNNF_DEFERRED_FSYNC;
pop_cleanup(ehflag_normaltidy); /* fd = open(path) */
@@ -591,7 +591,7 @@ tarobject_matches(struct tarcontext *tc,
internerr("unknown tar type '%d', but already checked", te->type);
}
- forcibleerr(fc_overwrite,
+ forcibleerr(FORCE_OVERWRITE,
_("trying to overwrite shared '%.250s', which is different "
"from other instances of package %.250s"),
namenode->name, pkg_name(tc->pkg, pnaw_nonambig));
@@ -712,13 +712,13 @@ tarobject(struct tar_archive *tar, struct tar_entry *ti)
divpkgset = nifd->namenode->divert->pkgset;
if (divpkgset) {
- forcibleerr(fc_overwritediverted,
+ forcibleerr(FORCE_OVERWRITE_DIVERTED,
_("trying to overwrite '%.250s', which is the "
"diverted version of '%.250s' (package: %.100s)"),
nifd->namenode->name, nifd->namenode->divert->camefrom->name,
divpkgset->name);
} else {
- forcibleerr(fc_overwritediverted,
+ forcibleerr(FORCE_OVERWRITE_DIVERTED,
_("trying to overwrite '%.250s', which is the "
"diverted version of '%.250s'"),
nifd->namenode->name, nifd->namenode->divert->camefrom->name);
@@ -910,14 +910,14 @@ tarobject(struct tar_archive *tar, struct tar_entry *ti)
} else {
/* At this point we are replacing something without a Replaces. */
if (!statr && S_ISDIR(stab.st_mode)) {
- forcibleerr(fc_overwritedir,
+ forcibleerr(FORCE_OVERWRITE_DIR,
_("trying to overwrite directory '%.250s' "
"in package %.250s %.250s with nondirectory"),
nifd->namenode->name, pkg_name(otherpkg, pnaw_nonambig),
versiondescribe(&otherpkg->installed.version,
vdew_nonambig));
} else {
- forcibleerr(fc_overwrite,
+ forcibleerr(FORCE_OVERWRITE,
_("trying to overwrite '%.250s', "
"which is also in package %.250s %.250s"),
nifd->namenode->name, pkg_name(otherpkg, pnaw_nonambig),
@@ -962,7 +962,7 @@ tarobject(struct tar_archive *tar, struct tar_entry *ti)
}
}
- if (refcounting && !fc_overwrite) {
+ if (refcounting && !in_force(FORCE_OVERWRITE)) {
/* If we are not forced to overwrite the path and are refcounting,
* just compute the hash w/o extracting the object. */
tarobject_hash(tc, ti, nifd->namenode);
@@ -992,7 +992,7 @@ tarobject(struct tar_archive *tar, struct tar_entry *ti)
fnamenewvb.buf, ti, nifd->namenode);
/* If we didn't extract anything, there's nothing else to do. */
- if (refcounting && !fc_overwrite)
+ if (refcounting && !in_force(FORCE_OVERWRITE))
return 0;
tarobject_set_perms(ti, fnamenewvb.buf, &nodestat);
@@ -1235,7 +1235,7 @@ try_deconfigure_can(bool (*force_p)(struct deppossi *), struct pkginfo *pkg,
return 2;
} else if (f_autodeconf) {
if (pkg->installed.essential) {
- if (fc_removeessential) {
+ if (in_force(FORCE_REMOVE_ESSENTIAL)) {
warning(_("considering deconfiguration of essential\n"
" package %s, to enable %s"),
pkg_name(pkg, pnaw_nonambig), action);
@@ -1347,14 +1347,12 @@ void check_conflict(struct dependency *dep, struct pkginfo *pkg,
(((fixbyrm->want != PKG_WANT_INSTALL &&
fixbyrm->want != PKG_WANT_HOLD) ||
does_replace(pkg, &pkg->available, fixbyrm, &fixbyrm->installed)) &&
- (!fixbyrm->installed.essential || fc_removeessential)))) {
-
+ (!fixbyrm->installed.essential || in_force(FORCE_REMOVE_ESSENTIAL))))) {
if (fixbyrm->clientdata->istobe != PKG_ISTOBE_NORMAL &&
fixbyrm->clientdata->istobe != PKG_ISTOBE_DECONFIGURE)
internerr("package %s to be fixed by removal is not to be normal "
"nor deconfigure, is to be %d",
pkg_name(pkg, pnaw_always), fixbyrm->clientdata->istobe);
-
fixbyrm->clientdata->istobe = PKG_ISTOBE_REMOVE;
notice(_("considering removing %s in favour of %s ..."),
pkg_name(fixbyrm, pnaw_nonambig),
@@ -1405,7 +1403,7 @@ void check_conflict(struct dependency *dep, struct pkginfo *pkg,
pdep= &flagdeppossi;
}
if (!pdep && (fixbyrm->eflag & PKG_EFLAG_REINSTREQ)) {
- if (fc_removereinstreq) {
+ if (in_force(FORCE_REMOVE_REINSTREQ)) {
notice(_("package %s requires reinstallation, but will "
"remove anyway as you requested"),
pkg_name(fixbyrm, pnaw_nonambig));
@@ -1466,7 +1464,7 @@ archivefiles(const char *const *argv)
msdbflags = msdbrw_readonly;
else if (cipaction->arg_int == act_avail)
msdbflags = msdbrw_readonly | msdbrw_available_write;
- else if (fc_nonroot)
+ else if (in_force(FORCE_NON_ROOT))
msdbflags = msdbrw_write;
else
msdbflags = msdbrw_needsuperuser;
@@ -1638,7 +1636,7 @@ wanttoinstall(struct pkginfo *pkg)
return true;
}
} else {
- if (fc_downgrade) {
+ if (in_force(FORCE_DOWNGRADE)) {
warning(_("downgrading %.250s from %.250s to %.250s"),
pkg_name(pkg, pnaw_nonambig),
versiondescribe(&pkg->installed.version, vdew_nonambig),
diff --git a/src/configure.c b/src/configure.c
index a6d02791c..12f290451 100644
--- a/src/configure.c
+++ b/src/configure.c
@@ -119,13 +119,13 @@ show_prompt(const char *cfgfile, const char *realold, const char *realnew,
/* No --force-confdef but a forcible situation. */
/* TODO: check if this condition can not be simplified to
- * just !fc_conff_def */
- if (!(fc_conff_def && (what & (CFOF_INSTALL | CFOF_KEEP)))) {
- if (fc_conff_new) {
+ * just !in_force(FORCE_CONFF_DEF) */
+ if (!(in_force(FORCE_CONFF_DEF) && (what & (CFOF_INSTALL | CFOF_KEEP)))) {
+ if (in_force(FORCE_CONFF_NEW)) {
fprintf(stderr,
_(" ==> Using new file as you requested.\n"));
return 'y';
- } else if (fc_conff_old) {
+ } else if (in_force(FORCE_CONFF_OLD)) {
fprintf(stderr,
_(" ==> Using current old file as you requested.\n"));
return 'n';
@@ -133,7 +133,7 @@ show_prompt(const char *cfgfile, const char *realold, const char *realnew,
}
/* Force the default action (if there is one. */
- if (fc_conff_def) {
+ if (in_force(FORCE_CONFF_DEF)) {
if (what & CFOF_KEEP) {
fprintf(stderr,
_(" ==> Keeping old config file as default.\n"));
@@ -430,7 +430,7 @@ deferred_configure_conffile(struct pkginfo *pkg, struct conffile *conff)
useredited = -1;
distedited = -1;
what = CFO_IDENTICAL;
- } else if (strcmp(currenthash, NONEXISTENTFLAG) == 0 && fc_conff_miss) {
+ } else if (strcmp(currenthash, NONEXISTENTFLAG) == 0 && in_force(FORCE_CONFF_MISS)) {
fprintf(stderr,
_("\n"
"Configuration file '%s', does not exist on system.\n"
@@ -454,7 +454,7 @@ deferred_configure_conffile(struct pkginfo *pkg, struct conffile *conff)
useredited = strcmp(conff->hash, currenthash) != 0;
distedited = strcmp(conff->hash, newdisthash) != 0;
- if (fc_conff_ask && useredited)
+ if (in_force(FORCE_CONFF_ASK) && useredited)
what = CFO_PROMPT_KEEP;
else
what = conffoptcells[useredited][distedited];
@@ -624,7 +624,7 @@ deferred_configure(struct pkginfo *pkg)
sincenothing = 0;
if (pkg->eflag & PKG_EFLAG_REINSTREQ)
- forcibleerr(fc_removereinstreq,
+ forcibleerr(FORCE_REMOVE_REINSTREQ,
_("package is in a very bad inconsistent state; you should\n"
" reinstall it before attempting configuration"));
diff --git a/src/errors.c b/src/errors.c
index 2c5d147a5..ca405b172 100644
--- a/src/errors.c
+++ b/src/errors.c
@@ -124,7 +124,7 @@ skip_due_to_hold(struct pkginfo *pkg)
{
if (pkg->want != PKG_WANT_HOLD)
return false;
- if (fc_hold) {
+ if (in_force(FORCE_HOLD)) {
notice(_("package %s was on hold, processing it anyway as you requested"),
pkg_name(pkg, pnaw_nonambig));
return false;
diff --git a/src/force.c b/src/force.c
index f3e4d902d..d8dc7619c 100644
--- a/src/force.c
+++ b/src/force.c
@@ -37,30 +37,8 @@
#include "force.h"
-int fc_architecture = 0;
-int fc_badpath = 0;
-int fc_badverify = 0;
-int fc_badversion = 0;
-int fc_breaks = 0;
-int fc_conff_ask = 0;
-int fc_conff_def = 0;
-int fc_conff_miss = 0;
-int fc_conff_new = 0;
-int fc_conff_old = 0;
-int fc_configureany = 0;
-int fc_conflicts = 0;
-int fc_depends = 0;
-int fc_dependsversion = 0;
-int fc_downgrade = 1;
-int fc_hold = 0;
-int fc_nonroot = 0;
-int fc_overwrite = 0;
-int fc_overwritedir = 0;
-int fc_overwritediverted = 0;
-int fc_removeessential = 0;
-int fc_removereinstreq = 0;
-int fc_script_chrootless = 0;
-int fc_unsafe_io = 0;
+static int force_mask = FORCE_ALL;
+static int force_flags = FORCE_DOWNGRADE;
static const char *
forcetype_str(char type)
@@ -80,88 +58,88 @@ forcetype_str(char type)
static const struct forceinfo {
const char *name;
- int *opt;
+ int flag;
char type;
const char *desc;
} forceinfos[] = {
{
"all",
- NULL,
+ FORCE_ALL,
'!',
N_("Set all force options"),
}, {
"downgrade",
- &fc_downgrade,
+ FORCE_DOWNGRADE,
'*',
N_("Replace a package with a lower version"),
}, {
"configure-any",
- &fc_configureany,
+ FORCE_CONFIGURE_ANY,
' ',
N_("Configure any package which may help this one"),
}, {
"hold",
- &fc_hold,
+ FORCE_HOLD,
' ',
N_("Process incidental packages even when on hold"),
}, {
"not-root",
- &fc_nonroot,
+ FORCE_NON_ROOT,
' ',
N_("Try to (de)install things even when not root"),
}, {
"bad-path",
- &fc_badpath,
+ FORCE_BAD_PATH,
' ',
N_("PATH is missing important programs, problems likely"),
}, {
"bad-verify",
- &fc_badverify,
+ FORCE_BAD_VERIFY,
' ',
N_("Install a package even if it fails authenticity check"),
}, {
"bad-version",
- &fc_badversion,
+ FORCE_BAD_VERSION,
' ',
N_("Process even packages with wrong versions"),
}, {
"overwrite",
- &fc_overwrite,
+ FORCE_OVERWRITE,
' ',
N_("Overwrite a file from one package with another"),
}, {
"overwrite-diverted",
- &fc_overwritediverted,
+ FORCE_OVERWRITE_DIVERTED,
' ',
N_("Overwrite a diverted file with an undiverted version"),
}, {
"overwrite-dir",
- &fc_overwritedir,
+ FORCE_OVERWRITE_DIR,
'!',
N_("Overwrite one package's directory with another's file"),
}, {
"unsafe-io",
- &fc_unsafe_io,
+ FORCE_UNSAFE_IO,
'!',
N_("Do not perform safe I/O operations when unpacking"),
}, {
"script-chrootless",
- &fc_script_chrootless,
+ FORCE_SCRIPT_CHROOTLESS,
'!',
N_("Do not chroot into maintainer script environment"),
}, {
"confnew",
- &fc_conff_new,
+ FORCE_CONFF_NEW,
'!',
N_("Always use the new config files, don't prompt"),
}, {
"confold",
- &fc_conff_old,
+ FORCE_CONFF_OLD,
'!',
N_("Always use the old config files, don't prompt"),
}, {
"confdef",
- &fc_conff_def,
+ FORCE_CONFF_DEF,
'!',
N_("Use the default option for new config files if one\n"
"is available, don't prompt. If no default can be found,\n"
@@ -169,47 +147,47 @@ static const struct forceinfo {
"confnew options is also given"),
}, {
"confmiss",
- &fc_conff_miss,
+ FORCE_CONFF_MISS,
'!',
N_("Always install missing config files"),
}, {
"confask",
- &fc_conff_ask,
+ FORCE_CONFF_ASK,
'!',
N_("Offer to replace config files with no new versions"),
}, {
"architecture",
- &fc_architecture,
+ FORCE_ARCHITECTURE,
'!',
N_("Process even packages with wrong or no architecture"),
}, {
"breaks",
- &fc_breaks,
+ FORCE_BREAKS,
'!',
N_("Install even if it would break another package"),
}, {
"conflicts",
- &fc_conflicts,
+ FORCE_CONFLICTS,
'!',
N_("Allow installation of conflicting packages"),
}, {
"depends",
- &fc_depends,
+ FORCE_DEPENDS,
'!',
N_("Turn all dependency problems into warnings"),
}, {
"depends-version",
- &fc_dependsversion,
+ FORCE_DEPENDS_VERSION,
'!',
N_("Turn dependency version problems into warnings"),
}, {
"remove-reinstreq",
- &fc_removereinstreq,
+ FORCE_REMOVE_REINSTREQ,
'!',
N_("Remove packages which require installation"),
}, {
"remove-essential",
- &fc_removeessential,
+ FORCE_REMOVE_ESSENTIAL,
'!',
N_("Remove an essential package"),
}, {
@@ -217,6 +195,24 @@ static const struct forceinfo {
}
};
+bool
+in_force(int flags)
+{
+ return (flags & force_flags) == flags;
+}
+
+void
+set_force(int flags)
+{
+ force_flags |= flags;
+}
+
+void
+reset_force(int flags)
+{
+ force_flags &= ~flags;
+}
+
char *
get_force_string(void)
{
@@ -224,7 +220,9 @@ get_force_string(void)
struct varbuf vb = VARBUF_INIT;
for (fip = forceinfos; fip->name; fip++) {
- if (fip->opt == NULL || !*fip->opt)
+ if ((enum force_flags)fip->flag == FORCE_ALL ||
+ (fip->flag & force_mask) != fip->flag ||
+ !in_force(fip->flag))
continue;
if (vb.used)
@@ -258,7 +256,7 @@ print_forceinfo(const struct forceinfo *fi)
}
void
-set_force(const struct cmdinfo *cip, const char *value)
+parse_force(const char *value, bool set)
{
const char *comma;
size_t l;
@@ -272,7 +270,9 @@ set_force(const struct cmdinfo *cip, const char *value)
" Forcing things:\n"), dpkg_get_progname());
for (fip = forceinfos; fip->name; fip++)
- print_forceinfo(fip);
+ if ((enum force_flags)fip->flag == FORCE_ALL ||
+ (fip->flag & force_mask) == fip->flag)
+ print_forceinfo(fip);
printf(_(
"\n"
@@ -299,12 +299,11 @@ set_force(const struct cmdinfo *cip, const char *value)
if (!fip->name) {
badusage(_("unknown force/refuse option '%.*s'"),
(int)min(l, 250), value);
- } else if (strcmp(fip->name, "all") == 0) {
- for (fip = forceinfos; fip->name; fip++)
- if (fip->opt)
- *fip->opt = cip->arg_int;
- } else if (fip->opt) {
- *fip->opt = cip->arg_int;
+ } else if (fip->flag) {
+ if (set)
+ set_force(fip->flag);
+ else
+ reset_force(fip->flag);
} else {
warning(_("obsolete force/refuse option '%s'"),
fip->name);
@@ -317,12 +316,26 @@ set_force(const struct cmdinfo *cip, const char *value)
}
void
+set_force_option(const struct cmdinfo *cip, const char *value)
+{
+ bool set = cip->arg_int;
+
+ parse_force(value, set);
+}
+
+void
+reset_force_option(const struct cmdinfo *cip, const char *value)
+{
+ reset_force(cip->arg_int);
+}
+
+void
forcibleerr(int forceflag, const char *fmt, ...)
{
va_list args;
va_start(args, fmt);
- if (forceflag) {
+ if (in_force(forceflag)) {
warning(_("overriding problem because --force enabled:"));
warningv(fmt, args);
} else {
@@ -334,7 +347,7 @@ forcibleerr(int forceflag, const char *fmt, ...)
int
forcible_nonroot_error(int rc)
{
- if (fc_nonroot && errno == EPERM)
+ if (in_force(FORCE_NON_ROOT) && errno == EPERM)
return 0;
return rc;
}
diff --git a/src/force.h b/src/force.h
index 769163bd6..28776eefc 100644
--- a/src/force.h
+++ b/src/force.h
@@ -25,35 +25,51 @@
#include <dpkg/dpkg.h>
#include <dpkg/options.h>
-extern int fc_architecture;
-extern int fc_badpath;
-extern int fc_badverify;
-extern int fc_badversion;
-extern int fc_breaks;
-extern int fc_conff_ask;
-extern int fc_conff_def;
-extern int fc_conff_miss;
-extern int fc_conff_new;
-extern int fc_conff_old;
-extern int fc_configureany;
-extern int fc_conflicts;
-extern int fc_depends;
-extern int fc_dependsversion;
-extern int fc_downgrade;
-extern int fc_hold;
-extern int fc_nonroot;
-extern int fc_overwrite;
-extern int fc_overwritedir;
-extern int fc_overwritediverted;
-extern int fc_removeessential;
-extern int fc_removereinstreq;
-extern int fc_script_chrootless;
-extern int fc_unsafe_io;
+enum force_flags {
+ FORCE_ARCHITECTURE = DPKG_BIT(0),
+ FORCE_BAD_PATH = DPKG_BIT(1),
+ FORCE_BAD_VERIFY = DPKG_BIT(2),
+ FORCE_BAD_VERSION = DPKG_BIT(3),
+ FORCE_BREAKS = DPKG_BIT(4),
+ FORCE_CONFF_ASK = DPKG_BIT(5),
+ FORCE_CONFF_DEF = DPKG_BIT(6),
+ FORCE_CONFF_MISS = DPKG_BIT(7),
+ FORCE_CONFF_NEW = DPKG_BIT(8),
+ FORCE_CONFF_OLD = DPKG_BIT(9),
+ FORCE_CONFIGURE_ANY = DPKG_BIT(10),
+ FORCE_CONFLICTS = DPKG_BIT(11),
+ FORCE_DEPENDS = DPKG_BIT(12),
+ FORCE_DEPENDS_VERSION = DPKG_BIT(13),
+ FORCE_DOWNGRADE = DPKG_BIT(14),
+ FORCE_HOLD = DPKG_BIT(15),
+ FORCE_NON_ROOT = DPKG_BIT(16),
+ FORCE_OVERWRITE = DPKG_BIT(17),
+ FORCE_OVERWRITE_DIR = DPKG_BIT(18),
+ FORCE_OVERWRITE_DIVERTED = DPKG_BIT(19),
+ FORCE_REMOVE_ESSENTIAL = DPKG_BIT(20),
+ FORCE_REMOVE_REINSTREQ = DPKG_BIT(21),
+ FORCE_SCRIPT_CHROOTLESS = DPKG_BIT(22),
+ FORCE_UNSAFE_IO = DPKG_BIT(23),
+ FORCE_ALL = 0xffffffff,
+};
+
+bool
+in_force(int flags);
+void
+set_force(int flags);
+void
+reset_force(int flags);
char *
get_force_string(void);
+
+void
+parse_force(const char *value, bool set);
+
+void
+set_force_option(const struct cmdinfo *cip, const char *value);
void
-set_force(const struct cmdinfo *cip, const char *value);
+reset_force_option(const struct cmdinfo *cip, const char *value);
void
forcibleerr(int forceflag, const char *format, ...) DPKG_ATTR_PRINTF(2);
diff --git a/src/help.c b/src/help.c
index f168e8374..382b3638c 100644
--- a/src/help.c
+++ b/src/help.c
@@ -143,7 +143,7 @@ void checkpath(void) {
}
if (warned)
- forcibleerr(fc_badpath,
+ forcibleerr(FORCE_BAD_PATH,
P_("%d expected program not found in PATH or not executable\n%s",
"%d expected programs not found in PATH or not executable\n%s",
warned),
@@ -182,7 +182,7 @@ ignore_depends_possi(struct deppossi *possi)
bool
force_depends(struct deppossi *possi)
{
- return fc_depends ||
+ return in_force(FORCE_DEPENDS) ||
ignore_depends_possi(possi) ||
ignore_depends(possi->up->up);
}
@@ -190,7 +190,7 @@ force_depends(struct deppossi *possi)
bool
force_breaks(struct deppossi *possi)
{
- return fc_breaks ||
+ return in_force(FORCE_BREAKS) ||
ignore_depends_possi(possi) ||
ignore_depends(possi->up->up);
}
@@ -198,7 +198,7 @@ force_breaks(struct deppossi *possi)
bool
force_conflicts(struct deppossi *possi)
{
- return fc_conflicts;
+ return in_force(FORCE_CONFLICTS);
}
void clear_istobes(void) {
diff --git a/src/main.c b/src/main.c
index d3488d52a..35be30d20 100644
--- a/src/main.c
+++ b/src/main.c
@@ -492,7 +492,7 @@ arch_remove(const char *const *argv)
if (pkg->status < PKG_STAT_HALFINSTALLED)
continue;
if (pkg->installed.arch == arch) {
- if (fc_architecture)
+ if (in_force(FORCE_ARCHITECTURE))
warning(_("removing architecture '%s' currently in use by database"),
arch->name);
else
@@ -579,7 +579,7 @@ static const struct cmdinfo cmdinfos[]= {
{ "no-pager", 0, 0, NULL, NULL, set_no_pager, 0 },
{ "no-debsig", 0, 0, &f_nodebsig, NULL, NULL, 1 },
/* Alias ('G') for --refuse. */
- { NULL, 'G', 0, &fc_downgrade, NULL, NULL, 0 },
+ { NULL, 'G', 0, NULL, NULL, reset_force_option, FORCE_DOWNGRADE },
{ "selected-only", 'O', 0, &f_alsoselect, NULL, NULL, 0 },
{ "triggers", 0, 0, &f_triggers, NULL, NULL, 1 },
{ "no-triggers", 0, 0, &f_triggers, NULL, NULL, -1 },
@@ -592,9 +592,9 @@ static const struct cmdinfo cmdinfos[]= {
{ "admindir", 0, 1, NULL, &admindir, NULL, 0 },
{ "instdir", 0, 1, NULL, NULL, set_instdir, 0 },
{ "ignore-depends", 0, 1, NULL, NULL, set_ignore_depends, 0 },
- { "force", 0, 2, NULL, NULL, set_force, 1 },
- { "refuse", 0, 2, NULL, NULL, set_force, 0 },
- { "no-force", 0, 2, NULL, NULL, set_force, 0 },
+ { "force", 0, 2, NULL, NULL, set_force_option, 1 },
+ { "refuse", 0, 2, NULL, NULL, set_force_option, 0 },
+ { "no-force", 0, 2, NULL, NULL, set_force_option, 0 },
{ "debug", 'D', 1, NULL, NULL, set_debug, 0 },
{ "help", '?', 0, NULL, NULL, usage, 0 },
{ "version", 0, 0, NULL, NULL, printversion, 0 },
@@ -747,7 +747,7 @@ int main(int argc, const char *const *argv) {
/* When running as root, make sure our primary group is also root, so
* that files created by maintainer scripts have correct ownership. */
- if (!fc_nonroot && getuid() == 0)
+ if (!in_force(FORCE_NON_ROOT) && getuid() == 0)
if (setgid(0) < 0)
ohshite(_("cannot set primary group ID to root"));
diff --git a/src/packages.c b/src/packages.c
index bc93c7c89..bd8047ac9 100644
--- a/src/packages.c
+++ b/src/packages.c
@@ -137,9 +137,9 @@ packages(const char *const *argv)
{
trigproc_install_hooks();
- modstatdb_open(f_noact ? msdbrw_readonly :
- fc_nonroot ? msdbrw_write :
- msdbrw_needsuperuser);
+ modstatdb_open(f_noact ? msdbrw_readonly :
+ in_force(FORCE_NON_ROOT) ? msdbrw_write :
+ msdbrw_needsuperuser);
checkpath();
pkg_infodb_upgrade();
@@ -416,7 +416,7 @@ deppossi_ok_found(struct pkginfo *possdependee, struct pkginfo *requiredby,
checkversion->ed->name,
pkg_name(possdependee, pnaw_always),
versiondescribe(&provider->version, vdew_nonambig));
- if (fc_dependsversion)
+ if (in_force(FORCE_DEPENDS_VERSION))
thisf = found_forced_on(DEPEND_TRY_FORCE_DEPENDS_VERSION);
debug(dbg_depcondetail, " bad version");
goto unsuitable;
@@ -429,7 +429,7 @@ deppossi_ok_found(struct pkginfo *possdependee, struct pkginfo *requiredby,
pkg_name(possdependee, pnaw_nonambig),
versiondescribe(&possdependee->installed.version,
vdew_nonambig));
- if (fc_dependsversion)
+ if (in_force(FORCE_DEPENDS_VERSION))
thisf = found_forced_on(DEPEND_TRY_FORCE_DEPENDS_VERSION);
debug(dbg_depcondetail, " bad version");
goto unsuitable;
@@ -484,7 +484,7 @@ deppossi_ok_found(struct pkginfo *possdependee, struct pkginfo *requiredby,
possdependee->clientdata->istobe == PKG_ISTOBE_INSTALLNEW) {
debug(dbg_depcondetail," unpacked/halfconfigured, defer");
return FOUND_DEFER;
- } else if (!removing && fc_configureany &&
+ } else if (!removing && in_force(FORCE_CONFIGURE_ANY) &&
!skip_due_to_hold(possdependee) &&
!(possdependee->status == PKG_STAT_HALFCONFIGURED)) {
notice(_("also configuring '%s' (required by '%s')"),
@@ -573,7 +573,8 @@ breaks_check_one(struct varbuf *aemsgs, enum dep_check *ok,
varbuf_printf(aemsgs, _(" Version of %s to be configured is %s.\n"),
pkg_name(broken, pnaw_nonambig),
versiondescribe(&broken->installed.version, vdew_nonambig));
- if (fc_dependsversion) return;
+ if (in_force(FORCE_DEPENDS_VERSION))
+ return;
}
if (force_breaks(breaks)) return;
*ok = DEP_CHECK_HALT;
@@ -698,7 +699,7 @@ dependencies_ok(struct pkginfo *pkg, struct pkginfo *removing,
debug(dbg_depcondetail," found %d",found);
if (thisf > found) found= thisf;
}
- if (fc_depends) {
+ if (in_force(FORCE_DEPENDS)) {
thisf = found_forced_on(DEPEND_TRY_FORCE_DEPENDS);
if (thisf > found) {
found = thisf;
diff --git a/src/remove.c b/src/remove.c
index 39584aa85..b63d699e1 100644
--- a/src/remove.c
+++ b/src/remove.c
@@ -126,7 +126,7 @@ void deferred_remove(struct pkginfo *pkg) {
}
if (pkg->installed.essential && pkg->status != PKG_STAT_CONFIGFILES)
- forcibleerr(fc_removeessential,
+ forcibleerr(FORCE_REMOVE_ESSENTIAL,
_("this is an essential package; it should not be removed"));
debug(dbg_general, "checking dependencies for remove '%s'",
@@ -159,7 +159,7 @@ void deferred_remove(struct pkginfo *pkg) {
sincenothing= 0;
if (pkg->eflag & PKG_EFLAG_REINSTREQ)
- forcibleerr(fc_removereinstreq,
+ forcibleerr(FORCE_REMOVE_REINSTREQ,
_("package is in a very bad inconsistent state; you should\n"
" reinstall it before attempting a removal"));
diff --git a/src/script.c b/src/script.c
index ea63093af..abe65b6f7 100644
--- a/src/script.c
+++ b/src/script.c
@@ -100,12 +100,12 @@ maintscript_pre_exec(struct command *cmd)
const char *changedir;
size_t instdirlen = strlen(instdir);
- if (instdirlen > 0 && fc_script_chrootless)
+ if (instdirlen > 0 && in_force(FORCE_SCRIPT_CHROOTLESS))
changedir = instdir;
else
changedir = "/";
- if (instdirlen > 0 && !fc_script_chrootless) {
+ if (instdirlen > 0 && !in_force(FORCE_SCRIPT_CHROOTLESS)) {
int rc;
if (strncmp(admindir, instdir, instdirlen) != 0)
@@ -116,7 +116,7 @@ maintscript_pre_exec(struct command *cmd)
ohshite(_("unable to setenv for subprocesses"));
rc = chroot(instdir);
- if (rc && fc_nonroot && errno == EPERM)
+ if (rc && in_force(FORCE_NON_ROOT) && errno == EPERM)
ohshit(_("not enough privileges to change root "
"directory with --force-not-root, consider "
"using --force-script-chrootless?"));
@@ -140,7 +140,7 @@ maintscript_pre_exec(struct command *cmd)
args.buf);
varbuf_destroy(&args);
}
- if (instdirlen == 0 || fc_script_chrootless)
+ if (instdirlen == 0 || in_force(FORCE_SCRIPT_CHROOTLESS))
return cmd->filename;
if (strlen(cmd->filename) < instdirlen)
diff --git a/src/unpack.c b/src/unpack.c
index ad1e05f56..ee453a88d 100644
--- a/src/unpack.c
+++ b/src/unpack.c
@@ -147,7 +147,7 @@ deb_verify(const char *filename)
status = subproc_reap(pid, "debsig-verify", SUBPROC_NOCHECK);
if (!(WIFEXITED(status) && WEXITSTATUS(status) == 0)) {
- if (!fc_badverify)
+ if (!in_force(FORCE_BAD_VERIFY))
ohshit(_("verification on package %s failed!"), filename);
else
notice(_("verification on package %s failed; "
@@ -1136,7 +1136,7 @@ void process_archive(const char *filename) {
else
parsedb_flags = pdb_parse_binary;
parsedb_flags |= pdb_ignore_archives;
- if (fc_badversion)
+ if (in_force(FORCE_BAD_VERSION))
parsedb_flags |= pdb_lax_version_parser;
parsedb(cidir, parsedb_flags, &pkg);
@@ -1164,7 +1164,7 @@ void process_archive(const char *filename) {
if (pkg->available.arch->type != DPKG_ARCH_ALL &&
pkg->available.arch->type != DPKG_ARCH_NATIVE &&
pkg->available.arch->type != DPKG_ARCH_FOREIGN)
- forcibleerr(fc_architecture,
+ forcibleerr(FORCE_ARCHITECTURE,
_("package architecture (%s) does not match system (%s)"),
pkg->available.arch->name,
dpkg_arch_get(DPKG_ARCH_NATIVE)->name);