diff options
Diffstat (limited to '')
-rw-r--r-- | src/main/archives.c | 25 | ||||
-rw-r--r-- | src/main/configure.c | 86 | ||||
-rw-r--r-- | src/main/depcon.c | 6 | ||||
-rw-r--r-- | src/main/enquiry.c | 1 | ||||
-rw-r--r-- | src/main/help.c | 14 | ||||
-rw-r--r-- | src/main/main.c | 25 | ||||
-rw-r--r-- | src/main/main.h | 4 | ||||
-rw-r--r-- | src/main/packages.c | 7 | ||||
-rw-r--r-- | src/main/remove.c | 25 | ||||
-rw-r--r-- | src/main/script.c | 3 | ||||
-rw-r--r-- | src/main/select.c | 12 | ||||
-rw-r--r-- | src/main/trigproc.c | 11 | ||||
-rw-r--r-- | src/main/unpack.c | 42 | ||||
-rw-r--r-- | src/main/verify.c | 3 |
14 files changed, 131 insertions, 133 deletions
diff --git a/src/main/archives.c b/src/main/archives.c index 7e399f9..d7279e1 100644 --- a/src/main/archives.c +++ b/src/main/archives.c @@ -240,7 +240,7 @@ md5hash_prev_conffile(struct pkginfo *pkg, char *oldhash, const char *oldname, &otherpkg->configversion) != 0) continue; for (conff = otherpkg->installed.conffiles; conff; conff = conff->next) { - if (conff->obsolete || conff->remove_on_upgrade) + if (conffile_is_disappearing(conff)) continue; if (strcmp(conff->name, namenode->name) == 0) break; @@ -431,7 +431,6 @@ tarobject_extract(struct tarcontext *tc, struct tar_entry *te, namenodetouse(linknode, tc->pkg, &tc->pkg->available)->name); if (linknode->flags & (FNNF_DEFERRED_RENAME | FNNF_NEW_CONFF)) varbuf_add_str(&hardlinkfn, DPKGNEWEXT); - varbuf_end_str(&hardlinkfn); if (link(hardlinkfn.buf, path)) ohshite(_("error creating hard link '%.255s'"), te->name); namenode->newhash = linknode->newhash; @@ -598,17 +597,14 @@ tarobject_matches(struct tarcontext *tc, void setupfnamevbs(const char *filename) { varbuf_rollback(&fname_state); varbuf_add_str(&fnamevb, filename); - varbuf_end_str(&fnamevb); varbuf_rollback(&fnametmp_state); varbuf_add_str(&fnametmpvb, filename); varbuf_add_str(&fnametmpvb, DPKGTEMPEXT); - varbuf_end_str(&fnametmpvb); varbuf_rollback(&fnamenew_state); varbuf_add_str(&fnamenewvb, filename); varbuf_add_str(&fnamenewvb, DPKGNEWEXT); - varbuf_end_str(&fnamenewvb); debug(dbg_eachfiledetail, "setupvnamevbs main='%s' tmp='%s' new='%s'", fnamevb.buf, fnametmpvb.buf, fnamenewvb.buf); @@ -643,7 +639,6 @@ linktosameexistingdir(const struct tar_entry *ti, const char *fname, varbuf_set_buf(symlinkfn, fname, (lastslash - fname) + 1); } varbuf_add_str(symlinkfn, ti->linkname); - varbuf_end_str(symlinkfn); statr= stat(symlinkfn->buf, &newstab); if (statr) { @@ -892,7 +887,7 @@ tarobject(struct tar_archive *tar, struct tar_entry *ti) for (conff = otherpkg->installed.conffiles; conff; conff = conff->next) { - if (!conff->obsolete) + if (!(conff->flags & CONFFILE_OBSOLETE)) continue; if (strcmp(conff->name, nifd->namenode->name) == 0) break; @@ -1322,7 +1317,6 @@ void check_breaks(struct dependency *dep, struct pkginfo *pkg, return; } - varbuf_end_str(&why); if (fixbydeconf && f_autodeconf) { ensure_package_clientdata(fixbydeconf); @@ -1336,7 +1330,7 @@ void check_breaks(struct dependency *dep, struct pkginfo *pkg, pkg_name(fixbydeconf, pnaw_nonambig), pkgbin_name(pkg, &pkg->available, pnaw_nonambig)); - ok = try_deconfigure_can(fixbydeconf, dep->list, pkg, why.buf); + ok = try_deconfigure_can(fixbydeconf, dep->list, pkg, varbuf_str(&why)); if (ok == 1) { notice(_("yes, will deconfigure %s (broken by %s)"), pkg_name(fixbydeconf, pnaw_nonambig), @@ -1344,7 +1338,8 @@ void check_breaks(struct dependency *dep, struct pkginfo *pkg, } } else { notice(_("regarding %s containing %s:\n%s"), pfilename, - pkgbin_name(pkg, &pkg->available, pnaw_nonambig), why.buf); + pkgbin_name(pkg, &pkg->available, pnaw_nonambig), + varbuf_str(&why)); ok= 0; } varbuf_destroy(&why); @@ -1415,8 +1410,7 @@ void check_conflict(struct dependency *dep, struct pkginfo *pkg, continue; if (depisok(pdep->up, &removalwhy, NULL, NULL, false)) continue; - varbuf_end_str(&removalwhy); - if (!try_remove_can(pdep,fixbyrm,removalwhy.buf)) + if (!try_remove_can(pdep, fixbyrm, varbuf_str(&removalwhy))) break; } if (!pdep) { @@ -1432,11 +1426,10 @@ void check_conflict(struct dependency *dep, struct pkginfo *pkg, continue; if (depisok(pdep->up, &removalwhy, NULL, NULL, false)) continue; - varbuf_end_str(&removalwhy); notice(_("may have trouble removing %s, as it provides %s ..."), pkg_name(fixbyrm, pnaw_nonambig), providecheck->list->ed->name); - if (!try_remove_can(pdep,fixbyrm,removalwhy.buf)) + if (!try_remove_can(pdep, fixbyrm, varbuf_str(&removalwhy))) goto break_from_both_loops_at_once; } } @@ -1470,9 +1463,9 @@ void check_conflict(struct dependency *dep, struct pkginfo *pkg, fixbyrm->clientdata->istobe = PKG_ISTOBE_NORMAL; } } - varbuf_end_str(&conflictwhy); notice(_("regarding %s containing %s:\n%s"), pfilename, - pkgbin_name(pkg, &pkg->available, pnaw_nonambig), conflictwhy.buf); + pkgbin_name(pkg, &pkg->available, pnaw_nonambig), + varbuf_str(&conflictwhy)); if (!force_conflicts(dep->list)) ohshit(_("conflicting packages - not installing %.250s"), pkgbin_name(pkg, &pkg->available, pnaw_nonambig)); diff --git a/src/main/configure.c b/src/main/configure.c index f2c9227..889db11 100644 --- a/src/main/configure.c +++ b/src/main/configure.c @@ -356,7 +356,7 @@ deferred_configure_ghost_conffile(struct pkginfo *pkg, struct conffile *conff) for (otherconff = otherpkg->installed.conffiles; otherconff; otherconff = otherconff->next) { - if (otherconff->obsolete || otherconff->remove_on_upgrade) + if (conffile_is_disappearing(otherconff)) continue; /* Check if we need to propagate the new hash from @@ -379,29 +379,31 @@ deferred_configure_conffile(struct pkginfo *pkg, struct conffile *conff) int useredited, distedited; enum conffopt what; struct stat stab; - struct varbuf cdr = VARBUF_INIT, cdr2 = VARBUF_INIT; - char *cdr2rest; + struct varbuf cdr = VARBUF_INIT; + struct varbuf cdr_new = VARBUF_INIT; + struct varbuf cdr_old = VARBUF_INIT; + struct varbuf cdr_dist = VARBUF_INIT; int rc; usenode = namenodetouse(fsys_hash_find_node(conff->name, FHFF_NO_COPY), pkg, &pkg->installed); rc = conffderef(pkg, &cdr, usenode->name); - if (rc == -1) { + if (rc < 0) { conff->hash = EMPTYHASHFLAG; return; } md5hash(pkg, currenthash, cdr.buf); - varbuf_set_varbuf(&cdr2, &cdr); - /* XXX: Make sure there's enough room for extensions. */ - varbuf_grow(&cdr2, 50); - cdr2rest = cdr2.buf + strlen(cdr.buf); - /* From now on we can just strcpy(cdr2rest, extension); */ + varbuf_set_varbuf(&cdr_new, &cdr); + varbuf_add_str(&cdr_new, DPKGNEWEXT); + varbuf_set_varbuf(&cdr_old, &cdr); + varbuf_add_str(&cdr_old, DPKGOLDEXT); + varbuf_set_varbuf(&cdr_dist, &cdr); + varbuf_add_str(&cdr_dist, DPKGDISTEXT); - strcpy(cdr2rest, DPKGNEWEXT); /* If the .dpkg-new file is no longer there, ignore this one. */ - if (lstat(cdr2.buf, &stab)) { + if (lstat(cdr_new.buf, &stab)) { if (errno == ENOENT) { /* But, sync the conffile hash value from another * package set instance. */ @@ -409,14 +411,14 @@ deferred_configure_conffile(struct pkginfo *pkg, struct conffile *conff) return; } ohshite(_("unable to stat new distributed conffile '%.250s'"), - cdr2.buf); + cdr_new.buf); } - md5hash(pkg, newdisthash, cdr2.buf); + md5hash(pkg, newdisthash, cdr_new.buf); /* Copy the permissions from the installed version to the new * distributed version. */ if (!stat(cdr.buf, &stab)) - file_copy_perms(cdr.buf, cdr2.buf); + file_copy_perms(cdr.buf, cdr_new.buf); else if (errno != ENOENT) ohshite(_("unable to stat current installed conffile '%.250s'"), cdr.buf); @@ -465,60 +467,52 @@ deferred_configure_conffile(struct pkginfo *pkg, struct conffile *conff) "deferred_configure '%s' (= '%s') useredited=%d distedited=%d what=%o", usenode->name, cdr.buf, useredited, distedited, what); - what = promptconfaction(pkg, usenode->name, cdr.buf, cdr2.buf, + what = promptconfaction(pkg, usenode->name, cdr.buf, cdr_new.buf, useredited, distedited, what); switch (what & ~(CFOF_IS_NEW | CFOF_USER_DEL)) { case CFO_KEEP | CFOF_BACKUP: - strcpy(cdr2rest, DPKGOLDEXT); - if (unlink(cdr2.buf) && errno != ENOENT) + if (unlink(cdr_old.buf) && errno != ENOENT) warning(_("%s: failed to remove old backup '%.250s': %s"), - pkg_name(pkg, pnaw_nonambig), cdr2.buf, + pkg_name(pkg, pnaw_nonambig), cdr_old.buf, strerror(errno)); - varbuf_add_str(&cdr, DPKGDISTEXT); - varbuf_end_str(&cdr); - strcpy(cdr2rest, DPKGNEWEXT); trig_path_activate(usenode, pkg); - if (rename(cdr2.buf, cdr.buf)) + if (rename(cdr_new.buf, cdr_dist.buf)) warning(_("%s: failed to rename '%.250s' to '%.250s': %s"), - pkg_name(pkg, pnaw_nonambig), cdr2.buf, cdr.buf, + pkg_name(pkg, pnaw_nonambig), cdr_new.buf, cdr_dist.buf, strerror(errno)); break; case CFO_KEEP: - strcpy(cdr2rest, DPKGNEWEXT); - if (unlink(cdr2.buf)) + if (unlink(cdr_new.buf)) warning(_("%s: failed to remove '%.250s': %s"), - pkg_name(pkg, pnaw_nonambig), cdr2.buf, + pkg_name(pkg, pnaw_nonambig), cdr_new.buf, strerror(errno)); break; case CFO_INSTALL | CFOF_BACKUP: - strcpy(cdr2rest, DPKGDISTEXT); - if (unlink(cdr2.buf) && errno != ENOENT) + if (unlink(cdr_dist.buf) && errno != ENOENT) warning(_("%s: failed to remove old distributed version '%.250s': %s"), - pkg_name(pkg, pnaw_nonambig), cdr2.buf, + pkg_name(pkg, pnaw_nonambig), cdr_dist.buf, strerror(errno)); - strcpy(cdr2rest, DPKGOLDEXT); - if (unlink(cdr2.buf) && errno != ENOENT) + if (unlink(cdr_old.buf) && errno != ENOENT) warning(_("%s: failed to remove '%.250s' (before overwrite): %s"), - pkg_name(pkg, pnaw_nonambig), cdr2.buf, + pkg_name(pkg, pnaw_nonambig), cdr_old.buf, strerror(errno)); if (!(what & CFOF_USER_DEL)) - if (link(cdr.buf, cdr2.buf)) + if (link(cdr.buf, cdr_old.buf)) warning(_("%s: failed to link '%.250s' to '%.250s': %s"), pkg_name(pkg, pnaw_nonambig), cdr.buf, - cdr2.buf, strerror(errno)); + cdr_old.buf, strerror(errno)); /* Fall through. */ case CFO_INSTALL: printf(_("Installing new version of config file %s ...\n"), usenode->name); /* Fall through. */ case CFO_NEW_CONFF: - strcpy(cdr2rest, DPKGNEWEXT); trig_path_activate(usenode, pkg); - if (rename(cdr2.buf, cdr.buf)) + if (rename(cdr_new.buf, cdr.buf)) ohshite(_("unable to install '%.250s' as '%.250s'"), - cdr2.buf, cdr.buf); + cdr_new.buf, cdr.buf); break; default: internerr("unknown conffopt '%d'", what); @@ -528,7 +522,9 @@ deferred_configure_conffile(struct pkginfo *pkg, struct conffile *conff) modstatdb_note(pkg); varbuf_destroy(&cdr); - varbuf_destroy(&cdr2); + varbuf_destroy(&cdr_new); + varbuf_destroy(&cdr_old); + varbuf_destroy(&cdr_dist); } /** @@ -608,15 +604,13 @@ deferred_configure(struct pkginfo *pkg) ok = breakses_ok(pkg, &aemsgs) ? ok : DEP_CHECK_HALT; if (ok == DEP_CHECK_HALT) { sincenothing = 0; - varbuf_end_str(&aemsgs); notice(_("dependency problems prevent configuration of %s:\n%s"), - pkg_name(pkg, pnaw_nonambig), aemsgs.buf); + pkg_name(pkg, pnaw_nonambig), varbuf_str(&aemsgs)); varbuf_destroy(&aemsgs); ohshit(_("dependency problems - leaving unconfigured")); } else if (aemsgs.used) { - varbuf_end_str(&aemsgs); notice(_("%s: dependency problems, but configuring anyway as you requested:\n%s"), - pkg_name(pkg, pnaw_nonambig), aemsgs.buf); + pkg_name(pkg, pnaw_nonambig), varbuf_str(&aemsgs)); } varbuf_destroy(&aemsgs); sincenothing = 0; @@ -658,7 +652,7 @@ deferred_configure(struct pkginfo *pkg) * ‘*.dpkg-new’ no longer exists we assume that we've * already processed this one. */ for (conff = pkg->installed.conffiles; conff; conff = conff->next) { - if (conff->obsolete || conff->remove_on_upgrade) + if (conffile_is_disappearing(conff)) continue; deferred_configure_conffile(pkg, conff); } @@ -703,7 +697,6 @@ conffderef(struct pkginfo *pkg, struct varbuf *result, const char *in) varbuf_set_str(result, dpkg_fsys_get_dir()); varbuf_add_str(result, in); - varbuf_end_str(result); loopprotect = 0; @@ -777,11 +770,10 @@ conffderef(struct pkginfo *pkg, struct varbuf *result, const char *in) r++; varbuf_trunc(result, r); debug(dbg_conffdetail, - "conffderef readlink relative to '%.*s'", - (int)result->used, result->buf); + "conffderef readlink relative to '%s'", + varbuf_str(result)); } varbuf_add_varbuf(result, &target); - varbuf_end_str(result); } else { warning(_("%s: conffile '%.250s' is not a plain file or symlink (= '%s')"), pkg_name(pkg, pnaw_nonambig), in, result->buf); diff --git a/src/main/depcon.c b/src/main/depcon.c index e8efdd3..45f55a8 100644 --- a/src/main/depcon.c +++ b/src/main/depcon.c @@ -176,9 +176,8 @@ findbreakcyclerecursive(struct pkginfo *pkg, struct cyclesofarlink *sofar) varbuf_add_str(&str_pkgs, " <- "); varbuf_add_pkgbin_name(&str_pkgs, sol->pkg, &sol->pkg->installed, pnaw_nonambig); } - varbuf_end_str(&str_pkgs); debug(dbg_depcondetail, "findbreakcyclerecursive %s %s", - pkg_name(pkg, pnaw_always), str_pkgs.buf); + pkg_name(pkg, pnaw_always), varbuf_str(&str_pkgs)); varbuf_destroy(&str_pkgs); } thislink.pkg= pkg; @@ -242,7 +241,6 @@ void describedepcon(struct varbuf *addto, struct dependency *dep) { struct varbuf depstr = VARBUF_INIT; varbufdependency(&depstr, dep); - varbuf_end_str(&depstr); switch (dep->type) { case dep_depends: @@ -285,7 +283,7 @@ void describedepcon(struct varbuf *addto, struct dependency *dep) { * empty though - it will be reset before use. * * If depisok returns false for ‘not OK’ it will contain a description, - * newline-terminated BUT NOT NUL-TERMINATED, of the reason. + * newline and NUL terminated, of the reason. * * If depisok returns true it will contain garbage. * allowunconfigd should be non-zero during the ‘Pre-Depends’ checking diff --git a/src/main/enquiry.c b/src/main/enquiry.c index cc605c2..13dc8c0 100644 --- a/src/main/enquiry.c +++ b/src/main/enquiry.c @@ -565,7 +565,6 @@ predeppackage(const char *const *argv) if (!pkg) { varbuf_reset(&vb); describedepcon(&vb,dep); - varbuf_end_str(&vb); notice(_("cannot see how to satisfy pre-dependency:\n %s"), vb.buf); ohshit(_("cannot satisfy pre-dependencies for %.250s (wanted due to %.250s)"), pkgbin_name(dep->up, &dep->up->available, pnaw_nonambig), diff --git a/src/main/help.c b/src/main/help.c index 59e730e..c6abc8a 100644 --- a/src/main/help.c +++ b/src/main/help.c @@ -196,7 +196,7 @@ dir_has_conffiles(struct fsys_namenode *file, struct pkginfo *pkg) pkg_name(pkg, pnaw_always)); namelen = strlen(file->name); for (conff= pkg->installed.conffiles; conff; conff= conff->next) { - if (conff->obsolete || conff->remove_on_upgrade) + if (conffile_is_disappearing(conff)) continue; if (strncmp(file->name, conff->name, namelen) == 0 && strlen(conff->name) > namelen && conff->name[namelen] == '/') { @@ -272,6 +272,16 @@ dir_is_used_by_pkg(struct fsys_namenode *file, struct pkginfo *pkg, } /** + * Returns whether the conffile is disappearing, because it is obsolete + * or marked for removal on upgrade. + */ +bool +conffile_is_disappearing(struct conffile *conff) +{ + return conff->flags & (CONFFILE_OBSOLETE | CONFFILE_REMOVE_ON_UPGRADE); +} + +/** * Mark a conffile as obsolete. * * @param pkg The package owning the conffile. @@ -286,7 +296,7 @@ conffile_mark_obsolete(struct pkginfo *pkg, struct fsys_namenode *namenode) if (strcmp(conff->name, namenode->name) == 0) { debug(dbg_conff, "marking %s conffile %s as obsolete", pkg_name(pkg, pnaw_always), conff->name); - conff->obsolete = true; + conff->flags |= CONFFILE_OBSOLETE; return; } } diff --git a/src/main/main.c b/src/main/main.c index 02887c2..ecaed5f 100644 --- a/src/main/main.c +++ b/src/main/main.c @@ -29,7 +29,7 @@ #include <errno.h> #include <limits.h> -#if HAVE_LOCALE_H +#ifdef HAVE_LOCALE_H #include <locale.h> #endif #include <string.h> @@ -337,6 +337,24 @@ is_invoke_action(enum action action) } } +static bool +can_invoke_hooks(enum action action) +{ + if (!is_invoke_action(action)) + return false; + + if (f_noact) + return false; + + if (in_force(FORCE_NON_ROOT)) + return true; + + if (getuid() || geteuid()) + return false; + + return true; +} + static struct invoke_list pre_invoke_hooks = { .head = NULL, .tail = &pre_invoke_hooks.head, @@ -672,7 +690,6 @@ commandfd(const char *const *argv) if (c == EOF) ohshit(_("unexpected end of file before end of line %d"), lno); if (!argc) continue; - varbuf_end_str(&linevb); newargs = m_realloc(newargs, sizeof(const char *) * (argc + 1)); argc= 1; ptr= linevb.buf; @@ -761,14 +778,14 @@ int main(int argc, const char *const *argv) { if (!f_triggers) f_triggers = (cipaction->arg_int == act_triggers && *argv) ? -1 : 1; - if (is_invoke_action(cipaction->arg_int)) { + if (can_invoke_hooks(cipaction->arg_int)) { run_invoke_hooks(cipaction->olong, &pre_invoke_hooks); run_status_loggers(&status_loggers); } ret = cipaction->action(argv); - if (is_invoke_action(cipaction->arg_int)) + if (can_invoke_hooks(cipaction->arg_int)) run_invoke_hooks(cipaction->olong, &post_invoke_hooks); free_invoke_hooks(&pre_invoke_hooks); diff --git a/src/main/main.h b/src/main/main.h index f841e8d..d70e87d 100644 --- a/src/main/main.h +++ b/src/main/main.h @@ -22,6 +22,8 @@ #ifndef MAIN_H #define MAIN_H +#include <stdbool.h> + #include <dpkg/debug.h> #include <dpkg/pkg-list.h> @@ -220,6 +222,8 @@ bool ignore_depends(const struct pkginfo *pkg); bool force_breaks(struct deppossi *possi); bool force_depends(struct deppossi *possi); bool force_conflicts(struct deppossi *possi); +bool +conffile_is_disappearing(struct conffile *conff); void conffile_mark_obsolete(struct pkginfo *pkg, struct fsys_namenode *namenode); void pkg_conffiles_mark_old(struct pkginfo *pkg); diff --git a/src/main/packages.c b/src/main/packages.c index aba9ba7..3fc9db3 100644 --- a/src/main/packages.c +++ b/src/main/packages.c @@ -561,11 +561,10 @@ breaks_check_one(struct varbuf *aemsgs, enum dep_check *ok, return; varbufdependency(&depmsg, breaks->up); - varbuf_end_str(&depmsg); varbuf_printf(aemsgs, _(" %s (%s) breaks %s and is %s.\n"), pkg_name(breaker, pnaw_nonambig), versiondescribe(&breaker->installed.version, vdew_nonambig), - depmsg.buf, gettext(statusstrings[breaker->status])); + varbuf_str(&depmsg), gettext(statusstrings[breaker->status])); varbuf_destroy(&depmsg); if (virtbroken) { @@ -727,7 +726,6 @@ dependencies_ok(struct pkginfo *pkg, struct pkginfo *removing, if (interestingwarnings) { /* Don't print the line about the package to be removed if * that's the only line. */ - varbuf_end_str(&oemsgs); varbuf_add_str(aemsgs, _("; however:\n")); varbuf_add_varbuf(aemsgs, &oemsgs); } else { @@ -755,6 +753,7 @@ dependencies_ok(struct pkginfo *pkg, struct pkginfo *removing, progress_bytrigproc = canfixbytrig; varbuf_destroy(&oemsgs); - debug(dbg_depcon,"ok %d msgs >>%.*s<<", ok, (int)aemsgs->used, aemsgs->buf); + debug(dbg_depcon, "ok %d msgs >>%s<<", ok, varbuf_str(aemsgs)); + return ok; } diff --git a/src/main/remove.c b/src/main/remove.c index 88c01a2..f36d7f9 100644 --- a/src/main/remove.c +++ b/src/main/remove.c @@ -151,14 +151,12 @@ void deferred_remove(struct pkginfo *pkg) { return; } else if (rok == DEP_CHECK_HALT) { sincenothing= 0; - varbuf_end_str(&raemsgs); notice(_("dependency problems prevent removal of %s:\n%s"), - pkg_name(pkg, pnaw_nonambig), raemsgs.buf); + pkg_name(pkg, pnaw_nonambig), varbuf_str(&raemsgs)); ohshit(_("dependency problems - not removing")); } else if (raemsgs.used) { - varbuf_end_str(&raemsgs); notice(_("%s: dependency problems, but removing anyway as you requested:\n%s"), - pkg_name(pkg, pnaw_nonambig), raemsgs.buf); + pkg_name(pkg, pnaw_nonambig), varbuf_str(&raemsgs)); } varbuf_destroy(&raemsgs); sincenothing= 0; @@ -290,7 +288,6 @@ removal_bulk_remove_files(struct pkginfo *pkg) varbuf_set_str(&fnvb, dpkg_fsys_get_dir()); varbuf_add_str(&fnvb, usenode->name); - varbuf_end_str(&fnvb); varbuf_snapshot(&fnvb, &fnvb_state); is_dir = stat(fnvb.buf, &stab) == 0 && S_ISDIR(stab.st_mode); @@ -335,18 +332,15 @@ removal_bulk_remove_files(struct pkginfo *pkg) varbuf_rollback(&fnvb_state); varbuf_add_str(&fnvb, DPKGTEMPEXT); - varbuf_end_str(&fnvb); debug(dbg_eachfiledetail, "removal_bulk cleaning temp '%s'", fnvb.buf); path_remove_tree(fnvb.buf); varbuf_rollback(&fnvb_state); varbuf_add_str(&fnvb, DPKGNEWEXT); - varbuf_end_str(&fnvb); debug(dbg_eachfiledetail, "removal_bulk cleaning new '%s'", fnvb.buf); path_remove_tree(fnvb.buf); varbuf_rollback(&fnvb_state); - varbuf_end_str(&fnvb); debug(dbg_eachfiledetail, "removal_bulk removing '%s'", fnvb.buf); if (!rmdir(fnvb.buf) || errno == ENOENT || errno == ELOOP) continue; @@ -419,7 +413,6 @@ static void removal_bulk_remove_leftover_dirs(struct pkginfo *pkg) { varbuf_set_str(&fnvb, dpkg_fsys_get_dir()); varbuf_add_str(&fnvb, usenode->name); - varbuf_end_str(&fnvb); if (!stat(fnvb.buf,&stab) && S_ISDIR(stab.st_mode)) { debug(dbg_eachfiledetail, "removal_bulk is a directory"); @@ -535,16 +528,20 @@ static void removal_bulk_remove_configfiles(struct pkginfo *pkg) { static struct varbuf fnvb, removevb; struct varbuf_state removevb_state; - if (conff->obsolete) { + if (conff->flags & CONFFILE_OBSOLETE) { debug(dbg_conffdetail, "removal_bulk conffile obsolete %s", conff->name); } varbuf_reset(&fnvb); rc = conffderef(pkg, &fnvb, conff->name); - debug(dbg_conffdetail, "removal_bulk conffile '%s' (= '%s')", - conff->name, rc == -1 ? "<rc == -1>" : fnvb.buf); - if (rc == -1) + if (rc < 0) { + debug(dbg_conffdetail, "removal_bulk conffile '%s' (rc < %d)", + conff->name, rc); continue; + } else { + debug(dbg_conffdetail, "removal_bulk conffile '%s' (deref '%s')", + conff->name, fnvb.buf); + } namenode = fsys_hash_find_node(conff->name, FHFF_NONE); usenode = namenodetouse(namenode, pkg, &pkg->installed); @@ -559,7 +556,6 @@ static void removal_bulk_remove_configfiles(struct pkginfo *pkg) { *p = '\0'; varbuf_reset(&removevb); varbuf_add_dir(&removevb, fnvb.buf); - varbuf_end_str(&removevb); varbuf_snapshot(&removevb, &removevb_state); dsd= opendir(removevb.buf); @@ -602,7 +598,6 @@ static void removal_bulk_remove_configfiles(struct pkginfo *pkg) { yes_remove: varbuf_rollback(&removevb_state); varbuf_add_str(&removevb, de->d_name); - varbuf_end_str(&removevb); debug(dbg_conffdetail, "removal_bulk conffile dsd entry removing '%s'", removevb.buf); if (unlink(removevb.buf) && errno != ENOENT && errno != ENOTDIR) diff --git a/src/main/script.c b/src/main/script.c index 017d92e..e9aee0b 100644 --- a/src/main/script.c +++ b/src/main/script.c @@ -136,9 +136,8 @@ maintscript_pre_exec(struct command *cmd) varbuf_add_char(&args, ' '); varbuf_add_str(&args, *argv); } - varbuf_end_str(&args); debug(dbg_scripts, "fork/exec %s (%s )", cmd->filename, - args.buf); + varbuf_str(&args)); varbuf_destroy(&args); } if (instdirlen == 0 || in_force(FORCE_SCRIPT_CHROOTLESS)) diff --git a/src/main/select.c b/src/main/select.c index d71202e..6e81d97 100644 --- a/src/main/select.c +++ b/src/main/select.c @@ -156,7 +156,6 @@ setselections(const char *const *argv) ohshit(_("unexpected end of file in package name at line %d"), lno); if (c == '\n') ohshit(_("unexpected end of line in package name at line %d"),lno); } - varbuf_end_str(&namevb); while (c != EOF && c_isspace(c)) { c= getchar(); @@ -170,28 +169,29 @@ setselections(const char *const *argv) varbuf_add_char(&selvb, c); c= getchar(); } - varbuf_end_str(&selvb); while (c != EOF && c != '\n') { c= getchar(); if (!c_isspace(c)) ohshit(_("unexpected data after package and selection at line %d"),lno); } - pkg = pkg_spec_parse_pkg(namevb.buf, &err); + pkg = pkg_spec_parse_pkg(varbuf_str(&namevb), &err); if (pkg == NULL) ohshit(_("illegal package name at line %d: %.250s"), lno, err.str); if (!pkg_is_informative(pkg, &pkg->installed) && !pkg_is_informative(pkg, &pkg->available)) { db_possibly_outdated = true; - warning(_("package not in status nor available database at line %d: %.250s"), lno, namevb.buf); + warning(_("package not in status nor available database at line %d: %.250s"), + lno, varbuf_str(&namevb)); lno++; continue; } - nv = namevalue_find_by_name(wantinfos, selvb.buf); + nv = namevalue_find_by_name(wantinfos, varbuf_str(&selvb)); if (nv == NULL) - ohshit(_("unknown wanted status at line %d: %.250s"), lno, selvb.buf); + ohshit(_("unknown wanted status at line %d: %.250s"), + lno, varbuf_str(&selvb)); pkg_set_want(pkg, nv->value); if (c == EOF) break; diff --git a/src/main/trigproc.c b/src/main/trigproc.c index 125eb02..dc8dc83 100644 --- a/src/main/trigproc.c +++ b/src/main/trigproc.c @@ -434,17 +434,17 @@ trigproc(struct pkginfo *pkg, enum trigproc_type type) } sincenothing = 0; - varbuf_end_str(&depwhynot); notice(_("dependency problems prevent processing " "triggers for %s:\n%s"), - pkg_name(pkg, pnaw_nonambig), depwhynot.buf); + pkg_name(pkg, pnaw_nonambig), + varbuf_str(&depwhynot)); varbuf_destroy(&depwhynot); ohshit(_("dependency problems - leaving triggers unprocessed")); } else if (depwhynot.used) { - varbuf_end_str(&depwhynot); notice(_("%s: dependency problems, but processing " "triggers anyway as you requested:\n%s"), - pkg_name(pkg, pnaw_nonambig), depwhynot.buf); + pkg_name(pkg, pnaw_nonambig), + varbuf_str(&depwhynot)); varbuf_destroy(&depwhynot); } @@ -462,7 +462,6 @@ trigproc(struct pkginfo *pkg, enum trigproc_type type) varbuf_add_char(&namesarg, ' '); varbuf_add_str(&namesarg, tp->name); } - varbuf_end_str(&namesarg); /* Setting the status to half-configured * causes modstatdb_note to clear pending triggers. */ @@ -472,7 +471,7 @@ trigproc(struct pkginfo *pkg, enum trigproc_type type) if (!f_noact) { sincenothing = 0; maintscript_postinst(pkg, "triggered", - namesarg.buf + 1, NULL); + varbuf_str(&namesarg) + 1, NULL); } post_postinst_tasks(pkg, PKG_STAT_INSTALLED); diff --git a/src/main/unpack.c b/src/main/unpack.c index 02c2681..e57a6e3 100644 --- a/src/main/unpack.c +++ b/src/main/unpack.c @@ -244,10 +244,9 @@ pkg_check_depcon(struct pkginfo *pkg, const char *pfilename) while (fixbytrigaw->trigaw.head) trigproc(fixbytrigaw->trigaw.head->pend, TRIGPROC_REQUIRED); } else { - varbuf_end_str(&depprobwhy); notice(_("regarding %s containing %s, pre-dependency problem:\n%s"), pfilename, pkgbin_name(pkg, &pkg->available, pnaw_nonambig), - depprobwhy.buf); + varbuf_str(&depprobwhy)); if (!force_depends(dsearch->list)) ohshit(_("pre-dependency problem - not installing %.250s"), pkgbin_name(pkg, &pkg->available, pnaw_nonambig)); @@ -608,7 +607,7 @@ pkg_remove_conffile_on_upgrade(struct pkginfo *pkg, struct fsys_namenode *nameno usenode = namenodetouse(namenode, pkg, &pkg->installed); rc = conffderef(pkg, &cdr, usenode->name); - if (rc == -1) { + if (rc < 0) { debug(dbg_conffdetail, "%s: '%s' conffile dereference error: %s", __func__, namenode->name, strerror(errno)); namenode->oldhash = EMPTYHASHFLAG; @@ -636,7 +635,6 @@ pkg_remove_conffile_on_upgrade(struct pkginfo *pkg, struct fsys_namenode *nameno /* Remove DPKGDISTEXT variant if still present. */ varbuf_rollback(&cdrext_state); varbuf_add_str(&cdrext, DPKGDISTEXT); - varbuf_end_str(&cdrext); if (unlink(cdrext.buf) < 0 && errno != ENOENT) warning(_("%s: failed to remove '%.250s': %s"), @@ -661,7 +659,6 @@ pkg_remove_conffile_on_upgrade(struct pkginfo *pkg, struct fsys_namenode *nameno /* Otherwise, preserve the modified conffile. */ varbuf_rollback(&cdrext_state); varbuf_add_str(&cdrext, DPKGOLDEXT); - varbuf_end_str(&cdrext); printf(_("Obsolete conffile '%s' has been modified by you.\n"), cdr.buf); printf(_("Saving as %s ...\n"), cdrext.buf); @@ -710,7 +707,6 @@ pkg_remove_old_files(struct pkginfo *pkg, varbuf_rollback(&fname_state); varbuf_add_str(&fnamevb, usenode->name); - varbuf_end_str(&fnamevb); if (!stat(fnamevb.buf, &stab) && S_ISDIR(stab.st_mode)) { debug(dbg_eachfiledetail, "process_archive: %s is a directory", @@ -719,10 +715,10 @@ pkg_remove_old_files(struct pkginfo *pkg, continue; } - if (lstat(fnamevb.buf, &oldfs)) { + if (lstat(varbuf_str(&fnamevb), &oldfs)) { if (!(errno == ENOENT || errno == ELOOP || errno == ENOTDIR)) warning(_("could not stat old file '%.250s' so not deleting it: %s"), - fnamevb.buf, strerror(errno)); + varbuf_str(&fnamevb), strerror(errno)); continue; } if (S_ISDIR(oldfs.st_mode)) { @@ -732,7 +728,7 @@ pkg_remove_old_files(struct pkginfo *pkg, if (strcmp(usenode->name, "/.") == 0) continue; - if (rmdir(fnamevb.buf)) { + if (rmdir(varbuf_str(&fnamevb))) { warning(_("unable to delete old directory '%.250s': %s"), namenode->name, strerror(errno)); } else if ((namenode->flags & FNNF_OLD_CONFF)) { @@ -762,7 +758,7 @@ pkg_remove_old_files(struct pkginfo *pkg, /* If we can't stat the old or new file, or it's a directory, * we leave it up to the normal code. */ debug(dbg_eachfile, "process_archive: checking %s for same files on " - "upgrade/downgrade", fnamevb.buf); + "upgrade/downgrade", varbuf_str(&fnamevb)); for (cfile = newfiles_queue->head; cfile; cfile = cfile->next) { /* If the file has been filtered then treat it as if it didn't exist @@ -775,9 +771,8 @@ pkg_remove_old_files(struct pkginfo *pkg, varbuf_set_str(&cfilename, dpkg_fsys_get_dir()); varbuf_add_str(&cfilename, cfile->namenode->name); - varbuf_end_str(&cfilename); - if (lstat(cfilename.buf, &tmp_stat) == 0) { + if (lstat(varbuf_str(&cfilename), &tmp_stat) == 0) { struct file_ondisk_id *file_ondisk_id; file_ondisk_id = nfmalloc(sizeof(*file_ondisk_id)); @@ -800,11 +795,11 @@ pkg_remove_old_files(struct pkginfo *pkg, oldfs.st_ino == cfile->namenode->file_ondisk_id->id_ino) { if (sameas) warning(_("old file '%.250s' is the same as several new files! " - "(both '%.250s' and '%.250s')"), fnamevb.buf, + "(both '%.250s' and '%.250s')"), varbuf_str(&fnamevb), sameas->namenode->name, cfile->namenode->name); sameas = cfile; debug(dbg_eachfile, "process_archive: not removing %s, " - "since it matches %s", fnamevb.buf, cfile->namenode->name); + "since it matches %s", varbuf_str(&fnamevb), cfile->namenode->name); } } @@ -839,7 +834,7 @@ pkg_remove_old_files(struct pkginfo *pkg, trig_path_activate(usenode, pkg); - if (secure_unlink_statted(fnamevb.buf, &oldfs)) { + if (secure_unlink_statted(varbuf_str(&fnamevb), &oldfs)) { warning(_("unable to securely remove old file '%.250s': %s"), namenode->name, strerror(errno)); } @@ -924,9 +919,11 @@ pkg_update_fields(struct pkginfo *pkg, struct fsys_namenode_queue *newconffiles) newiconff->next = NULL; newiconff->name = nfstrsave(cfile->namenode->name); newiconff->hash = nfstrsave(cfile->namenode->oldhash); - newiconff->obsolete = !!(cfile->namenode->flags & FNNF_OBS_CONFF); - newiconff->remove_on_upgrade = !!( - cfile->namenode->flags & FNNF_RM_CONFF_ON_UPGRADE); + newiconff->flags = CONFFILE_NONE; + if (cfile->namenode->flags & FNNF_OBS_CONFF) + newiconff->flags |= CONFFILE_OBSOLETE; + if (cfile->namenode->flags & FNNF_RM_CONFF_ON_UPGRADE) + newiconff->flags |= CONFFILE_REMOVE_ON_UPGRADE; *iconffileslastp = newiconff; iconffileslastp = &newiconff->next; } @@ -1036,9 +1033,8 @@ pkg_disappear_others(struct pkginfo *pkg) if (depisok(pdep->up, &depprobwhy, NULL, NULL, false)) continue; - varbuf_end_str(&depprobwhy); debug(dbg_veryverbose,"process_archive cannot disappear: %s", - depprobwhy.buf); + varbuf_str(&depprobwhy)); break; } if (!pdep) { @@ -1060,10 +1056,9 @@ pkg_disappear_others(struct pkginfo *pkg) if (depisok(pdep->up, &depprobwhy, NULL, NULL, false)) continue; - varbuf_end_str(&depprobwhy); debug(dbg_veryverbose, "process_archive cannot disappear (provides %s): %s", - providecheck->list->ed->name, depprobwhy.buf); + providecheck->list->ed->name, varbuf_str(&depprobwhy)); goto break_from_both_loops_at_once; } } @@ -1193,8 +1188,7 @@ pkg_remove_backup_files(struct pkginfo *pkg, struct fsys_namenode_list *newfiles varbuf_rollback(&fnametmp_state); varbuf_add_str(&fnametmpvb, usenode->name); varbuf_add_str(&fnametmpvb, DPKGTEMPEXT); - varbuf_end_str(&fnametmpvb); - path_remove_tree(fnametmpvb.buf); + path_remove_tree(varbuf_str(&fnametmpvb)); } } diff --git a/src/main/verify.c b/src/main/verify.c index 6a5d733..68b8493 100644 --- a/src/main/verify.c +++ b/src/main/verify.c @@ -192,11 +192,10 @@ verify_package(struct pkginfo *pkg) varbuf_set_str(&filename, dpkg_fsys_get_dir()); varbuf_add_str(&filename, fnn->name); - varbuf_end_str(&filename); memset(&checks, 0, sizeof(checks)); - if (verify_file(filename.buf, fnn, pkg, &checks) > 0) + if (verify_file(varbuf_str(&filename), fnn, pkg, &checks) > 0) verify_output(fnn, &checks); } |