diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2021-09-17 01:13:58 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2021-09-17 01:18:31 +0200 |
commit | 59ac467dc6429a48522ef7fbe40fcd819563e49a (patch) | |
tree | 4b6af971b0ffc516294ff35ba7b5c1e99c6eadae | |
parent | 4958c18134eb7ad169cdaf22a9ad957ad4f4858c (diff) | |
download | busybox-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.c | 3 | ||||
-rw-r--r-- | archival/libarchive/header_verbose_list.c | 5 | ||||
-rw-r--r-- | coreutils/chmod.c | 3 | ||||
-rw-r--r-- | coreutils/ls.c | 3 | ||||
-rw-r--r-- | coreutils/stat.c | 6 | ||||
-rw-r--r-- | include/libbb.h | 2 | ||||
-rw-r--r-- | libbb/mode_string.c | 6 |
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 | ||
197 | static void FAST_FUNC header_verbose_list_ar(const file_header_t *file_header) | 197 | static 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)? |
445 | extern const char *bb_mode_string(mode_t mode) FAST_FUNC; | 445 | extern char *bb_mode_string(char buf[12], mode_t mode) FAST_FUNC; |
446 | extern int is_directory(const char *name, int followLinks) FAST_FUNC; | 446 | extern int is_directory(const char *name, int followLinks) FAST_FUNC; |
447 | enum { /* cp.c, mv.c, install.c depend on these values. CAREFUL when changing them! */ | 447 | enum { /* 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 */ |
44 | static const char mode_chars[7] ALIGN1 = "rwxSTst"; | 44 | static const char mode_chars[7] ALIGN1 = "rwxSTst"; |
45 | 45 | ||
46 | const char* FAST_FUNC bb_mode_string(mode_t mode) | 46 | char* 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 */ |
84 | static const char mode_chars[7] ALIGN1 = "rwxSTst"; | 83 | static const char mode_chars[7] ALIGN1 = "rwxSTst"; |
85 | 84 | ||
86 | const char* FAST_FUNC bb_mode_string(mode_t mode) | 85 | char* 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; |