svn commit: trunk/busybox/coreutils

vda at busybox.net vda at busybox.net
Thu Oct 11 16:02:37 UTC 2007


Author: vda
Date: 2007-10-11 09:02:36 -0700 (Thu, 11 Oct 2007)
New Revision: 20223

Log:
stty: incorporate strings into struct instead of keeping pointers there.

static:
   text    data     bss     dec     hex filename
 767535     974    9420  777929   bdec9 busybox_old
 767403     974    9420  777797   bde45 busybox_unstripped

dynamic -fpic:
   text    data     bss     dec     hex filename
 718954   14030   12032  745016   b5e38 busybox_old
 720278   12534   12032  744844   b5d8c busybox_unstripped



Modified:
   trunk/busybox/coreutils/stty.c


Changeset:
Modified: trunk/busybox/coreutils/stty.c
===================================================================
--- trunk/busybox/coreutils/stty.c	2007-10-11 10:10:15 UTC (rev 20222)
+++ trunk/busybox/coreutils/stty.c	2007-10-11 16:02:36 UTC (rev 20223)
@@ -127,29 +127,6 @@
 	control, input, output, local, combination
 };
 
-static const char evenp     [] ALIGN1 = "evenp";
-static const char raw       [] ALIGN1 = "raw";
-static const char stty_min  [] ALIGN1 = "min";
-static const char stty_time [] ALIGN1 = "time";
-static const char stty_swtch[] ALIGN1 = "swtch";
-static const char stty_eol  [] ALIGN1 = "eol";
-static const char stty_eof  [] ALIGN1 = "eof";
-static const char parity    [] ALIGN1 = "parity";
-static const char stty_oddp [] ALIGN1 = "oddp";
-static const char stty_nl   [] ALIGN1 = "nl";
-static const char stty_ek   [] ALIGN1 = "ek";
-static const char stty_sane [] ALIGN1 = "sane";
-static const char cbreak    [] ALIGN1 = "cbreak";
-static const char stty_pass8[] ALIGN1 = "pass8";
-static const char litout    [] ALIGN1 = "litout";
-static const char cooked    [] ALIGN1 = "cooked";
-static const char decctlq   [] ALIGN1 = "decctlq";
-static const char stty_tabs [] ALIGN1 = "tabs";
-static const char stty_lcase[] ALIGN1 = "lcase";
-static const char stty_LCASE[] ALIGN1 = "LCASE";
-static const char stty_crt  [] ALIGN1 = "crt";
-static const char stty_dec  [] ALIGN1 = "dec";
-
 /* Flags for 'struct mode_info' */
 #define SANE_SET 1              /* Set in 'sane' mode                  */
 #define SANE_UNSET 2            /* Unset in 'sane' mode                */
@@ -158,7 +135,7 @@
 
 /* Each mode */
 struct mode_info {
-	const char *const name;      /* Name given on command line           */
+	const char name[9];           /* Name given on command line           */
 	const unsigned char type;     /* Which structure element to change    */
 	const unsigned char flags;    /* Setting and display options          */
 	/* were using short here, but ppc32 was unhappy: */
@@ -166,13 +143,59 @@
 	const tcflag_t bits;          /* Bits to set for this mode            */
 };
 
-/* We can optimize it further by using name[8] instead of char *name */
-/* but beware of "if (info->name == evenp)" checks! */
-/* Need to replace them with "if (info == &mode_info[EVENP_INDX])" */
+enum {
+	/* Must match mode_info[] order! */
+	IDX_evenp = 0,
+	IDX_parity,
+	IDX_oddp,
+	IDX_nl,
+	IDX_ek,
+	IDX_sane,
+	IDX_cooked,
+	IDX_raw,
+	IDX_pass8,
+	IDX_litout,
+	IDX_cbreak,
+	IDX_crt,
+	IDX_dec,
+#ifdef IXANY
+	IDX_decctlq,
+#endif
+#if defined(TABDLY) || defined(OXTABS)
+	IDX_tabs,
+#endif
+#if defined(XCASE) && defined(IUCLC) && defined(OLCUC)
+	IDX_lcase,
+	IDX_LCASE,
+#endif
+};
 
 #define MI_ENTRY(N,T,F,B,M) { N, T, F, M, B }
 
 static const struct mode_info mode_info[] = {
+	MI_ENTRY("evenp",    combination, REV        | OMIT, 0,          0 ),
+	MI_ENTRY("parity",   combination, REV        | OMIT, 0,          0 ),
+	MI_ENTRY("oddp",     combination, REV        | OMIT, 0,          0 ),
+	MI_ENTRY("nl",       combination, REV        | OMIT, 0,          0 ),
+	MI_ENTRY("ek",       combination, OMIT,              0,          0 ),
+	MI_ENTRY("sane",     combination, OMIT,              0,          0 ),
+	MI_ENTRY("cooked",   combination, REV        | OMIT, 0,          0 ),
+	MI_ENTRY("raw",      combination, REV        | OMIT, 0,          0 ),
+	MI_ENTRY("pass8",    combination, REV        | OMIT, 0,          0 ),
+	MI_ENTRY("litout",   combination, REV        | OMIT, 0,          0 ),
+	MI_ENTRY("cbreak",   combination, REV        | OMIT, 0,          0 ),
+	MI_ENTRY("crt",      combination, OMIT,              0,          0 ),
+	MI_ENTRY("dec",      combination, OMIT,              0,          0 ),
+#ifdef IXANY
+	MI_ENTRY("decctlq",  combination, REV        | OMIT, 0,          0 ),
+#endif
+#if defined(TABDLY) || defined(OXTABS)
+	MI_ENTRY("tabs",     combination, REV        | OMIT, 0,          0 ),
+#endif
+#if defined(XCASE) && defined(IUCLC) && defined(OLCUC)
+	MI_ENTRY("lcase",    combination, REV        | OMIT, 0,          0 ),
+	MI_ENTRY("LCASE",    combination, REV        | OMIT, 0,          0 ),
+#endif
 	MI_ENTRY("parenb",   control,     REV,               PARENB,     0 ),
 	MI_ENTRY("parodd",   control,     REV,               PARODD,     0 ),
 	MI_ENTRY("cs5",      control,     0,                 CS5,     CSIZE),
@@ -293,56 +316,70 @@
 	MI_ENTRY("echoke",   local,       SANE_SET   | REV,  ECHOKE,     0 ),
 	MI_ENTRY("crtkill",  local,       REV        | OMIT, ECHOKE,     0 ),
 #endif
-	MI_ENTRY(evenp,      combination, REV        | OMIT, 0,          0 ),
-	MI_ENTRY(parity,     combination, REV        | OMIT, 0,          0 ),
-	MI_ENTRY(stty_oddp,  combination, REV        | OMIT, 0,          0 ),
-	MI_ENTRY(stty_nl,    combination, REV        | OMIT, 0,          0 ),
-	MI_ENTRY(stty_ek,    combination, OMIT,              0,          0 ),
-	MI_ENTRY(stty_sane,  combination, OMIT,              0,          0 ),
-	MI_ENTRY(cooked,     combination, REV        | OMIT, 0,          0 ),
-	MI_ENTRY(raw,        combination, REV        | OMIT, 0,          0 ),
-	MI_ENTRY(stty_pass8, combination, REV        | OMIT, 0,          0 ),
-	MI_ENTRY(litout,     combination, REV        | OMIT, 0,          0 ),
-	MI_ENTRY(cbreak,     combination, REV        | OMIT, 0,          0 ),
-#ifdef IXANY
-	MI_ENTRY(decctlq,    combination, REV        | OMIT, 0,          0 ),
-#endif
-#if defined(TABDLY) || defined(OXTABS)
-	MI_ENTRY(stty_tabs,  combination, REV        | OMIT, 0,          0 ),
-#endif
-#if defined(XCASE) && defined(IUCLC) && defined(OLCUC)
-	MI_ENTRY(stty_lcase, combination, REV        | OMIT, 0,          0 ),
-	MI_ENTRY(stty_LCASE, combination, REV        | OMIT, 0,          0 ),
-#endif
-	MI_ENTRY(stty_crt,   combination, OMIT,              0,          0 ),
-	MI_ENTRY(stty_dec,   combination, OMIT,              0,          0 ),
 };
 
 enum {
 	NUM_mode_info = ARRAY_SIZE(mode_info)
 };
 
-/* Control character settings */
+/* Control characters */
 struct control_info {
-	const char *const name;               /* Name given on command line */
+	const char name[7];                   /* Name given on command line */
 	const unsigned char saneval;          /* Value to set for 'stty sane' */
 	const unsigned char offset;           /* Offset in c_cc */
 };
 
-/* Control characters */
+enum {
+	/* Must match control_info[] order! */
+	CIDX_intr = 0,
+	CIDX_quit,
+	CIDX_erase,
+	CIDX_kill,
+	CIDX_eof,
+	CIDX_eol,
+#ifdef VEOL2
+	CIDX_eol2,
+#endif
+#ifdef VSWTCH
+	CIDX_swtch,
+#endif
+	CIDX_start,
+	CIDX_stop,
+	CIDX_susp,
+#ifdef VDSUSP
+	CIDX_dsusp,
+#endif
+#ifdef VREPRINT
+	CIDX_rprnt,
+#endif
+#ifdef VWERASE
+	CIDX_werase,
+#endif
+#ifdef VLNEXT
+	CIDX_lnext,
+#endif
+#ifdef VFLUSHO
+	CIDX_flush,
+#endif
+#ifdef VSTATUS
+	CIDX_status,
+#endif
+	CIDX_min,
+	CIDX_time,
+};
 
 static const struct control_info control_info[] = {
 	{"intr",     CINTR,   VINTR},
 	{"quit",     CQUIT,   VQUIT},
 	{"erase",    CERASE,  VERASE},
 	{"kill",     CKILL,   VKILL},
-	{stty_eof,   CEOF,    VEOF},
-	{stty_eol,   CEOL,    VEOL},
+	{"eof",      CEOF,    VEOF},
+	{"eol",      CEOL,    VEOL},
 #ifdef VEOL2
 	{"eol2",     CEOL2,   VEOL2},
 #endif
 #ifdef VSWTCH
-	{stty_swtch, CSWTCH,  VSWTCH},
+	{"swtch",    CSWTCH,  VSWTCH},
 #endif
 	{"start",    CSTART,  VSTART},
 	{"stop",     CSTOP,   VSTOP},
@@ -366,8 +403,8 @@
 	{"status",   CSTATUS, VSTATUS},
 #endif
 	/* These must be last because of the display routines */
-	{stty_min,   1,       VMIN},
-	{stty_time,  0,       VTIME},
+	{"min",      1,       VMIN},
+	{"time",     0,       VTIME},
 };
 
 enum {
@@ -653,17 +690,19 @@
 	wrapf("\n");
 #endif
 
-	for (i = 0; control_info[i].name != stty_min; ++i) {
+	for (i = 0; i != CIDX_min; ++i) {
 		/* If swtch is the same as susp, don't print both */
 #if VSWTCH == VSUSP
-		if (control_info[i].name == stty_swtch)
+		if (i == CIDX_swtch)
 			continue;
 #endif
 		/* If eof uses the same slot as min, only print whichever applies */
 #if VEOF == VMIN
 		if ((mode->c_lflag & ICANON) == 0
-			&& (control_info[i].name == stty_eof
-				|| control_info[i].name == stty_eol)) continue;
+		 && (i == CIDX_eof || i == CIDX_eol)
+		) {
+			continue;
+		}
 #endif
 		wrapf("%s = %s;", control_info[i].name,
 			  visible(mode->c_cc[control_info[i].offset]));
@@ -705,7 +744,7 @@
 
 	for (i = 0; i < NUM_control_info; ++i) {
 #if VMIN == VEOF
-		if (control_info[i].name == stty_min)
+		if (i == CIDX_min)
 			break;
 #endif
 		mode->c_cc[control_info[i].offset] = control_info[i].saneval;
@@ -775,17 +814,17 @@
 	}
 
 	/* Combination mode */
-	if (info->name == evenp || info->name == parity) {
+	if (info == &mode_info[IDX_evenp] || info == &mode_info[IDX_parity]) {
 		if (reversed)
 			mode->c_cflag = (mode->c_cflag & ~PARENB & ~CSIZE) | CS8;
 		else
 			mode->c_cflag =	(mode->c_cflag & ~PARODD & ~CSIZE) | PARENB | CS7;
-	} else if (info->name == stty_oddp) {
+	} else if (info == &mode_info[IDX_oddp]) {
 		if (reversed)
 			mode->c_cflag = (mode->c_cflag & ~PARENB & ~CSIZE) | CS8;
 		else
 			mode->c_cflag =	(mode->c_cflag & ~CSIZE) | CS7 | PARODD | PARENB;
-	} else if (info->name == stty_nl) {
+	} else if (info == &mode_info[IDX_nl]) {
 		if (reversed) {
 			mode->c_iflag = (mode->c_iflag | ICRNL) & ~INLCR & ~IGNCR;
 			mode->c_oflag = (mode->c_oflag | ONLCR)	& ~OCRNL & ~ONLRET;
@@ -793,18 +832,17 @@
 			mode->c_iflag = mode->c_iflag & ~ICRNL;
 			if (ONLCR) mode->c_oflag = mode->c_oflag & ~ONLCR;
 		}
-	} else if (info->name == stty_ek) {
+	} else if (info == &mode_info[IDX_ek]) {
 		mode->c_cc[VERASE] = CERASE;
 		mode->c_cc[VKILL] = CKILL;
-	} else if (info->name == stty_sane) {
+	} else if (info == &mode_info[IDX_sane]) {
 		sane_mode(mode);
-	}
-	else if (info->name == cbreak) {
+	} else if (info == &mode_info[IDX_cbreak]) {
 		if (reversed)
 			mode->c_lflag |= ICANON;
 		else
 			mode->c_lflag &= ~ICANON;
-	} else if (info->name == stty_pass8) {
+	} else if (info == &mode_info[IDX_pass8]) {
 		if (reversed) {
 			mode->c_cflag = (mode->c_cflag & ~CSIZE) | CS7 | PARENB;
 			mode->c_iflag |= ISTRIP;
@@ -812,7 +850,7 @@
 			mode->c_cflag = (mode->c_cflag & ~PARENB & ~CSIZE) | CS8;
 			mode->c_iflag &= ~ISTRIP;
 		}
-	} else if (info->name == litout) {
+	} else if (info == &mode_info[IDX_litout]) {
 		if (reversed) {
 			mode->c_cflag = (mode->c_cflag & ~CSIZE) | CS7 | PARENB;
 			mode->c_iflag |= ISTRIP;
@@ -822,9 +860,10 @@
 			mode->c_iflag &= ~ISTRIP;
 			mode->c_oflag &= ~OPOST;
 		}
-	} else if (info->name == raw || info->name == cooked) {
+	} else if (info == &mode_info[IDX_raw] || info == &mode_info[IDX_cooked]) {
 		if ((info->name[0] == 'r' && reversed)
-			|| (info->name[0] == 'c' && !reversed)) {
+		 || (info->name[0] == 'c' && !reversed)
+		) {
 			/* Cooked mode */
 			mode->c_iflag |= BRKINT | IGNPAR | ISTRIP | ICRNL | IXON;
 			mode->c_oflag |= OPOST;
@@ -844,26 +883,27 @@
 			mode->c_cc[VTIME] = 0;
 		}
 	}
-	else if (IXANY && info->name == decctlq) {
+	else if (IXANY && info == &mode_info[IDX_decctlq]) {
 		if (reversed)
 			mode->c_iflag |= IXANY;
 		else
 			mode->c_iflag &= ~IXANY;
 	}
-	else if (TABDLY && info->name == stty_tabs) {
+	else if (TABDLY && info == &mode_info[IDX_tabs]) {
 		if (reversed)
 			mode->c_oflag = (mode->c_oflag & ~TABDLY) | TAB3;
 		else
 			mode->c_oflag = (mode->c_oflag & ~TABDLY) | TAB0;
 	}
-	else if (OXTABS && info->name == stty_tabs) {
+	else if (OXTABS && info == &mode_info[IDX_tabs]) {
 		if (reversed)
 			mode->c_oflag |= OXTABS;
 		else
 			mode->c_oflag &= ~OXTABS;
-	}
-	else if (XCASE && IUCLC && OLCUC
-	&& (info->name == stty_lcase || info->name == stty_LCASE)) {
+	} else
+	if (XCASE && IUCLC && OLCUC
+	 && (info == &mode_info[IDX_lcase] || info == &mode_info[IDX_LCASE])
+	) {
 		if (reversed) {
 			mode->c_lflag &= ~XCASE;
 			mode->c_iflag &= ~IUCLC;
@@ -873,11 +913,9 @@
 			mode->c_iflag |= IUCLC;
 			mode->c_oflag |= OLCUC;
 		}
-	}
-	else if (info->name == stty_crt) {
+	} else if (info == &mode_info[IDX_crt]) {
 		mode->c_lflag |= ECHOE | ECHOCTL | ECHOKE;
-	}
-	else if (info->name == stty_dec) {
+	} else if (info == &mode_info[IDX_dec]) {
 		mode->c_cc[VINTR] = 3; /* ^C */
 		mode->c_cc[VERASE] = 127; /* DEL */
 		mode->c_cc[VKILL] = 21; /* ^U */
@@ -891,7 +929,7 @@
 {
 	unsigned char value;
 
-	if (info->name == stty_min || info->name == stty_time)
+	if (info == &control_info[CIDX_min] || info == &control_info[CIDX_time])
 		value = xatoul_range_sfx(arg, 0, 0xff, stty_suffixes);
 	else if (arg[0] == '\0' || arg[1] == '\0')
 		value = arg[0];




More information about the busybox-cvs mailing list