From f524ee7c6d1d95fa83f263eee126bae27b148782 Mon Sep 17 00:00:00 2001 From: Guillem Jover Date: Mon, 15 Sep 2014 16:04:56 +0200 Subject: dpkg: Normalize instdir by removing trailing '/' and '/.' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This gets rid of several inconsistencies and doubled «/» in syscalls and output messages. --- src/archives.c | 14 +++----------- src/configure.c | 2 -- src/main.c | 19 ++++++++++++++++--- src/unpack.c | 1 - 4 files changed, 19 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/archives.c b/src/archives.c index b8554d1a1..8f6b4cf81 100644 --- a/src/archives.c +++ b/src/archives.c @@ -390,7 +390,6 @@ tarobject_extract(struct tarcontext *tc, struct tar_entry *te, case TAR_FILETYPE_HARDLINK: varbuf_reset(&hardlinkfn); varbuf_add_str(&hardlinkfn, instdir); - varbuf_add_char(&hardlinkfn, '/'); linknode = findnamenode(te->linkname, 0); varbuf_add_str(&hardlinkfn, namenodetouse(linknode, tc->pkg, &tc->pkg->available)->name); @@ -832,7 +831,7 @@ tarobject(void *ctx, struct tar_entry *ti) st = &ti->stat; usenode = namenodetouse(nifd->namenode, tc->pkg, &tc->pkg->available); - usename = usenode->name + 1; /* Skip the leading '/'. */ + usename = usenode->name; trig_file_activate(usenode, tc->pkg); @@ -1196,16 +1195,14 @@ tar_writeback_barrier(struct fileinlist *files, struct pkginfo *pkg) for (cfile = files; cfile; cfile = cfile->next) { struct filenamenode *usenode; - const char *usename; int fd; if (!(cfile->namenode->flags & fnnf_deferred_fsync)) continue; usenode = namenodetouse(cfile->namenode, pkg, &pkg->available); - usename = usenode->name + 1; /* Skip the leading '/'. */ - setupfnamevbs(usename); + setupfnamevbs(usenode->name); fd = open(fnamenewvb.buf, O_WRONLY); if (fd < 0) @@ -1230,7 +1227,6 @@ tar_deferred_extract(struct fileinlist *files, struct pkginfo *pkg) { struct fileinlist *cfile; struct filenamenode *usenode; - const char *usename; tar_writeback_barrier(files, pkg); @@ -1241,9 +1237,8 @@ tar_deferred_extract(struct fileinlist *files, struct pkginfo *pkg) continue; usenode = namenodetouse(cfile->namenode, pkg, &pkg->available); - usename = usenode->name + 1; /* Skip the leading '/'. */ - setupfnamevbs(usename); + setupfnamevbs(usenode->name); if (cfile->namenode->flags & fnnf_deferred_fsync) { int fd; @@ -1646,11 +1641,8 @@ archivefiles(const char *const *argv) varbuf_reset(&fnamenewvb); varbuf_add_str(&fnamevb, instdir); - varbuf_add_char(&fnamevb, '/'); varbuf_add_str(&fnametmpvb, instdir); - varbuf_add_char(&fnametmpvb, '/'); varbuf_add_str(&fnamenewvb, instdir); - varbuf_add_char(&fnamenewvb, '/'); fnameidlu= fnamevb.used; ensure_diversions(); diff --git a/src/configure.c b/src/configure.c index 28094d8a0..304d4050a 100644 --- a/src/configure.c +++ b/src/configure.c @@ -716,8 +716,6 @@ conffderef(struct pkginfo *pkg, struct varbuf *result, const char *in) varbuf_reset(result); varbuf_add_str(result, instdir); - if (*in != '/') - varbuf_add_char(result, '/'); varbuf_add_str(result, in); varbuf_end_str(result); diff --git a/src/main.c b/src/main.c index 65c36268c..4ec4ecd06 100644 --- a/src/main.c +++ b/src/main.c @@ -46,6 +46,7 @@ #include #include #include +#include #include #include #include @@ -343,12 +344,24 @@ set_verify_format(const struct cmdinfo *cip, const char *value) badusage(_("unknown verify output format '%s'"), value); } +static void +set_instdir(const struct cmdinfo *cip, const char *value) +{ + char *new_instdir; + + new_instdir = m_strdup(value); + path_trim_slash_slashdot(new_instdir); + + instdir = new_instdir; +} + static void set_root(const struct cmdinfo *cip, const char *value) { char *p; - instdir= value; - m_asprintf(&p, "%s%s", value, ADMINDIR); + + set_instdir(cip, value); + m_asprintf(&p, "%s%s", instdir, ADMINDIR); admindir= p; } @@ -710,7 +723,7 @@ static const struct cmdinfo cmdinfos[]= { { "root", 0, 1, NULL, NULL, set_root, 0 }, { "abort-after", 0, 1, &errabort, NULL, set_integer, 0 }, { "admindir", 0, 1, NULL, &admindir, NULL, 0 }, - { "instdir", 0, 1, NULL, &instdir, 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 }, diff --git a/src/unpack.c b/src/unpack.c index 85164eeb1..151a35e9e 100644 --- a/src/unpack.c +++ b/src/unpack.c @@ -1084,7 +1084,6 @@ void process_archive(const char *filename) { varbuf_reset(&cfilename); varbuf_add_str(&cfilename, instdir); - varbuf_add_char(&cfilename, '/'); varbuf_add_str(&cfilename, cfile->namenode->name); varbuf_end_str(&cfilename); -- cgit v1.2.3