Bug 32433

Summary: Cannot specify files beginning with + on ee command line.
Product: Base System Reporter: Mike Edenfield <kutulu>
Component: binAssignee: Maxim Konovalov <maxim>
Status: Closed FIXED    
Severity: Affects Only Me    
Priority: Normal    
Version: 4.4-STABLE   
Hardware: Any   
OS: Any   
Attachments:
Description Flags
file.diff none

Description Mike Edenfield 2001-12-02 02:10:01 UTC
The 'ee' command accepts a +# parameter, allowing one to jump 
immediately to a given line of the file specified on the command 
line.  This makes it impossible to edit files beginning with a +
without resorting to unusual syntax.  For ee, at least, tehre is
a simple fix for this problem.

(For the record, pico, vi, and vim also suffer from this problem,
however, vi/vim have alternate command-line options that start
with +, so the fix is not nearly as obvious).

Fix: A work-around for this problem is to specify a pathname to the 
file that does not begin with +, as in:

ee ./+CONTENTS
ee /var/pkg/db/zip-2.3/+DESC

This perhaps should be mentioned in the 'ee' man page,
especially given the presumed target audience for ee (namely,
beginners to FreeBSD and UNIX in general.)

However, since the only valid options for the + command-lnie
paramter are digits, ee can be fixed to work the way users
probably want it to work by simply ignoring + before non-digits:
How-To-Repeat: 
echo "This is a text file" > +CONTENTS
ee +CONTENTS
Comment 1 Mike Edenfield 2001-12-02 03:02:43 UTC
And of course, I completely screwed up the patch.  This is why I should
leave this stuff up to the professionals.  This one works, but it looks
ugly, so I'm sure there's a better way:

--- ee.c.old    Sat Dec  1 20:40:09 2001
+++ ee.c        Sat Dec  1 22:07:13 2001
@@ -2091,7 +2091,7 @@
                        fprintf(stderr, usage4);
                        exit(1);
                }
-               else if (*buff == '+')
+               else if ((*buff == '+') && (isdigit(*(buff + 1))))
                {
                        buff++;
                        start_at_line = buff;

--K
Comment 2 ru freebsd_committer freebsd_triage 2001-12-03 14:38:14 UTC
On Sat, Dec 01, 2001 at 07:10:01PM -0800, Kutulu wrote:
> The following reply was made to PR bin/32433; it has been noted by GNATS.
> 
> From: "Kutulu" <kutulu@kutulu.org>
> To: <freebsd-gnats-submit@FreeBSD.org>, "Kutulu" <kutulu@kutulu.org>
> Cc:  
> Subject: Re: bin/32433: Cannot specify files beginning with + on ee command line.
> Date: Sat, 1 Dec 2001 22:02:43 -0500
> 
>  And of course, I completely screwed up the patch.  This is why I should
>  leave this stuff up to the professionals.  This one works, but it looks
>  ugly, so I'm sure there's a better way:
>  
>  --- ee.c.old    Sat Dec  1 20:40:09 2001
>  +++ ee.c        Sat Dec  1 22:07:13 2001
>  @@ -2091,7 +2091,7 @@
>                          fprintf(stderr, usage4);
>                          exit(1);
>                  }
>  -               else if (*buff == '+')
>  +               else if ((*buff == '+') && (isdigit(*(buff + 1))))
>                  {
>                          buff++;
>                          start_at_line = buff;
>  
Err, this patch is not quite correct either, as it won't allow to
open files with a digit after a plus sign.  The correct thing to
here would be to check that there's still argument pending on a
command line, as "+offset" doesn't make any sense if specified
as a last argument.  ee(1) is the contributed software, and hence
doesn't use an unportable getopt(3) interface.  I'd also suggest
that the author introduce the support for "--" (cancel options
list processing), then the problem could be easily avoided (the
Unix way) like this: "ee ... +10 -- <any_name>".  Currently,
opening a file with the name of "-[ieh?]" doesn't work as well.
I've Cc:ed the author of this program.


Cheers,
-- 
Ruslan Ermilov		Oracle Developer/DBA,
ru@sunbay.com		Sunbay Software AG,
ru@FreeBSD.org		FreeBSD committer,
+380.652.512.251	Simferopol, Ukraine

http://www.FreeBSD.org	The Power To Serve
http://www.oracle.com	Enabling The Information Age
Comment 3 Dag-Erling Smørgrav freebsd_committer freebsd_triage 2001-12-04 02:01:43 UTC
State Changed
From-To: open->closed

Use 'ee -- +CONTENTS'.  This is standard behaviour for most Unix programs.
Comment 4 Dag-Erling Smørgrav freebsd_committer freebsd_triage 2001-12-04 02:02:32 UTC
State Changed
From-To: closed->open

Closed by mistake, I misunderstood the issue.
Comment 5 Zak Johnson 2002-06-20 00:05:53 UTC
Support for '--' to cancel options list processing has been added to ee
as of (at least) the current version, which is available at
http://mahon.cwx.net/sources/ee-1.4.5a.src.tgz .  Alternately, this
patch should do the trick.

-Zak

--- ee.c.orig	Sun Jun 16 00:49:28 2002
+++ ee.c	Wed Jun 19 19:00:43 2002
@@ -2051,6 +2051,7 @@
 	struct files *temp_names = NULL;
 	char *name;
 	char *ptr;
+	int no_more_opts = FALSE;
 
 	/*
 	 |	see if editor was invoked as 'ree' (restricted mode)
@@ -2067,7 +2068,7 @@
 	input_file = FALSE;
 	recv_file = FALSE;
 	count = 1;
-	while (count < numargs)
+	while ((count < numargs) && (!no_more_opts))
 	{
 		buff = arguments[count];
 		if (!strcmp("-i", buff))
@@ -2096,7 +2097,8 @@
 			buff++;
 			start_at_line = buff;
 		}
+		else if (!(strcmp("--", buff)))
+			no_more_opts = TRUE;
 		else
 		{
 			if (top_of_stack == NULL)
Comment 6 Maxim Konovalov freebsd_committer freebsd_triage 2003-06-30 12:53:33 UTC
State Changed
From-To: open->patched

Added a support for '--' to cancel options list processing in -CURRENT. 


Comment 7 Maxim Konovalov freebsd_committer freebsd_triage 2003-06-30 12:53:33 UTC
Responsible Changed
From-To: freebsd-bugs->maxim

MFC reminder.
Comment 8 Maxim Konovalov freebsd_committer freebsd_triage 2003-07-14 08:30:06 UTC
State Changed
From-To: patched->closed

Fixed in -STABLE as well.