[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
ed -p '' errors, but shouldn't
From: |
Emanuele Torre |
Subject: |
ed -p '' errors, but shouldn't |
Date: |
Thu, 6 Jun 2024 17:00:22 +0200 |
User-agent: |
Mutt/2.2.13 (00d56288) (2024-03-09) |
Hello.
I have noticed that ed -p '' errors with the following error.
$ ed -p '' foo.txt
ed: option requires an argument -- 'p'
Try 'ed --help' for more information.
$ ed -p ''
ed: option requires an argument -- 'p'
Try 'ed --help' for more information.
As if I had run ed -p without an argument.
That seems incorrect; there does not seem to be anything in the
POSIX Issue 7 specification for ed that allows unspecified behaviour
when the prompt string is empty or requires that the prompt string
specified by -p shall not be the empty string.
https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ed.html
I think GNU ed is supposed to not error, and let the command run in this
case, and set the prompt string to '' and enable prompting by default;
i.e. pretty much like not specifying -p '' at all except that now the
P command should effectively do nothing instead of toggling on/off a
'*' prompt.
The cause of this problem seems to be that the Arg_parser library that
ed is using, in the parse_short_option function, at line 209 of
carg_parser.c, checks !arg || !arg[0] as error condition for short
options that require an argument instead of checking only !arg
incorrectly likening empty string to a missing argument.
207 else if( options[index].has_arg == ap_yes )
208 {
209 if( !arg || !arg[0] )
210 {
211 add_error( ap, "option requires an argument -- '" );
212 add_error( ap, code_str ); add_error( ap, "'" );
213 return 1;
214 }
A similar problem occurs for long options ( --prompt '' ), and
long= options ( --prompt= ) because, at line 157 of the same file, in
the parse_long_option function, the same check is done instead of !arg
for long options that require an argument:
$ ed --prompt= foo.txt
ed: option '--prompt' requires an argument
Try 'ed --help' for more information.
$ ed --prompt '' foo.txt
ed: option '--prompt' requires an argument
Try 'ed --help' for more information.
155 if( options[index].has_arg == ap_yes )
156 {
157 if( !arg || !arg[0] )
158 {
159 add_error( ap, "option '--" ); add_error( ap,
options[index].long_name );
160 add_error( ap, "' requires an argument" );
161 return 1;
162 }
I think that at least the behaviour of ed -p '' should be changed to
make it not unexpectedly error.
o/
emanuele6
- ed -p '' errors, but shouldn't,
Emanuele Torre <=