From ba0478d30ef0932316e62480e5c338ae14168157 Mon Sep 17 00:00:00 2001 From: Martin Matuska Date: Mon, 2 Mar 2020 00:48:47 +0100 Subject: [PATCH] cpio/cpio.c: avoid calling strlen() for destdir twice --- cpio/cpio.c | 15 +++++++-------- cpio/cpio.h | 1 + 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cpio/cpio.c b/cpio/cpio.c index da5c39860..c9ffe76bd 100644 --- a/cpio/cpio.c +++ b/cpio/cpio.c @@ -737,7 +737,7 @@ file_to_archive(struct cpio *cpio, const char *srcpath) */ destpath = srcpath; if (cpio->destdir) { - len = strlen(cpio->destdir) + strlen(srcpath) + 8; + len = cpio->destdir_len + strlen(srcpath) + 8; if (len >= cpio->pass_destpath_alloc) { while (len >= cpio->pass_destpath_alloc) { cpio->pass_destpath_alloc += 512; @@ -1228,15 +1228,14 @@ mode_pass(struct cpio *cpio, const char *destdir) struct lafe_line_reader *lr; const char *p; int r; - size_t destdir_len; /* Ensure target dir has a trailing '/' to simplify path surgery. */ - destdir_len = strlen(destdir); - cpio->destdir = malloc(destdir_len + 8); - memcpy(cpio->destdir, destdir, destdir_len); - if (destdir_len == 0 || destdir[destdir_len - 1] != '/') - cpio->destdir[destdir_len++] = '/'; - cpio->destdir[destdir_len++] = '\0'; + cpio->destdir_len = strlen(destdir); + cpio->destdir = malloc(cpio->destdir_len + 8); + memcpy(cpio->destdir, destdir, cpio->destdir_len); + if (cpio->destdir_len == 0 || destdir[cpio->destdir_len - 1] != '/') + cpio->destdir[cpio->destdir_len++] = '/'; + cpio->destdir[cpio->destdir_len + 1] = '\0'; cpio->archive = archive_write_disk_new(); if (cpio->archive == NULL) diff --git a/cpio/cpio.h b/cpio/cpio.h index abf3628bf..8e7cc5fdd 100644 --- a/cpio/cpio.h +++ b/cpio/cpio.h @@ -64,6 +64,7 @@ struct cpio { int option_numeric_uid_gid; /* -n */ int option_rename; /* -r */ char *destdir; + size_t destdir_len; size_t pass_destpath_alloc; char *pass_destpath; int uid_override; -- 2.47.2