summaryrefslogtreecommitdiffstats
path: root/text-utils/ul.c
diff options
context:
space:
mode:
authorSami Kerola2011-04-30 13:06:26 +0200
committerKarel Zak2011-05-17 15:58:05 +0200
commita4949aaa548f04d5713640cc34a968abde25a1c7 (patch)
tree92bd0c12cba6d32044f6a148c6f933be6d7bdf64 /text-utils/ul.c
parentul.c: close files and free memory after usage (diff)
downloadkernel-qcow2-util-linux-a4949aaa548f04d5713640cc34a968abde25a1c7.tar.gz
kernel-qcow2-util-linux-a4949aaa548f04d5713640cc34a968abde25a1c7.tar.xz
kernel-qcow2-util-linux-a4949aaa548f04d5713640cc34a968abde25a1c7.zip
ul.c: escape handling refactored
Separate function for escape handling to make switch statement more readable. Signed-off-by: Sami Kerola <kerolasa@iki.fi>
Diffstat (limited to 'text-utils/ul.c')
-rw-r--r--text-utils/ul.c76
1 files changed, 42 insertions, 34 deletions
diff --git a/text-utils/ul.c b/text-utils/ul.c
index 9536c18be..42a2ee279 100644
--- a/text-utils/ul.c
+++ b/text-utils/ul.c
@@ -70,6 +70,7 @@ static int put1wc(int c)
#endif
static void usage(FILE *out);
+static int handle_escape(FILE * f);
static void filter(FILE *f);
static void flushln(void);
static void overstrike(void);
@@ -235,6 +236,45 @@ int main(int argc, char **argv)
return EXIT_SUCCESS;
}
+static int handle_escape(FILE * f)
+{
+ wint_t c;
+
+ switch (c = getwc(f)) {
+ case HREV:
+ if (halfpos == 0) {
+ mode |= SUPERSC;
+ halfpos--;
+ } else if (halfpos > 0) {
+ mode &= ~SUBSC;
+ halfpos--;
+ } else {
+ halfpos = 0;
+ reverse();
+ }
+ return 0;
+ case HFWD:
+ if (halfpos == 0) {
+ mode |= SUBSC;
+ halfpos++;
+ } else if (halfpos < 0) {
+ mode &= ~SUPERSC;
+ halfpos++;
+ } else {
+ halfpos = 0;
+ fwd();
+ }
+ return 0;
+ case FREV:
+ reverse();
+ return 0;
+ default:
+ /* unknown escape */
+ ungetwc(c, f);
+ return 1;
+ }
+}
+
static void filter(FILE *f)
{
wint_t c;
@@ -264,43 +304,11 @@ static void filter(FILE *f)
continue;
case IESC:
- switch (c = getwc(f)) {
-
- case HREV:
- if (halfpos == 0) {
- mode |= SUPERSC;
- halfpos--;
- } else if (halfpos > 0) {
- mode &= ~SUBSC;
- halfpos--;
- } else {
- halfpos = 0;
- reverse();
- }
- continue;
-
- case HFWD:
- if (halfpos == 0) {
- mode |= SUBSC;
- halfpos++;
- } else if (halfpos < 0) {
- mode &= ~SUPERSC;
- halfpos++;
- } else {
- halfpos = 0;
- fwd();
- }
- continue;
-
- case FREV:
- reverse();
- continue;
-
- default:
+ if(handle_escape(f)) {
+ c = getwc(f);
errx(EXIT_FAILURE,
_("unknown escape sequence in input: %o, %o"),
IESC, c);
- break;
}
continue;