summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Eggert <[email protected]>2025-04-26 13:59:50 -0700
committerPaul Eggert <[email protected]>2025-04-27 23:42:49 -0700
commitc191460adf0407f8ba84176b01e6075449747dbf (patch)
tree75cc961901da3ca66b4a3d71fa072ebd20e336dd
parent686357a40ca038edc902276cb3b33f4757d8cfb2 (diff)
downloaddiffutils-c191460adf0407f8ba84176b01e6075449747dbf.tar.gz
sdiff: refactor simplification
* src/sdiff.c (skip_white): Simplify a loop. (edit): Redo nested switches to avoid duplicate code.
-rw-r--r--src/sdiff.c47
1 files changed, 16 insertions, 31 deletions
diff --git a/src/sdiff.c b/src/sdiff.c
index cc961c3..8b7e2b1 100644
--- a/src/sdiff.c
+++ b/src/sdiff.c
@@ -821,13 +821,8 @@ static int
skip_white (void)
{
int c;
- for (;;)
- {
- c = getchar ();
- if (! c_isspace (c) || c == '\n')
- break;
- checksigs ();
- }
+ while ((c = getchar ()) != '\n' && c_isspace (c))
+ checksigs ();
if (ferror (stdin))
perror_fatal (_("read failed"));
return c;
@@ -869,41 +864,31 @@ edit (struct line_filter *left, char const *lname, lin lline, lin llen,
cmd = skip_white ();
switch (cmd)
{
- case '1': case '2': case 'l': case 'r':
- case 's': case 'v': case 'q':
- if (skip_white () == '\n')
- gotcmd = true;
- else
- {
- give_help ();
- flush_line ();
- }
- break;
-
case 'e':;
int cmd1 = skip_white ();
switch (cmd1)
{
- case '1': case '2': case 'b': case 'd': case 'l': case 'r':
- if (skip_white () == '\n')
- {
- gotcmd = true;
- cmd |= cmd1 << UCHAR_WIDTH;
- }
- else
- {
- give_help ();
- flush_line ();
- }
- break;
case '\n':
gotcmd = true;
- break;
+ continue;
default:
give_help ();
flush_line ();
+ continue;
+ case '1': case '2': case 'b': case 'd': case 'l': case 'r':
+ cmd |= cmd1 << UCHAR_WIDTH;
break;
}
+ FALLTHROUGH;
+ case '1': case '2': case 'l': case 'r':
+ case 's': case 'v': case 'q':
+ if (skip_white () == '\n')
+ gotcmd = true;
+ else
+ {
+ give_help ();
+ flush_line ();
+ }
break;
case EOF: