aboutsummaryrefslogtreecommitdiff
path: root/editors
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2020-10-01 21:52:16 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2020-10-01 21:52:16 +0200
commit689d0650ab63425adaea26afe347015a204958ee (patch)
tree9c2e10b952cad6804359bc10ccc963ff138fc3d4 /editors
parent3c3928fc658bddacd4e540589868bc28a8e4ca0a (diff)
downloadbusybox-w32-689d0650ab63425adaea26afe347015a204958ee.tar.gz
busybox-w32-689d0650ab63425adaea26afe347015a204958ee.tar.bz2
busybox-w32-689d0650ab63425adaea26afe347015a204958ee.zip
libbb: shrink recursive_action() by reducing memory pressure
function old new delta recursive_action1 - 316 +316 file_action_grep 161 164 +3 add_to_prg_cache_if_socket 202 205 +3 depmod_main 509 511 +2 writeFileToTarball 488 489 +1 parse_module 281 282 +1 fileAction 207 208 +1 act 189 190 +1 add_to_dirlist 65 64 -1 writeTarFile 196 194 -2 uuidcache_init 47 45 -2 uuidcache_check_device 109 107 -2 true_action 8 6 -2 run_parts_main 310 308 -2 netstat_main 534 532 -2 lsusb_main 29 27 -2 lspci_main 45 43 -2 initial_scan 138 136 -2 grep_main 845 843 -2 find_main 482 480 -2 config_file_action 437 435 -2 chmod_main 142 140 -2 dirAction 14 10 -4 diff_main 1544 1540 -4 chown_main 154 148 -6 skip_dir 136 129 -7 dir_act 191 184 -7 recursive_action 453 69 -384 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 7/20 up/down: 328/-439) Total: -111 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'editors')
-rw-r--r--editors/diff.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/editors/diff.c b/editors/diff.c
index dc40ab4f1..280091756 100644
--- a/editors/diff.c
+++ b/editors/diff.c
@@ -803,11 +803,11 @@ struct dlist {
803}; 803};
804 804
805/* This function adds a filename to dl, the directory listing. */ 805/* This function adds a filename to dl, the directory listing. */
806static int FAST_FUNC add_to_dirlist(const char *filename, 806static int FAST_FUNC add_to_dirlist(struct recursive_state *state,
807 struct stat *sb UNUSED_PARAM, 807 const char *filename,
808 void *userdata, int depth UNUSED_PARAM) 808 struct stat *sb UNUSED_PARAM)
809{ 809{
810 struct dlist *const l = userdata; 810 struct dlist *const l = state->userData;
811 const char *file = filename + l->len; 811 const char *file = filename + l->len;
812 while (*file == '/') 812 while (*file == '/')
813 file++; 813 file++;
@@ -820,12 +820,12 @@ static int FAST_FUNC add_to_dirlist(const char *filename,
820/* If recursion is not set, this function adds the directory 820/* If recursion is not set, this function adds the directory
821 * to the list and prevents recursive_action from recursing into it. 821 * to the list and prevents recursive_action from recursing into it.
822 */ 822 */
823static int FAST_FUNC skip_dir(const char *filename, 823static int FAST_FUNC skip_dir(struct recursive_state *state,
824 struct stat *sb, void *userdata, 824 const char *filename,
825 int depth) 825 struct stat *sb)
826{ 826{
827 if (!(option_mask32 & FLAG(r)) && depth) { 827 if (!(option_mask32 & FLAG(r)) && state->depth) {
828 add_to_dirlist(filename, sb, userdata, depth); 828 add_to_dirlist(state, filename, sb);
829 return SKIP; 829 return SKIP;
830 } 830 }
831 if (!(option_mask32 & FLAG(N))) { 831 if (!(option_mask32 & FLAG(N))) {
@@ -833,7 +833,7 @@ static int FAST_FUNC skip_dir(const char *filename,
833 * which do not exist on the "other side". 833 * which do not exist on the "other side".
834 * Testcase: diff -r /tmp / 834 * Testcase: diff -r /tmp /
835 * (it would recurse deep into /proc without this code) */ 835 * (it would recurse deep into /proc without this code) */
836 struct dlist *const l = userdata; 836 struct dlist *const l = state->userData;
837 filename += l->len; 837 filename += l->len;
838 if (filename[0]) { 838 if (filename[0]) {
839 struct stat osb; 839 struct stat osb;
@@ -868,7 +868,7 @@ static void diffdir(char *p[2], const char *s_start)
868 * add_to_dirlist will remove it. */ 868 * add_to_dirlist will remove it. */
869 list[i].len = strlen(p[i]); 869 list[i].len = strlen(p[i]);
870 recursive_action(p[i], ACTION_RECURSE | ACTION_FOLLOWLINKS, 870 recursive_action(p[i], ACTION_RECURSE | ACTION_FOLLOWLINKS,
871 add_to_dirlist, skip_dir, &list[i], 0); 871 add_to_dirlist, skip_dir, &list[i]);
872 /* Sort dl alphabetically. 872 /* Sort dl alphabetically.
873 * GNU diff does this ignoring any number of trailing dots. 873 * GNU diff does this ignoring any number of trailing dots.
874 * We don't, so for us dotted files almost always are 874 * We don't, so for us dotted files almost always are