aboutsummaryrefslogtreecommitdiff
path: root/editors/ed.c
diff options
context:
space:
mode:
authorJames Byrne <james.byrne@origamienergy.com>2019-07-02 11:35:03 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2019-07-02 11:35:03 +0200
commit6937487be73cd4563b876413277a295a5fe2f32c (patch)
treef16cc9999a7c827891e6ec8d99c699fc791008ee /editors/ed.c
parentcaecfdc20d450686cd1f7e9b5f650322f894b3c2 (diff)
downloadbusybox-w32-6937487be73cd4563b876413277a295a5fe2f32c.tar.gz
busybox-w32-6937487be73cd4563b876413277a295a5fe2f32c.tar.bz2
busybox-w32-6937487be73cd4563b876413277a295a5fe2f32c.zip
libbb: reduce the overhead of single parameter bb_error_msg() calls
Back in 2007, commit 0c97c9d43707 ("'simple' error message functions by Loic Grenie") introduced bb_simple_perror_msg() to allow for a lower overhead call to bb_perror_msg() when only a string was being printed with no parameters. This saves space for some CPU architectures because it avoids the overhead of a call to a variadic function. However there has never been a simple version of bb_error_msg(), and since 2007 many new calls to bb_perror_msg() have been added that only take a single parameter and so could have been using bb_simple_perror_message(). This changeset introduces 'simple' versions of bb_info_msg(), bb_error_msg(), bb_error_msg_and_die(), bb_herror_msg() and bb_herror_msg_and_die(), and replaces all calls that only take a single parameter, or use something like ("%s", arg), with calls to the corresponding 'simple' version. Since it is likely that single parameter calls to the variadic functions may be accidentally reintroduced in the future a new debugging config option WARN_SIMPLE_MSG has been introduced. This uses some macro magic which will cause any such calls to generate a warning, but this is turned off by default to avoid use of the unpleasant macros in normal circumstances. This is a large changeset due to the number of calls that have been replaced. The only files that contain changes other than simple substitution of function calls are libbb.h, libbb/herror_msg.c, libbb/verror_msg.c and libbb/xfuncs_printf.c. In miscutils/devfsd.c, networking/udhcp/common.h and util-linux/mdev.c additonal macros have been added for logging so that single parameter and multiple parameter logging variants exist. The amount of space saved varies considerably by architecture, and was found to be as follows (for 'defconfig' using GCC 7.4): Arm: -92 bytes MIPS: -52 bytes PPC: -1836 bytes x86_64: -938 bytes Note that for the MIPS architecture only an exception had to be made disabling the 'simple' calls for 'udhcp' (in networking/udhcp/common.h) because it made these files larger on MIPS. Signed-off-by: James Byrne <james.byrne@origamienergy.com> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'editors/ed.c')
-rw-r--r--editors/ed.c34
1 files changed, 17 insertions, 17 deletions
diff --git a/editors/ed.c b/editors/ed.c
index 1a36add39..d3ae8da92 100644
--- a/editors/ed.c
+++ b/editors/ed.c
@@ -165,7 +165,7 @@ static NOINLINE int searchLines(const char *str, int num1, int num2)
165 165
166 if (*str == '\0') { 166 if (*str == '\0') {
167 if (searchString[0] == '\0') { 167 if (searchString[0] == '\0') {
168 bb_error_msg("no previous search string"); 168 bb_simple_error_msg("no previous search string");
169 return 0; 169 return 0;
170 } 170 }
171 str = searchString; 171 str = searchString;
@@ -228,7 +228,7 @@ static const char* getNum(const char *cp, smallint *retHaveNum, int *retNum)
228 case '\'': 228 case '\'':
229 cp++; 229 cp++;
230 if ((unsigned)(*cp - 'a') >= 26) { 230 if ((unsigned)(*cp - 'a') >= 26) {
231 bb_error_msg("bad mark name"); 231 bb_simple_error_msg("bad mark name");
232 return NULL; 232 return NULL;
233 } 233 }
234 haveNum = TRUE; 234 haveNum = TRUE;
@@ -314,7 +314,7 @@ static int insertLine(int num, const char *data, int len)
314 LINE *newLp, *lp; 314 LINE *newLp, *lp;
315 315
316 if ((num < 1) || (num > lastNum + 1)) { 316 if ((num < 1) || (num > lastNum + 1)) {
317 bb_error_msg("inserting at bad line number"); 317 bb_simple_error_msg("inserting at bad line number");
318 return FALSE; 318 return FALSE;
319 } 319 }
320 320
@@ -384,7 +384,7 @@ static int readLines(const char *file, int num)
384 char *cp; 384 char *cp;
385 385
386 if ((num < 1) || (num > lastNum + 1)) { 386 if ((num < 1) || (num > lastNum + 1)) {
387 bb_error_msg("bad line for read"); 387 bb_simple_error_msg("bad line for read");
388 return FALSE; 388 return FALSE;
389 } 389 }
390 390
@@ -629,7 +629,7 @@ static void subCommand(const char *cmd, int num1, int num2)
629 cp = buf; 629 cp = buf;
630 630
631 if (isblank(*cp) || (*cp == '\0')) { 631 if (isblank(*cp) || (*cp == '\0')) {
632 bb_error_msg("bad delimiter for substitute"); 632 bb_simple_error_msg("bad delimiter for substitute");
633 return; 633 return;
634 } 634 }
635 635
@@ -638,7 +638,7 @@ static void subCommand(const char *cmd, int num1, int num2)
638 638
639 cp = strchr(cp, delim); 639 cp = strchr(cp, delim);
640 if (cp == NULL) { 640 if (cp == NULL) {
641 bb_error_msg("missing 2nd delimiter for substitute"); 641 bb_simple_error_msg("missing 2nd delimiter for substitute");
642 return; 642 return;
643 } 643 }
644 644
@@ -660,13 +660,13 @@ static void subCommand(const char *cmd, int num1, int num2)
660 printFlag = TRUE; 660 printFlag = TRUE;
661 break; 661 break;
662 default: 662 default:
663 bb_error_msg("unknown option for substitute"); 663 bb_simple_error_msg("unknown option for substitute");
664 return; 664 return;
665 } 665 }
666 666
667 if (*oldStr == '\0') { 667 if (*oldStr == '\0') {
668 if (searchString[0] == '\0') { 668 if (searchString[0] == '\0') {
669 bb_error_msg("no previous search string"); 669 bb_simple_error_msg("no previous search string");
670 return; 670 return;
671 } 671 }
672 oldStr = searchString; 672 oldStr = searchString;
@@ -846,7 +846,7 @@ static void doCommands(void)
846 846
847 case 'f': 847 case 'f':
848 if (*cp != '\0' && *cp != ' ') { 848 if (*cp != '\0' && *cp != ' ') {
849 bb_error_msg("bad file command"); 849 bb_simple_error_msg("bad file command");
850 break; 850 break;
851 } 851 }
852 cp = skip_whitespace(cp); 852 cp = skip_whitespace(cp);
@@ -870,7 +870,7 @@ static void doCommands(void)
870 case 'k': 870 case 'k':
871 cp = skip_whitespace(cp); 871 cp = skip_whitespace(cp);
872 if ((unsigned)(*cp - 'a') >= 26 || cp[1]) { 872 if ((unsigned)(*cp - 'a') >= 26 || cp[1]) {
873 bb_error_msg("bad mark name"); 873 bb_simple_error_msg("bad mark name");
874 break; 874 break;
875 } 875 }
876 marks[(unsigned)(*cp - 'a')] = num2; 876 marks[(unsigned)(*cp - 'a')] = num2;
@@ -887,7 +887,7 @@ static void doCommands(void)
887 case 'q': 887 case 'q':
888 cp = skip_whitespace(cp); 888 cp = skip_whitespace(cp);
889 if (have1 || *cp) { 889 if (have1 || *cp) {
890 bb_error_msg("bad quit command"); 890 bb_simple_error_msg("bad quit command");
891 break; 891 break;
892 } 892 }
893 if (!dirty) 893 if (!dirty)
@@ -903,12 +903,12 @@ static void doCommands(void)
903 903
904 case 'r': 904 case 'r':
905 if (*cp != '\0' && *cp != ' ') { 905 if (*cp != '\0' && *cp != ' ') {
906 bb_error_msg("bad read command"); 906 bb_simple_error_msg("bad read command");
907 break; 907 break;
908 } 908 }
909 cp = skip_whitespace(cp); 909 cp = skip_whitespace(cp);
910 if (*cp == '\0') { 910 if (*cp == '\0') {
911 bb_error_msg("no file name"); 911 bb_simple_error_msg("no file name");
912 break; 912 break;
913 } 913 }
914 if (!have1) 914 if (!have1)
@@ -925,14 +925,14 @@ static void doCommands(void)
925 925
926 case 'w': 926 case 'w':
927 if (*cp != '\0' && *cp != ' ') { 927 if (*cp != '\0' && *cp != ' ') {
928 bb_error_msg("bad write command"); 928 bb_simple_error_msg("bad write command");
929 break; 929 break;
930 } 930 }
931 cp = skip_whitespace(cp); 931 cp = skip_whitespace(cp);
932 if (*cp == '\0') { 932 if (*cp == '\0') {
933 cp = fileName; 933 cp = fileName;
934 if (!cp) { 934 if (!cp) {
935 bb_error_msg("no file name specified"); 935 bb_simple_error_msg("no file name specified");
936 break; 936 break;
937 } 937 }
938 } 938 }
@@ -960,7 +960,7 @@ static void doCommands(void)
960 960
961 case '.': 961 case '.':
962 if (have1) { 962 if (have1) {
963 bb_error_msg("no arguments allowed"); 963 bb_simple_error_msg("no arguments allowed");
964 break; 964 break;
965 } 965 }
966 printLines(curNum, curNum, FALSE); 966 printLines(curNum, curNum, FALSE);
@@ -984,7 +984,7 @@ static void doCommands(void)
984 break; 984 break;
985 985
986 default: 986 default:
987 bb_error_msg("unimplemented command"); 987 bb_simple_error_msg("unimplemented command");
988 break; 988 break;
989 } 989 }
990 } 990 }