[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: [PATCH] cpio: code shrink
From: Ron Yorston <rmy () pobox ! com>
Date: 2022-02-10 12:57:43
Message-ID: 62050bc7.8NfDUxqWvOb54tXW%rmy () pobox ! com
[Download RAW message or body]
Use a generic llist_t to store the names of hardlinked files.
function old new delta
cpio_o 1140 1122 -18
Signed-off-by: Ron Yorston <rmy@pobox.com>
---
archival/cpio.c | 18 ++++--------------
1 file changed, 4 insertions(+), 14 deletions(-)
diff --git a/archival/cpio.c b/archival/cpio.c
index 7149782d7..836609fc3 100644
--- a/archival/cpio.c
+++ b/archival/cpio.c
@@ -223,13 +223,9 @@ static off_t cpio_pad4(off_t size)
* It's ok to exit instead of return. */
static NOINLINE int cpio_o(void)
{
- struct name_s {
- struct name_s *next;
- char name[1];
- };
struct inodes_s {
struct inodes_s *next;
- struct name_s *names;
+ llist_t *names;
struct stat st;
#if ENABLE_FEATURE_CPIO_RENUMBER_INODES
ino_t mapped_inode;
@@ -277,7 +273,6 @@ static NOINLINE int cpio_o(void)
/* Store hardlinks for later processing, dont output them */
if (!S_ISDIR(st.st_mode) && st.st_nlink > 1) {
- struct name_s *n;
struct inodes_s *l;
/* Do we have this hardlink remembered? */
@@ -302,11 +297,7 @@ static NOINLINE int cpio_o(void)
l = l->next;
}
/* Add new name to "l->names" list */
- n = xmalloc(sizeof(*n) + strlen(name));
- strcpy(n->name, name);
- n->next = l->names;
- l->names = n;
-
+ llist_add_to(&l->names, xstrdup(name));
free(line);
continue;
}
@@ -320,8 +311,7 @@ static NOINLINE int cpio_o(void)
if (links) {
/* Output hardlink's data */
st = links->st;
- name = links->names->name;
- links->names = links->names->next;
+ name = llist_pop(&links->names);
#if ENABLE_FEATURE_CPIO_RENUMBER_INODES
if (links->mapped_inode)
st.st_ino = links->mapped_inode;
@@ -332,7 +322,7 @@ static NOINLINE int cpio_o(void)
links = links->next;
else
st.st_size = 0;
- /* NB: we leak links->names and/or links,
+ /* NB: we leak links->names->name and/or links,
* this is intended (we exit soon anyway) */
} else {
/* If no (more) hardlinks to output,
--
2.34.1
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic