aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2021-09-17 01:13:58 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2021-09-17 01:18:31 +0200
commit59ac467dc6429a48522ef7fbe40fcd819563e49a (patch)
tree4b6af971b0ffc516294ff35ba7b5c1e99c6eadae
parent4958c18134eb7ad169cdaf22a9ad957ad4f4858c (diff)
downloadbusybox-w32-59ac467dc6429a48522ef7fbe40fcd819563e49a.tar.gz
busybox-w32-59ac467dc6429a48522ef7fbe40fcd819563e49a.tar.bz2
busybox-w32-59ac467dc6429a48522ef7fbe40fcd819563e49a.zip
libbb: eliminate a static data array in bb_mode_string()
function old new delta print_stat 861 869 +8 header_verbose_list_ar 73 77 +4 display_single 975 979 +4 header_verbose_list 237 239 +2 bb_mode_string 124 115 -9 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 4/1 up/down: 18/-9) Total: 9 bytes text data bss dec hex filename 1043136 559 5052 1048747 1000ab busybox_old 1043153 559 5020 1048732 10009c busybox_unstripped Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--archival/ar.c3
-rw-r--r--archival/libarchive/header_verbose_list.c5
-rw-r--r--coreutils/chmod.c3
-rw-r--r--coreutils/ls.c3
-rw-r--r--coreutils/stat.c6
-rw-r--r--include/libbb.h2
-rw-r--r--libbb/mode_string.c6
7 files changed, 16 insertions, 12 deletions
diff --git a/archival/ar.c b/archival/ar.c
index 71f949e79..320cbae72 100644
--- a/archival/ar.c
+++ b/archival/ar.c
@@ -196,9 +196,10 @@ static int write_ar_archive(archive_handle_t *handle)
196 196
197static void FAST_FUNC header_verbose_list_ar(const file_header_t *file_header) 197static void FAST_FUNC header_verbose_list_ar(const file_header_t *file_header)
198{ 198{
199 const char *mode = bb_mode_string(file_header->mode); 199 char mode[12];
200 char *mtime; 200 char *mtime;
201 201
202 bb_mode_string(mode, file_header->mode);
202 mtime = ctime(&file_header->mtime); 203 mtime = ctime(&file_header->mtime);
203 mtime[16] = ' '; 204 mtime[16] = ' ';
204 memmove(&mtime[17], &mtime[20], 4); 205 memmove(&mtime[17], &mtime[20], 4);
diff --git a/archival/libarchive/header_verbose_list.c b/archival/libarchive/header_verbose_list.c
index be5140f8b..a575a08a0 100644
--- a/archival/libarchive/header_verbose_list.c
+++ b/archival/libarchive/header_verbose_list.c
@@ -9,6 +9,7 @@ void FAST_FUNC header_verbose_list(const file_header_t *file_header)
9{ 9{
10 struct tm tm_time; 10 struct tm tm_time;
11 struct tm *ptm = &tm_time; //localtime(&file_header->mtime); 11 struct tm *ptm = &tm_time; //localtime(&file_header->mtime);
12 char modestr[12];
12 13
13#if ENABLE_FEATURE_TAR_UNAME_GNAME 14#if ENABLE_FEATURE_TAR_UNAME_GNAME
14 char uid[sizeof(int)*3 + 2]; 15 char uid[sizeof(int)*3 + 2];
@@ -29,7 +30,7 @@ void FAST_FUNC header_verbose_list(const file_header_t *file_header)
29 group = utoa(file_header->gid); 30 group = utoa(file_header->gid);
30 } 31 }
31 printf("%s %s/%s %9"OFF_FMT"u %4u-%02u-%02u %02u:%02u:%02u %s", 32 printf("%s %s/%s %9"OFF_FMT"u %4u-%02u-%02u %02u:%02u:%02u %s",
32 bb_mode_string(file_header->mode), 33 bb_mode_string(modestr, file_header->mode),
33 user, 34 user,
34 group, 35 group,
35 file_header->size, 36 file_header->size,
@@ -46,7 +47,7 @@ void FAST_FUNC header_verbose_list(const file_header_t *file_header)
46 localtime_r(&file_header->mtime, ptm); 47 localtime_r(&file_header->mtime, ptm);
47 48
48 printf("%s %u/%u %9"OFF_FMT"u %4u-%02u-%02u %02u:%02u:%02u %s", 49 printf("%s %u/%u %9"OFF_FMT"u %4u-%02u-%02u %02u:%02u:%02u %s",
49 bb_mode_string(file_header->mode), 50 bb_mode_string(modestr, file_header->mode),
50 (unsigned)file_header->uid, 51 (unsigned)file_header->uid,
51 (unsigned)file_header->gid, 52 (unsigned)file_header->gid,
52 file_header->size, 53 file_header->size,
diff --git a/coreutils/chmod.c b/coreutils/chmod.c
index 8e3e1387e..5832cc51b 100644
--- a/coreutils/chmod.c
+++ b/coreutils/chmod.c
@@ -91,8 +91,9 @@ static int FAST_FUNC fileAction(struct recursive_state *state,
91 || (OPT_CHANGED 91 || (OPT_CHANGED
92 && (statbuf->st_mode & 07777) != (newmode & 07777)) 92 && (statbuf->st_mode & 07777) != (newmode & 07777))
93 ) { 93 ) {
94 char modestr[12];
94 printf("mode of '%s' changed to %04o (%s)\n", fileName, 95 printf("mode of '%s' changed to %04o (%s)\n", fileName,
95 newmode & 07777, bb_mode_string(newmode)+1); 96 newmode & 07777, bb_mode_string(modestr, newmode)+1);
96 } 97 }
97 return TRUE; 98 return TRUE;
98 } 99 }
diff --git a/coreutils/ls.c b/coreutils/ls.c
index 9e8561606..9a1264e65 100644
--- a/coreutils/ls.c
+++ b/coreutils/ls.c
@@ -503,7 +503,8 @@ static NOINLINE unsigned display_single(const struct dnode *dn)
503 column += printf("%6"OFF_FMT"u ", (off_t) (dn->dn_blocks >> 1)); 503 column += printf("%6"OFF_FMT"u ", (off_t) (dn->dn_blocks >> 1));
504 if (opt & OPT_l) { 504 if (opt & OPT_l) {
505 /* long listing: show mode */ 505 /* long listing: show mode */
506 column += printf("%-10s ", (char *) bb_mode_string(dn->dn_mode)); 506 char modestr[12];
507 column += printf("%-10s ", (char *) bb_mode_string(modestr, dn->dn_mode));
507 /* long listing: show number of links */ 508 /* long listing: show number of links */
508 column += printf("%4lu ", (long) dn->dn_nlink); 509 column += printf("%4lu ", (long) dn->dn_nlink);
509 /* long listing: show user/group */ 510 /* long listing: show user/group */
diff --git a/coreutils/stat.c b/coreutils/stat.c
index a8393468e..2c2909e7e 100644
--- a/coreutils/stat.c
+++ b/coreutils/stat.c
@@ -339,7 +339,8 @@ static void FAST_FUNC print_stat(char *pformat, const char m,
339 strcat(pformat, "lo"); 339 strcat(pformat, "lo");
340 printf(pformat, (unsigned long) (statbuf->st_mode & (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO))); 340 printf(pformat, (unsigned long) (statbuf->st_mode & (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)));
341 } else if (m == 'A') { 341 } else if (m == 'A') {
342 printfs(pformat, bb_mode_string(statbuf->st_mode)); 342 char modestr[12];
343 printfs(pformat, bb_mode_string(modestr, statbuf->st_mode));
343 } else if (m == 'f') { 344 } else if (m == 'f') {
344 strcat(pformat, "lx"); 345 strcat(pformat, "lx");
345 printf(pformat, (unsigned long) statbuf->st_mode); 346 printf(pformat, (unsigned long) statbuf->st_mode);
@@ -702,6 +703,7 @@ static bool do_stat(const char *filename, const char *format)
702 bb_putchar('\n'); 703 bb_putchar('\n');
703# endif 704# endif
704 } else { 705 } else {
706 char modestr[12];
705 char *linkname = NULL; 707 char *linkname = NULL;
706 struct passwd *pw_ent; 708 struct passwd *pw_ent;
707 struct group *gw_ent; 709 struct group *gw_ent;
@@ -736,7 +738,7 @@ static bool do_stat(const char *filename, const char *format)
736 bb_putchar('\n'); 738 bb_putchar('\n');
737 printf("Access: (%04lo/%10.10s) Uid: (%5lu/%8s) Gid: (%5lu/%8s)\n", 739 printf("Access: (%04lo/%10.10s) Uid: (%5lu/%8s) Gid: (%5lu/%8s)\n",
738 (unsigned long) (statbuf.st_mode & (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)), 740 (unsigned long) (statbuf.st_mode & (S_ISUID|S_ISGID|S_ISVTX|S_IRWXU|S_IRWXG|S_IRWXO)),
739 bb_mode_string(statbuf.st_mode), 741 bb_mode_string(modestr, statbuf.st_mode),
740 (unsigned long) statbuf.st_uid, 742 (unsigned long) statbuf.st_uid,
741 (pw_ent != NULL) ? pw_ent->pw_name : "UNKNOWN", 743 (pw_ent != NULL) ? pw_ent->pw_name : "UNKNOWN",
742 (unsigned long) statbuf.st_gid, 744 (unsigned long) statbuf.st_gid,
diff --git a/include/libbb.h b/include/libbb.h
index 6727c22b2..b0312e5d4 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -442,7 +442,7 @@ void *xmmap_anon(size_t size) FAST_FUNC;
442 442
443 443
444//TODO: supply a pointer to char[11] buffer (avoid statics)? 444//TODO: supply a pointer to char[11] buffer (avoid statics)?
445extern const char *bb_mode_string(mode_t mode) FAST_FUNC; 445extern char *bb_mode_string(char buf[12], mode_t mode) FAST_FUNC;
446extern int is_directory(const char *name, int followLinks) FAST_FUNC; 446extern int is_directory(const char *name, int followLinks) FAST_FUNC;
447enum { /* cp.c, mv.c, install.c depend on these values. CAREFUL when changing them! */ 447enum { /* cp.c, mv.c, install.c depend on these values. CAREFUL when changing them! */
448 FILEUTILS_PRESERVE_STATUS = 1 << 0, /* -p */ 448 FILEUTILS_PRESERVE_STATUS = 1 << 0, /* -p */
diff --git a/libbb/mode_string.c b/libbb/mode_string.c
index 9a286f3ff..2b829016f 100644
--- a/libbb/mode_string.c
+++ b/libbb/mode_string.c
@@ -43,9 +43,8 @@ static const char type_chars[16] ALIGN1 = "?pc?d?b?-?l?s???";
43/***************************************** 0123456789abcdef */ 43/***************************************** 0123456789abcdef */
44static const char mode_chars[7] ALIGN1 = "rwxSTst"; 44static const char mode_chars[7] ALIGN1 = "rwxSTst";
45 45
46const char* FAST_FUNC bb_mode_string(mode_t mode) 46char* FAST_FUNC bb_mode_string(char buf[12], mode_t mode)
47{ 47{
48 static char buf[12];
49 char *p = buf; 48 char *p = buf;
50 49
51 int i, j, k; 50 int i, j, k;
@@ -83,9 +82,8 @@ static const char type_chars[16] ALIGN1 = "?pc?d?b?-?l?s???";
83/********************************** 0123456789abcdef */ 82/********************************** 0123456789abcdef */
84static const char mode_chars[7] ALIGN1 = "rwxSTst"; 83static const char mode_chars[7] ALIGN1 = "rwxSTst";
85 84
86const char* FAST_FUNC bb_mode_string(mode_t mode) 85char* FAST_FUNC bb_mode_string(char buf[12], mode_t mode)
87{ 86{
88 static char buf[12];
89 char *p = buf; 87 char *p = buf;
90 88
91 int i, j, k, m; 89 int i, j, k, m;