summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-06-12bc: fix for mul overflow in scale calculation in a^bDenys Vlasenko
function old new delta zbc_num_p 516 518 +2 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-06httpd_post_upload.cgi: use mktemp to avoid $RANDOMSergey Ponomarev
The $RANDOM variable may be disabled on ash compilation but we can safelly use mktemp instead. Signed-off-by: Sergey Ponomarev <stokito@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-06ash: save Ron's patch from oblivionDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-06shells: do not allow bare "read" in non-bash compat configsDenys Vlasenko
On Sat, Feb 9, 2019 Cristian Ionescu-Idbohrn wrote: > In my case (at work), I have to watch and prevent people from doing > unportable things. For me, that's a burden. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-05ash: add process substitution in bash-compatibility modeRon Yorston
Process substitution is a Korn shell feature that's also available in bash and some other shells. This patch implements process substitution in ash when ASH_BASH_COMPAT is enabled. function old new delta argstr 1386 1522 +136 strtodest - 52 +52 readtoken1 3346 3392 +46 .rodata 183206 183250 +44 unwindredir - 28 +28 cmdloop 365 372 +7 static.spclchars 10 12 +2 cmdputs 380 367 -13 exitreset 86 69 -17 evalcommand 1754 1737 -17 varvalue 675 634 -41 ------------------------------------------------------------------------------ (add/remove: 2/0 grow/shrink: 5/4 up/down: 315/-88) Total: 227 bytes text data bss dec hex filename 953967 4219 1904 960090 ea65a busybox_old 954192 4219 1904 960315 ea73b busybox_unstripped v2: Replace array of file descriptors with a linked list. Include tests that were unaccountably omitted from v1. v3: Update linked list code to the intended version. v4: Change order of conditional code in cmdputs(). v5: Use existing popredir() mechanism to manage file descriptors. v6: Rebase to latest version of BusyBox ash. Reduce code churn. Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-05run-parts: permit dot later in file nameJán Sáreník
See https://gist.github.com/andyshinn/3ae01fa13cb64c9d36e7#gistcomment-2044506 To test: mkdir /tmp/testrp printf "#!/bin/sh\necho test\n" > /tmp/testrp/test.sh chmod a+x /tmp/testrp/* busybox run-parts /tmp/testrp test mv /tmp/testrp/test.sh /tmp/testrp/.test.sh busybox run-parts /tmp/testrp # no output function old new delta act 190 200 +10 Signed-off-by: Ján Sáreník <jajomojo@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-05build system: use SOURCE_DATE_EPOCH for timestamp if availablePaul Spooren
The SOURCE_DATE_EPOCH is an effort of the Reproducible Builds organization to make timestamps/build dates in compiled tools deterministic over several repetitive builds. Busybox shows by default the build date timestamp which changes whenever compiled. To have a reasonable accurate build date while staying reproducible, it's possible to use the *date of last source modification* rather than the current time and date. Further information on SOURCE_DATE_EPOCH are available online [1]. This patch modifies `confdata.c` so that the content of the SOURCE_DATE_EPOCH env variable is used as timestamp. To be independent of different timezones between builds, whenever SOURCE_DATE_EPOCH is defined the GMT time is used. [1]: https://reproducible-builds.org/docs/source-date-epoch/ Signed-off-by: Paul Spooren <mail@aparcar.org> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-05shell: also do word splitting when -d DELIM is usedEicke Herbertz
The original commit 3bef5d89b0 introduced an additional check for an unset `opt_d` before doing word splitting. I'm unsure why it's there in the first place, but the commit message also describes a different behaviour than what -d actually does in bash, while the code mostly does the right thing. `opt_d` sets the line delimiter for read to stop reading and should not affect word splitting. Testcase: $ echo qwe rty | { read -d Z a b; echo a:$a b:$b; } a:qwe b:rty function old new delta shell_builtin_read 1314 1304 -10 Signed-off-by: Eicke Herbertz <wolletd@posteo.de> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-05gen_build_files: Use C locale when calling sed on globbed filesKhem Raj
When include/applets.h is re-generated it generates code macros in include/applets.h e.g. IF_XZCAT(APPLET_ODDNAME(xzcat, unxz, BB_DIR_USR_BIN, BB_SUID_DROP, xzcat)) ... IF_CHVT(APPLET_NOEXEC(chvt, chvt, BB_DIR_USR_BIN, BB_SUID_DROP, chvt)) ... sed is used to process source files like below to feed into this header generation sed -n 's@^//applet:@@p' "$srctree"/*/*.c "$srctree"/*/*/*.c this means we let shell decide the order of .c files being fed into sed tool, applets.h has code snippets thats generated out of code fragments from these .c files and the order of the generated code depends on the order of .c files being fed to sed and then piped to generate tool, even though the generated code is logically same, it does result in re-odered code in applets.h based on which shell was used during build on exact busybox sources since sort order is different based on chosen locale and also default shell being bash or dash This sets the environment variable LC_ALL to the value C, which will enforce bytewise sorting, irrespective of the shell Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-05udhcpc: revert deprecation message for -VDenys Vlasenko
"-x vendor:VENDOR" will not be a trivial replacement of it: (1) by default, we do send a vendor string ("udhcp BB_VER"), will need code to preserve the default. (2) -V '' currently disables vendor string. -x vendor:'' would not easily achieve that: it adds no option at all (string options can't be empty), and default (1) would trigger. To avoid that, we will need yet another hack to detect -x vendor:'' and interpret that as "no vendor string at all". IOW: removing -V is likely to increase code size, not decrease. function old new delta udhcpc_main 2563 2555 -8 .rodata 103251 103198 -53 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-61) Total: -61 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-05runsv: code shrink: use single handler function for SIGTERM and SIGCHLDDenys Vlasenko
function old new delta s_chld_term - 36 +36 runsv_main 1677 1662 -15 s_child 22 - -22 s_term 29 - -29 ------------------------------------------------------------------------------ (add/remove: 1/2 grow/shrink: 0/1 up/down: 36/-66) Total: -30 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-05runsv: robustify signal handling - SIGTERM to child between vfork and exec ↵Denys Vlasenko
could mess things up While at it, rename bb_signals_recursive_norestart() to bb_signals_norestart(): "recursive" was implying we are setting SA_NODEFER allowing signal handler to be entered recursively, but we do not do that. function old new delta bb_signals_norestart - 70 +70 startservice 380 394 +14 bb_signals_recursive_norestart 70 - -70 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 1/0 up/down: 84/-70) Total: 14 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-05tcp/udpsvd: robustify SIGCHLD handlingDenys Vlasenko
function old new delta if_verbose_print_connection_status - 40 +40 tcpudpsvd_main 1798 1794 -4 connection_status 31 - -31 ------------------------------------------------------------------------------ (add/remove: 1/1 grow/shrink: 0/1 up/down: 40/-35) Total: 5 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-05svlogd: if processor's stdin can not be opened, do not try ad infinitumDenys Vlasenko
function old new delta processorstart 426 423 -3 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-05ls: trim --help textDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-05libbb: correct the name of is_TERM_dumb()Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-04ls: don't output any colors with TERM=dumbSören Tempel
The TERM variable is usually set to "dumb" to indicate that the terminal does not support any ANSI escape sequences. Presently, ls does not honor this variable and outputs colors anyhow which results in unreadable output, unless the user explicitly disables colors using `ls --color=never`. The rational behind this change is that ls should "just work" by default, even on dumb terminals. For this reason, this patch adds a check which additionally consults the TERM variable before printing any colors. This is analogous to the existing check for ensuring that standard output is a tty. As such, colors can still be forced with `--color=force`, even if TERM is set to dumb. function old new delta is_TERM_dumb - 40 +40 ls_main 579 598 +19 .rodata 103246 103251 +5 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 2/0 up/down: 64/0) Total: 64 bytes Signed-off-by: Sören Tempel <soeren+git@soeren-tempel.net> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-03udhcpd: don't hardcode treating .0 and .255 speciallySeth David Schoen
Even following current Internet standards, it can be perfectly legitimate to issue IPv4 addresses that end in .0 or .255 via DHCP -- this can happen whenever the network is larger than /8. For example, 10.3.4.0 and 10.3.4.255 are legitimate host addresses in 10/8 or 10.3/16. (We also want to be able to issue .0 addresses in smaller networks following our proposed kernel patch and standards changes.) This behavior is already fully controllable by the user, simply by setting start_ip and end_ip correctly. Users who don't want to issue .0 or .255 should set start_ip greater than .0 or end_ip less than .255 and udhcpd will already respect these bounds. (This is also the case for other DHCP servers -- the recommended example configurations will default to a lower bound starting with .1 or some other value, which is typically appropriate, but the user is still allowed to change this to .0 -- or to a range that overlaps a .0 or .255 address -- if so desired.) Signed-off-by: Seth David Schoen <schoen@loyalty.org> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-03cpio: fix "cpio -d -p A/B/C"Denys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-03nslookup: mention QUERY_TYPE SRVPaul Spooren
SRV lookups are supported since "6b4960155 nslookup: implement support for SRV records" and should therefore be mentioned as a possible QUERY_TYPE in the help message. Signed-off-by: Paul Spooren <mail@aparcar.org> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-03udhcpc[6]: on SIGUSR1, do not go from rebind to renew stateDenys Vlasenko
function old new delta udhcpc6_main 2628 2636 +8 udhcpc_main 2556 2563 +7 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 15/0) Total: 15 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-03udhcpc: code shrink, rename functions, no logic changesDenys Vlasenko
function old new delta d4_run_script - 739 +739 d4_recv_raw_packet - 484 +484 d4_run_script_deconfig - 12 +12 perform_release 207 200 -7 udhcpc_main 2598 2556 -42 udhcp_recv_raw_packet 484 - -484 udhcp_run_script 739 - -739 ------------------------------------------------------------------------------ (add/remove: 3/2 grow/shrink: 0/2 up/down: 1235/-1272) Total: -37 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-03examples/udhcp/udhcpd.conf: updateDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-03udhcp: shrink arpping()Denys Vlasenko
function old new delta .rodata 103249 103246 -3 arpping 437 420 -17 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-20) Total: -20 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-03udhcp: convert log1s() macro to functionDenys Vlasenko
function old new delta log1s - 15 +15 udhcp_recv_kernel_packet 134 125 -9 d6_recv_kernel_packet 118 109 -9 change_listen_mode 280 271 -9 send_packet 162 141 -21 udhcpc_main 2625 2598 -27 udhcpc6_main 2655 2628 -27 d6_recv_raw_packet 255 216 -39 udhcp_recv_raw_packet 562 484 -78 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 0/8 up/down: 15/-219) Total: -204 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-03udhcpc[6]: when renewing, send 1 packet (not 3), on failure go back to BOUNDDenys Vlasenko
This restores old behavior where we slept for 1/2 of lease, then tried renewing, thel slept for 1/4 and tried again, etc. But now we will NOT be listening to all packets for 1/2 of lease time, processing (rejecting) everyone else's DHCP traffic. We'll go back to bound state, where we have no listening socket at all. function old new delta udhcpc6_main 2600 2655 +55 udhcpc_main 2608 2625 +17 .rodata 103250 103249 -1 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/1 up/down: 72/-1) Total: 71 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-02udhcpc[6]: remove superfluous "created raw socket" log messageDenys Vlasenko
function old new delta change_listen_mode 299 280 -19 .rodata 103272 103250 -22 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-41) Total: -41 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-02udhcpc: improve logs - show offer as it is receivedDenys Vlasenko
function old new delta udhcpc_main 2566 2608 +42 .rodata 103248 103272 +24 udhcp_recv_raw_packet 559 562 +3 d6_recv_raw_packet 254 255 +1 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 4/0 up/down: 70/0) Total: 70 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-02udhcpc[6]: close listening socket more eagerly (e.g. across script runs)Denys Vlasenko
function old new delta udhcpc6_main 2571 2600 +29 udhcpc_main 2588 2566 -22 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 29/-22) Total: 7 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-02udhcpc: get rid of client_data.fqdn fieldDenys Vlasenko
function old new delta attach_option 253 276 +23 udhcpc_main 2582 2588 +6 udhcpc6_main 2579 2571 -8 add_client_options 175 158 -17 udhcp_insert_new_option 169 138 -31 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/3 up/down: 29/-56) Total: -27 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-02udhcpc: remove deprecated -H/-h HOSTNAME options (9 years), deprecate -V VENDORDenys Vlasenko
function old new delta udhcpc_main 2563 2582 +19 dhcp_option_strings 294 301 +7 dhcp_optflags 80 82 +2 .rodata 103250 103248 -2 udhcpc_longopts 252 241 -11 add_client_options 209 175 -34 alloc_dhcp_option 59 - -59 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 3/3 up/down: 28/-106) Total: -78 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-02udhcpc: include client-id option in DECLINEs, even if it's a custom -x ↵Denys Vlasenko
61:HEX option client_data.vendorclass, .hostname and .fqdn probably need the same treatment: just insert them into the list of -x opts, get rid of if (client_data.vendorclass) udhcp_add_binary_option(packet, client_data.vendorclass); if (client_data.hostname) udhcp_add_binary_option(packet, client_data.hostname); if (client_data.fqdn) udhcp_add_binary_option(packet, client_data.fqdn); function old new delta udhcp_insert_new_option - 166 +166 perform_release 171 207 +36 perform_d6_release 227 259 +32 udhcpc6_main 2558 2580 +22 init_d6_packet 103 84 -19 udhcpc_main 2585 2564 -21 attach_option 397 253 -144 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 3/3 up/down: 256/-184) Total: 72 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-02vi: remove autoindent from otherwise empty linesRon Yorston
Lines that have no content apart from automatic indentation should be treated as empty when the user hits return or ESC. The implementation uses the global variable 'indentcol'. Usually this is zero. It can also be -1 to indicate an 'O' (open above) command, replacing the overloading of the tabstop option bit. A value greater than zero indicates that the current line has been autoindented to the given column (or that the autoindent has been adjusted with ctrl-D). Any other change to the line resets 'indentcol' to zero. Replace strspn() with ident_len(). The latter handles the unlikely case that it's called on the last line of a file which doesn't have a terminating newline. function old new delta char_insert 741 912 +171 indent_len - 42 +42 do_cmd 4781 4785 +4 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 2/0 up/down: 217/0) Total: 217 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-02vi: make autoindent respect expandtab settingRon Yorston
Autoindent took a copy of the indent from a neighbouring line, which may not have respected the expandtab setting. Determine the target column and construct a suitable indent. This will consist entirely of spaces if expandtab is enabled or an efficient combination of tabs and spaces otherwise. function old new delta char_insert 719 741 +22 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 22/0) Total: 22 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-02vi: make cursor positioning more vi compatibleRon Yorston
Commit 24effc7a3 (vi: cursor positioning after whole-line 'y') tried to save a few bytes by treating whole-line deletion the same as whole-line yank. If the deletion removed the last lines of the file the cursor was left beyond the end of the file. Revert the part of the commit related to whole-line deletion. Position the cursor on the first non-whitespace character of the line when whole lines are 'put'. function old new delta do_cmd 4759 4781 +22 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 22/0) Total: 22 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-02tail: do not lose the tail of old file if new file (-F) is detectedDenys Vlasenko
function old new delta tail_main 1619 1645 +26 .rodata 103246 103250 +4 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 30/0) Total: 30 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-02tail: fix typo in variable nameDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-02head,tail: trim --help textDenys Vlasenko
function old new delta packed_usage 33598 33560 -38 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-06-01udhcpc[6]: fix "untangle timeout and remaining lease" falloutDenys Vlasenko
As reported in bug 13776, before this fix the renew never times out. function old new delta udhcpc_main 2541 2585 +44 udhcpc6_main 2567 2558 -9 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 44/-9) Total: 35 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-05-07login: permit change expired password wit PAMMario Abajo
Signed-off-by: Mario Abajo <marioabajo@gmail.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-05-05httpd: add comment about faster rejection of denied IPsDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-05-05httpd: if no request was given at all, close the socket without generating ↵Denys Vlasenko
error page For one, an attacker can try to overload us by just opening and immediately closing tons of connections - reduce our work to the minimum for this case. function old new delta handle_incoming_and_exit 2172 2200 +28 .rodata 103225 103246 +21 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 2/0 up/down: 49/0) Total: 49 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-05-05httpd: no need to strcpy() when we only need to copy one byteDenys Vlasenko
function old new delta handle_incoming_and_exit 2161 2172 +11 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-05-04httpd: avoid extra stat() calls for "GET /dirname/" caseDenys Vlasenko
function old new delta parse_conf 1325 1332 +7 handle_incoming_and_exit 2173 2161 -12 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 7/-12) Total: -5 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-05-04httpd: avoid one stat() call for "GET /dirname" caseDenys Vlasenko
function old new delta handle_incoming_and_exit 2172 2173 +1 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-05-04httpd: support HEAD requests even in !CGI configDenys Vlasenko
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-05-04httpd: move proxy check before URL duplication and request type checkDenys Vlasenko
This makes proxy work for any type of requests. function old new delta handle_incoming_and_exit 2240 2172 -68 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-05-04httpd: cgi-bin support for DELETE, PUT, OPTIONS etc methodsAlexander Sack
function old new delta handle_incoming_and_exit 2217 2240 +23 static.request_POST - 5 +5 ------------------------------------------------------------------------------ (add/remove: 1/0 grow/shrink: 1/0 up/down: 28/0) Total: 28 bytes Signed-off-by: Alexander Sack <asac@pantacor.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-05-04vi: :wq/:x should warn if there are more files to editRon Yorston
':wq' or ':x' should issue a warning if there are more files to edit, unless they're followed by '!'. function old new delta colon 3911 3960 +49 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 49/0) Total: 49 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2021-05-04vi: cursor positioning after whole-line 'y'Ron Yorston
The 'y' command to yank text should leave the cursor at the start of the range. This mostly works correctly in BusyBox vi but not for whole-line yanks with backward motion, e.g. '2yk' to yank two lines backwards. In this case the cursor is left at the end of the range. Fix this by returning the actual range from find_range(). Cursor positioning following whole-line deletion is inconsistent between vim and traditional vi. For BusyBox vi chose the option that uses least code without being exactly compatible with either. Also, find_range() preserved the value of 'dot', the current cursor position. Since this isn't used by either caller of find_range() we can save a few bytes by not bothering. function old new delta do_cmd 4730 4759 +29 find_range 749 686 -63 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/1 up/down: 29/-63) Total: -34 bytes Signed-off-by: Ron Yorston <rmy@pobox.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>