diff options
| author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-01-18 00:53:35 +0000 |
|---|---|---|
| committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-01-18 00:53:35 +0000 |
| commit | 41aaefce71bfdfb7d788c29e9df90971eecc8193 (patch) | |
| tree | 7ac93671972cfb0029cc50e00de6413433b1767c /coreutils | |
| parent | cbbc043d1bce3bf48097520dbb91d84a423386a6 (diff) | |
| download | busybox-w32-41aaefce71bfdfb7d788c29e9df90971eecc8193.tar.gz busybox-w32-41aaefce71bfdfb7d788c29e9df90971eecc8193.tar.bz2 busybox-w32-41aaefce71bfdfb7d788c29e9df90971eecc8193.zip | |
stop using global variable needlessly
Diffstat (limited to 'coreutils')
| -rw-r--r-- | coreutils/stty.c | 58 |
1 files changed, 30 insertions, 28 deletions
diff --git a/coreutils/stty.c b/coreutils/stty.c index 7206f2d11..3ce8bf312 100644 --- a/coreutils/stty.c +++ b/coreutils/stty.c | |||
| @@ -901,19 +901,21 @@ static void set_control_char_or_die(const struct control_info *info, | |||
| 901 | mode->c_cc[info->offset] = value; | 901 | mode->c_cc[info->offset] = value; |
| 902 | } | 902 | } |
| 903 | 903 | ||
| 904 | #define STTY_require_set_attr (1<<0) | 904 | #define STTY_require_set_attr (1<<0) |
| 905 | #define STTY_speed_was_set (1<<1) | 905 | #define STTY_speed_was_set (1<<1) |
| 906 | #define STTY_verbose_output (1<<2) | 906 | #define STTY_verbose_output (1<<2) |
| 907 | #define STTY_recoverable_output (1<<3) | 907 | #define STTY_recoverable_output (1<<3) |
| 908 | #define STTY_noargs (1<<4) | 908 | #define STTY_noargs (1<<4) |
| 909 | int stty_main(int argc, char **argv) | 909 | int stty_main(int argc, char **argv) |
| 910 | { | 910 | { |
| 911 | struct termios mode; | 911 | struct termios mode; |
| 912 | void (*output_func)(const struct termios *, const int); | 912 | void (*output_func)(const struct termios *, const int); |
| 913 | const char *file_name = NULL; | 913 | const char *file_name = NULL; |
| 914 | int k; | ||
| 915 | int display_all = 0; | 914 | int display_all = 0; |
| 916 | option_mask32 = STTY_noargs; | 915 | int stty_state; |
| 916 | int k; | ||
| 917 | |||
| 918 | stty_state = STTY_noargs; | ||
| 917 | output_func = do_display; | 919 | output_func = do_display; |
| 918 | 920 | ||
| 919 | /* First pass: only parse/verify command line params */ | 921 | /* First pass: only parse/verify command line params */ |
| @@ -931,7 +933,7 @@ int stty_main(int argc, char **argv) | |||
| 931 | if (mp) { | 933 | if (mp) { |
| 932 | if (!(mp->flags & REV)) | 934 | if (!(mp->flags & REV)) |
| 933 | goto invalid_argument; | 935 | goto invalid_argument; |
| 934 | option_mask32 &= ~STTY_noargs; | 936 | stty_state &= ~STTY_noargs; |
| 935 | continue; | 937 | continue; |
| 936 | } | 938 | } |
| 937 | /* It is an option - parse it */ | 939 | /* It is an option - parse it */ |
| @@ -939,12 +941,12 @@ int stty_main(int argc, char **argv) | |||
| 939 | while (arg[++i]) { | 941 | while (arg[++i]) { |
| 940 | switch (arg[i]) { | 942 | switch (arg[i]) { |
| 941 | case 'a': | 943 | case 'a': |
| 942 | option_mask32 |= STTY_verbose_output; | 944 | stty_state |= STTY_verbose_output; |
| 943 | output_func = do_display; | 945 | output_func = do_display; |
| 944 | display_all = 1; | 946 | display_all = 1; |
| 945 | break; | 947 | break; |
| 946 | case 'g': | 948 | case 'g': |
| 947 | option_mask32 |= STTY_recoverable_output; | 949 | stty_state |= STTY_recoverable_output; |
| 948 | output_func = display_recoverable; | 950 | output_func = display_recoverable; |
| 949 | break; | 951 | break; |
| 950 | case 'F': | 952 | case 'F': |
| @@ -971,7 +973,7 @@ end_option: | |||
| 971 | 973 | ||
| 972 | mp = find_mode(arg); | 974 | mp = find_mode(arg); |
| 973 | if (mp) { | 975 | if (mp) { |
| 974 | option_mask32 &= ~STTY_noargs; | 976 | stty_state &= ~STTY_noargs; |
| 975 | continue; | 977 | continue; |
| 976 | } | 978 | } |
| 977 | 979 | ||
| @@ -981,7 +983,7 @@ end_option: | |||
| 981 | bb_error_msg_and_die(bb_msg_requires_arg, arg); | 983 | bb_error_msg_and_die(bb_msg_requires_arg, arg); |
| 982 | /* called for the side effect of xfunc death only */ | 984 | /* called for the side effect of xfunc death only */ |
| 983 | set_control_char_or_die(cp, argnext, &mode); | 985 | set_control_char_or_die(cp, argnext, &mode); |
| 984 | option_mask32 &= ~STTY_noargs; | 986 | stty_state &= ~STTY_noargs; |
| 985 | ++k; | 987 | ++k; |
| 986 | continue; | 988 | continue; |
| 987 | } | 989 | } |
| @@ -1024,16 +1026,16 @@ end_option: | |||
| 1024 | invalid_argument: | 1026 | invalid_argument: |
| 1025 | bb_error_msg_and_die("invalid argument '%s'", arg); | 1027 | bb_error_msg_and_die("invalid argument '%s'", arg); |
| 1026 | } | 1028 | } |
| 1027 | option_mask32 &= ~STTY_noargs; | 1029 | stty_state &= ~STTY_noargs; |
| 1028 | } | 1030 | } |
| 1029 | 1031 | ||
| 1030 | /* Specifying both -a and -g is an error */ | 1032 | /* Specifying both -a and -g is an error */ |
| 1031 | if ((option_mask32 & (STTY_verbose_output | STTY_recoverable_output)) == | 1033 | if ((stty_state & (STTY_verbose_output | STTY_recoverable_output)) == |
| 1032 | (STTY_verbose_output | STTY_recoverable_output)) | 1034 | (STTY_verbose_output | STTY_recoverable_output)) |
| 1033 | bb_error_msg_and_die("verbose and stty-readable output styles are mutually exclusive"); | 1035 | bb_error_msg_and_die("verbose and stty-readable output styles are mutually exclusive"); |
| 1034 | /* Specifying -a or -g with non-options is an error */ | 1036 | /* Specifying -a or -g with non-options is an error */ |
| 1035 | if (!(option_mask32 & STTY_noargs) && | 1037 | if (!(stty_state & STTY_noargs) && |
| 1036 | (option_mask32 & (STTY_verbose_output | STTY_recoverable_output))) | 1038 | (stty_state & (STTY_verbose_output | STTY_recoverable_output))) |
| 1037 | bb_error_msg_and_die("modes may not be set when specifying an output style"); | 1039 | bb_error_msg_and_die("modes may not be set when specifying an output style"); |
| 1038 | 1040 | ||
| 1039 | /* Now it is safe to start doing things */ | 1041 | /* Now it is safe to start doing things */ |
| @@ -1057,7 +1059,7 @@ invalid_argument: | |||
| 1057 | if (tcgetattr(STDIN_FILENO, &mode)) | 1059 | if (tcgetattr(STDIN_FILENO, &mode)) |
| 1058 | perror_on_device_and_die("%s"); | 1060 | perror_on_device_and_die("%s"); |
| 1059 | 1061 | ||
| 1060 | if (option_mask32 & (STTY_verbose_output | STTY_recoverable_output | STTY_noargs)) { | 1062 | if (stty_state & (STTY_verbose_output | STTY_recoverable_output | STTY_noargs)) { |
| 1061 | get_terminal_width_height(STDOUT_FILENO, &max_col, NULL); | 1063 | get_terminal_width_height(STDOUT_FILENO, &max_col, NULL); |
| 1062 | output_func(&mode, display_all); | 1064 | output_func(&mode, display_all); |
| 1063 | return EXIT_SUCCESS; | 1065 | return EXIT_SUCCESS; |
| @@ -1076,7 +1078,7 @@ invalid_argument: | |||
| 1076 | mp = find_mode(arg+1); | 1078 | mp = find_mode(arg+1); |
| 1077 | if (mp) { | 1079 | if (mp) { |
| 1078 | set_mode(mp, 1 /* reversed */, &mode); | 1080 | set_mode(mp, 1 /* reversed */, &mode); |
| 1079 | option_mask32 |= STTY_require_set_attr; | 1081 | stty_state |= STTY_require_set_attr; |
| 1080 | } | 1082 | } |
| 1081 | /* It is an option - already parsed. Skip it */ | 1083 | /* It is an option - already parsed. Skip it */ |
| 1082 | continue; | 1084 | continue; |
| @@ -1085,7 +1087,7 @@ invalid_argument: | |||
| 1085 | mp = find_mode(arg); | 1087 | mp = find_mode(arg); |
| 1086 | if (mp) { | 1088 | if (mp) { |
| 1087 | set_mode(mp, 0 /* non-reversed */, &mode); | 1089 | set_mode(mp, 0 /* non-reversed */, &mode); |
| 1088 | option_mask32 |= STTY_require_set_attr; | 1090 | stty_state |= STTY_require_set_attr; |
| 1089 | continue; | 1091 | continue; |
| 1090 | } | 1092 | } |
| 1091 | 1093 | ||
| @@ -1093,7 +1095,7 @@ invalid_argument: | |||
| 1093 | if (cp) { | 1095 | if (cp) { |
| 1094 | ++k; | 1096 | ++k; |
| 1095 | set_control_char_or_die(cp, argnext, &mode); | 1097 | set_control_char_or_die(cp, argnext, &mode); |
| 1096 | option_mask32 |= STTY_require_set_attr; | 1098 | stty_state |= STTY_require_set_attr; |
| 1097 | continue; | 1099 | continue; |
| 1098 | } | 1100 | } |
| 1099 | 1101 | ||
| @@ -1106,7 +1108,7 @@ invalid_argument: | |||
| 1106 | #ifdef HAVE_C_LINE | 1108 | #ifdef HAVE_C_LINE |
| 1107 | case param_line: | 1109 | case param_line: |
| 1108 | mode.c_line = xatoul_sfx(argnext, stty_suffixes); | 1110 | mode.c_line = xatoul_sfx(argnext, stty_suffixes); |
| 1109 | option_mask32 |= STTY_require_set_attr; | 1111 | stty_state |= STTY_require_set_attr; |
| 1110 | break; | 1112 | break; |
| 1111 | #endif | 1113 | #endif |
| 1112 | #ifdef TIOCGWINSZ | 1114 | #ifdef TIOCGWINSZ |
| @@ -1125,24 +1127,24 @@ invalid_argument: | |||
| 1125 | break; | 1127 | break; |
| 1126 | case param_ispeed: | 1128 | case param_ispeed: |
| 1127 | set_speed_or_die(input_speed, argnext, &mode); | 1129 | set_speed_or_die(input_speed, argnext, &mode); |
| 1128 | option_mask32 |= (STTY_require_set_attr | STTY_speed_was_set); | 1130 | stty_state |= (STTY_require_set_attr | STTY_speed_was_set); |
| 1129 | break; | 1131 | break; |
| 1130 | case param_ospeed: | 1132 | case param_ospeed: |
| 1131 | set_speed_or_die(output_speed, argnext, &mode); | 1133 | set_speed_or_die(output_speed, argnext, &mode); |
| 1132 | option_mask32 |= (STTY_require_set_attr | STTY_speed_was_set); | 1134 | stty_state |= (STTY_require_set_attr | STTY_speed_was_set); |
| 1133 | break; | 1135 | break; |
| 1134 | default: | 1136 | default: |
| 1135 | if (recover_mode(arg, &mode) == 1) | 1137 | if (recover_mode(arg, &mode) == 1) |
| 1136 | option_mask32 |= STTY_require_set_attr; | 1138 | stty_state |= STTY_require_set_attr; |
| 1137 | else /* true: if (tty_value_to_baud(xatou(arg)) != (speed_t) -1) */{ | 1139 | else /* true: if (tty_value_to_baud(xatou(arg)) != (speed_t) -1) */{ |
| 1138 | set_speed_or_die(both_speeds, arg, &mode); | 1140 | set_speed_or_die(both_speeds, arg, &mode); |
| 1139 | option_mask32 |= (STTY_require_set_attr | STTY_speed_was_set); | 1141 | stty_state |= (STTY_require_set_attr | STTY_speed_was_set); |
| 1140 | } /* else - impossible (caught in the first pass): | 1142 | } /* else - impossible (caught in the first pass): |
| 1141 | bb_error_msg_and_die("invalid argument '%s'", arg); */ | 1143 | bb_error_msg_and_die("invalid argument '%s'", arg); */ |
| 1142 | } | 1144 | } |
| 1143 | } | 1145 | } |
| 1144 | 1146 | ||
| 1145 | if (option_mask32 & STTY_require_set_attr) { | 1147 | if (stty_state & STTY_require_set_attr) { |
| 1146 | struct termios new_mode; | 1148 | struct termios new_mode; |
| 1147 | 1149 | ||
| 1148 | if (tcsetattr(STDIN_FILENO, TCSADRAIN, &mode)) | 1150 | if (tcsetattr(STDIN_FILENO, TCSADRAIN, &mode)) |
| @@ -1173,8 +1175,8 @@ invalid_argument: | |||
| 1173 | error for a true failure to set the baud rate */ | 1175 | error for a true failure to set the baud rate */ |
| 1174 | 1176 | ||
| 1175 | new_mode.c_cflag &= (~CIBAUD); | 1177 | new_mode.c_cflag &= (~CIBAUD); |
| 1176 | if (option_mask32 & STTY_speed_was_set || | 1178 | if ((stty_state & STTY_speed_was_set) |
| 1177 | memcmp(&mode, &new_mode, sizeof(mode)) != 0) | 1179 | || memcmp(&mode, &new_mode, sizeof(mode)) != 0) |
| 1178 | #endif | 1180 | #endif |
| 1179 | perror_on_device_and_die("%s: cannot perform all requested operations"); | 1181 | perror_on_device_and_die("%s: cannot perform all requested operations"); |
| 1180 | } | 1182 | } |
