zsh-workers
 help / color / mirror / code / Atom feed
* BUG: doinsert() in NextStep/OpenStep 4.2
@ 1999-10-21 15:31 Brian Boonstra
  1999-10-21 17:55 ` Bart Schaefer
  0 siblings, 1 reply; 5+ messages in thread
From: Brian Boonstra @ 1999-10-21 15:31 UTC (permalink / raw)
  To: zsh-workers

Hi folks

	I just did a compile of the bart7 patchlevel on an OpenStep/Intel  
version 4.2 machine.  Building on OpenStep requires specifying a different  
compiler than the ancient gcc they give you, so I used

  % CC=/bin/cc ./configure

edited the linker commands in the makefile, and then ran Src/zsh.   I typed  
"ls", got a listing, and then zsh hung.  I investigated this bug, and to the  
best of my limited ability, here is a characterization:

First, I rebuilt with debugging symbols:

  % CC=/bin/cc ./configure --enable-zsh-debug

then I ran zsh.


	In another window, I opened gdb, and attached.  I (c)ontinued, then  
went to the bart7 window, and typed the single letter "l".  This is what I  
got from gdb:

(gdb) c
Reading in symbols for zle_misc.c...done.
Program generated(1): Memory access exception on address 0x0 (protection failure).
0x8b63f in doinsert (str=0xbfffeea8 "l") at zle_misc.c:54
54                  line[cs++] = *s == Meta ? *++s ^ 32 : *s;


I then set a breakpoint so I could get a better idea of what is going on,  
and here is what I saw:

(gdb) att 17401
Dynamic Linkeditor at 0x12000000 offset 0x0
Executable at 0x2000 offset 0x0
/NextLibrary/Frameworks/System.framework/Versions/A/System at 0x5000000 offset 0x0
0x507a4c8 in _read ()
(gdb) b zle_misc.c:54
(gdb) c

Breakpoint 1, doinsert (str=0xbfffeea8 "l") at zle_misc.c:54
54                  line[cs++] = *s == Meta ? *++s ^ 32 : *s;
(gdb) l
49              spaceinline(m * len);
50          else if(cs + m * len > ll)
51              spaceinline(cs + m * len - ll);
52          while(m--)
53              for(s = str; *s; s++)
54                  line[cs++] = *s == Meta ? *++s ^ 32 : *s;
55          if(neg)
56              cs += zmult * len;
57      }
58
(gdb) p line
Reading in symbols for lex.c...done.
$1 = (unsigned char *) 0xd0f94 "L"
(gdb) p s
$2 = 0xbfffeea8 "l"
(gdb) p len
$3 = 1
(gdb) p Meta
No symbol "Meta" in current context.
(gdb) p c1
$4 = 108
(gdb) p m
$5 = 0
(gdb) p cs
No symbol "cs" in current context.
(gdb)


History of zsh version 3 on OpenStep 4.2 (as I know it)

3.0.x does not compile
3.1.x compiles only after some patches, but has completion bugs
bart7 compiles with almost no trouble (some compiler and linker problems)
	but sees this bug



	That's all I know to do for now.  Does anyone have further advice on  
debugging this?  I'm a decent programmer, but no expert on shells or zsh.


			- Brian


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: BUG: doinsert() in NextStep/OpenStep 4.2
  1999-10-21 15:31 BUG: doinsert() in NextStep/OpenStep 4.2 Brian Boonstra
@ 1999-10-21 17:55 ` Bart Schaefer
  1999-10-21 19:28   ` Brian Boonstra
  0 siblings, 1 reply; 5+ messages in thread
From: Bart Schaefer @ 1999-10-21 17:55 UTC (permalink / raw)
  To: Brian Boonstra, zsh-workers

On Oct 21, 10:31am, Brian Boonstra wrote:
} Subject: BUG: doinsert() in NextStep/OpenStep 4.2
}
} I typed "ls", got a listing, and then zsh hung.
} 
} First, I rebuilt with debugging symbols:
} 
}   % CC=/bin/cc ./configure --enable-zsh-debug
} 
} then I ran zsh.
} 
} 	In another window, I opened gdb, and attached.

So did you attach after zsh was hung (as in your first example)?  Or did
you attach first and then try to get zsh to hang?  And did it hang, or
did you get a crash of some kind?  I can't be sure from your gdb trace.

BTW, here's an update of my "gdbterm" script / autoloaded function,
which is specifically meant for running gdb on interactive programs like
shells and editors:

------
#! /bin/sh
xterm -title GDBterm -e sh -c 'exec xterm -e gdb --tty=`tty` '"$*"
------

} (gdb) p Meta
} No symbol "Meta" in current context.
} (gdb) p cs
} No symbol "cs" in current context.

"Meta" and "cs" are #define'd.  "Meta" is always 0x83, but "cs" expands
to "zshcs" everywhere except in the spot where "zshcs" is defined.  This
is a hack to get around some system libraries (curses?) that also define
a symbol "cs".

} Breakpoint 1, doinsert (str=0xbfffeea8 "l") at zle_misc.c:54
} 54                  line[cs++] = *s == Meta ? *++s ^ 32 : *s;
} (gdb) l
} 49              spaceinline(m * len);
} 50          else if(cs + m * len > ll)
} 51              spaceinline(cs + m * len - ll);
} 52          while(m--)
} 53              for(s = str; *s; s++)
} 54                  line[cs++] = *s == Meta ? *++s ^ 32 : *s;
} 55          if(neg)
} 56              cs += zmult * len;
} 57      }
} 58
} (gdb) p s
} $2 = 0xbfffeea8 "l"
} (gdb) p m
} $5 = 0

And if you continue from this point, what happens?

Since m == 0 and s[1] == 0 it looks as if it should exit the loop.  I
guess we need to see the value of "zshcs" (aka "cs") to see if it is -1
or some other bad index into line[].

} 3.0.x does not compile

Not even 3.0.7?  What's the failure, again?

-- 
Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: BUG: doinsert() in NextStep/OpenStep 4.2
  1999-10-21 17:55 ` Bart Schaefer
@ 1999-10-21 19:28   ` Brian Boonstra
  1999-10-21 21:12     ` Bart Schaefer
  0 siblings, 1 reply; 5+ messages in thread
From: Brian Boonstra @ 1999-10-21 19:28 UTC (permalink / raw)
  To: Bart Schaefer; +Cc: zsh-workers

Bart wrote:
> So did you attach after zsh was hung (as in your first example)?  Or did
> you attach first and then try to get zsh to hang?  And did it hang, or
> did you get a crash of some kind?  I can't be sure from your gdb trace.

Sorry if I was unclear.  Perhaps the following snippet will be more  
informative (I'm still trying to work out what is relevant).   I attached  
before any kind of hang, continued, then typed the letter "l", which from  
previous experience gave a memory exception at line 54:

(gdb) att 22701
Dynamic Linkeditor at 0x12000000 offset 0x0
Executable at 0x2000 offset 0x0
/NextLibrary/Frameworks/System.framework/Versions/A/System at 0x5000000 offset 0x0
0x507a4c8 in _read ()
(gdb) c

Breakpoint 1, doinsert (str=0xbfffeea8 "l") at zle_misc.c:54
54                  line[cs++] = *s == Meta ? *++s ^ 32 : *s;
(gdb) p s
$4 = 0xbfffeea8 "l"
(gdb) p m
$5 = 0
(gdb) p zshcs
$6 = 0
(gdb) p line
$7 = (unsigned char *) 0xd0fbc "|"
(gdb) p *s
$8 = 108 'l'
(gdb) s
Program generated(1): Memory access exception on address 0x0 (protection failure).
0x8b517 in doinsert (str=0xbfffeea8 "l") at zle_misc.c:54
54                  line[cs++] = *s == Meta ? *++s ^ 32 : *s;



I have to say that I can't see why this line is failing.  Since zshcs==0,  
and *s!=Meta, this should just be setting line[0]="l" with no problem.  Is  
there something unusual I misunderstand about attaching debuggers to shells?

Lacking xterm, I did not try to use your shell code

> xterm -title GDBterm -e sh -c 'exec xterm -e gdb --tty=`tty` '"$*"

especially because I don't think my gdb accepts a --tty argument.

> } 3.0.x does not compile
>
> Not even 3.0.7?  What's the failure, again?

I hadn't tested 3.0.7 before, actually.  I just took a look at it, and it  
does compile, but gives a different kind of problem.  Any command (even  
"exit") ends up in the mini-editor until you Ctrl-C out of it, like this:

wo1203 % ls                                                /Cache/zsh/zsh-3.0.7
>
>
wo1203 % exit                                              /Cache/zsh/zsh-3.0.7
>
>
wo1203 %                                                   /Cache/zsh/zsh-3.0.7



It doesn't crash, though...and gdb given no indication of errors.  For  
grins, I tried the same breakpoint as for bart7, but (and this is kind of  
interesting) I never hit it at all.


Incidentally, for this email, both builds were configured with


CC=/bin/cc ./configure --enable-zsh-debug --enable-zsh-mem-debug  
--enable-zsh-mem-warning --enable-zsh-secure-free --enable-zsh-hash-debug



I'm ready to check out anything else about what's going on here -- just let  
me know what to look at!


	Best Regards,

		Brian


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: BUG: doinsert() in NextStep/OpenStep 4.2
  1999-10-21 19:28   ` Brian Boonstra
@ 1999-10-21 21:12     ` Bart Schaefer
  1999-10-21 22:06       ` Brian Boonstra
  0 siblings, 1 reply; 5+ messages in thread
From: Bart Schaefer @ 1999-10-21 21:12 UTC (permalink / raw)
  To: Brian Boonstra; +Cc: zsh-workers

On Oct 21,  2:28pm, Brian Boonstra wrote:
> Subject: Re: BUG: doinsert() in NextStep/OpenStep 4.2
> 
> (gdb) c
> 
> Breakpoint 1, doinsert (str=0xbfffeea8 "l") at zle_misc.c:54
> 54                  line[cs++] = *s == Meta ? *++s ^ 32 : *s;
> (gdb) s
> Program generated(1): Memory access exception on address 0x0 (protection failure).
> 0x8b517 in doinsert (str=0xbfffeea8 "l") at zle_misc.c:54
> 54                  line[cs++] = *s == Meta ? *++s ^ 32 : *s;

That sure looks like the debugger thinks a null pointer deref happened.

> I have to say that I can't see why this line is failing.  Since zshcs==0,  
> and *s!=Meta, this should just be setting line[0]="l" with no problem.  Is  
> there something unusual I misunderstand about attaching debuggers to shells?

Not that I can see ... but it may be that the debugger is confused.  Do you
get a crash at that point when running without the debugger attached?

> Lacking xterm, I did not try to use your shell code
> especially because I don't think my gdb accepts a --tty argument.

You can also redirect the I/O at the (gdb) prompt like this:

(gdb) run < /dev/ttypq 2>&1 > /dev/ttypq

but then you don't get keyboard signals from the new tty, so you can't debug
things that require interrupts.

> I hadn't tested 3.0.7 before, actually.  I just took a look at it, and it  
> does compile, but gives a different kind of problem.  Any command (even  
> "exit") ends up in the mini-editor until you Ctrl-C out of it, like this:
> 
> wo1203 % ls                                                /Cache/zsh/zsh-3.0.7
> >
> >
> wo1203 % exit                                              /Cache/zsh/zsh-3.0.7
> >
> >
> wo1203 %                                                   /Cache/zsh/zsh-3.0.7

That indicates that your RETURN key is not sending the character that zsh
has bound to the ZLE accept-line action.  Zsh is supposed to map both CR
and LF to the same thing on input so that this does not happen.  What if
you type Ctrl-J or Ctrl-M explicitly?

If one of those works, what is the output you get from "stty -a" ?

It may be that zsh is selecting the wrong terminal-manipulation package.
grep TERM config.h	might tell something.

You should try running both bart-7 and 3.0.7 as "zsh +Z" to turn off the
line editor, to see if the problems are related to terminal handling.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: BUG: doinsert() in NextStep/OpenStep 4.2
  1999-10-21 21:12     ` Bart Schaefer
@ 1999-10-21 22:06       ` Brian Boonstra
  0 siblings, 0 replies; 5+ messages in thread
From: Brian Boonstra @ 1999-10-21 22:06 UTC (permalink / raw)
  To: Bart Schaefer; +Cc: zsh-workers

You wrote:
> > I have to say that I can't see why this line is failing. Since zshcs==0,
> > and *s!=Meta, this should just be setting line[0]="l" with no problem. Is
> > there something unusual I misunderstand about attaching debuggers to
> > shells?
>
> Not that I can see ... but it may be that the debugger is confused.  Do you
> get a crash at that point when running without the debugger attached?

	Yes, I did.  But only on the config with --enable-zsh-debug.  When I  
config normally, I get a hang after a command has finished, like this:

wo1203 % Src/zsh +Z
wo1203 % ls
ChangeLog       INSTALL         StartupFiles/   config.h        install-sh*
ChangeLog.3.0   META-FAQ        Util/           config.h.in     mkinstalldirs*
Completion/     Makefile        acconfig.h      config.log      stamp-h
Config/         Makefile.in     aclocal.m4      config.status*  stamp-h.in
Doc/            Misc/           aczsh.m4        config.sub*
Etc/            README          config.cache    configure*
Functions/      Src/            config.guess*   configure.in

** hung here (killed from another terminal window)

> > [problem with remaining in mini-editor in 3.0.7]

>  That indicates that your RETURN key is not sending the
>  character that zsh has bound to the ZLE accept-line
>  action.  Zsh is supposed to map both CR and LF to the
>  same thing on input so that this does not happen.  What
>  if you type Ctrl-J or Ctrl-M explicitly?

It still stays in the mini-editor -- never getting the accept-line, I guess.  
 Is it possible zsh isn't binding any such character?


>  If one of those works, what is the output you get from
>  "stty -a" ?

Neither worked, but I ran "stty all" in each.  For both 3.0.7 and bart-7 I got:

wo1203 % stty all                            /Cache/zsh/zsh-3.1.6-bart-7
new tty, speed 38400 baud, 55 rows, 94 columns; -tabs
crt pass8
pass8out
erase  kill   werase rprnt  flush  lnext  susp   intr   quit   stop   eof
^?     ^U     ^W     ^R     ^O     ^V     ^Z/^Y  ^C     ^\     ^S/^Q  ^D     



>  It may be that zsh is selecting the wrong
>  terminal-manipulation package.  grep TERM config.h
>  might tell something.

wo1203 % grep TERM config.h            /Cache/zsh/zsh-3.1.6-bart-7
/* #undef HAVE_TERMCAP_H */
/* #undef HAVE_TERMIO_H */
#define HAVE_TERMIOS_H 1

	I took a look at that header, and there was some NeXT-specific stuff  
in it (according to whether _NEXT_SOURCE is set) that--for all I know--is  
causing the problem.  I've included it below.  I tried a new build of bart-7  
having added -D_NEXT_SOURCE to the compiler flags, but got the same hanging  
behavior:

wo1203 % ls                             /Cache/zsh/zsh-3.1.6-bart-7
ChangeLog       INSTALL         StartupFiles/   config.h        install-sh*
ChangeLog.3.0   META-FAQ        Util/           config.h.in     mkinstalldirs*
Completion/     Makefile        acconfig.h      config.log      stamp-h
Config/         Makefile.in     aclocal.m4      config.status*  stamp-h.in
Doc/            Misc/           aczsh.m4        config.sub*
Etc/            README          config.cache    configure*
Functions/      Src/            config.guess*   configure.in

** (hung here)


>  You should try running both bart-7 and 3.0.7 as "zsh +Z"
>  to turn off the line editor, to see if the problems are
>  related to terminal handling.

	They must be, at least in the case of 3.0.7.  When I ran 3.0.7 as  
"zsh +Z", it seemed to work just fine.   Nice deductive work, there!

	On the other hand, running bart-7 this way did not solve the hanging  
problem.  I would like to check a backtrace in gdb to see where it is  
hanging, but of course the debug build exhibits that immediate crash on the  
first character typed, rather than the hang after the command finishes  
executing.  Any other reasonable avenues of investigation?


             Best Regards,


		Brian




---------------  /usr/include/bsd/sys/termios.h ---------------------


/*
 *  termios structure
 */
#ifndef _TERMIOS_H_
#define _TERMIOS_H_

/*
 * Special Control Characters
 *
 * Index into c_cc[] character array.
 *
 *	Name	     Subscript	Enabled by
 */
#define	VEOF		0				/* ICANON */
#define	VEOL		1				/* ICANON */
#define	VERASE		2				/* ICANON */
#define VKILL		3				/* ICANON */
#define VINTR		4				/* ISIG */
#define VQUIT		5				/* ISIG */
#define VSUSP		6				/* ISIG */
#define VSTART		7				/* IXON, IXOFF */
#define VSTOP		8				/* IXON, IXOFF */
#define VMIN		9				/* !ICANON */
#define VTIME		10				/* !ICANON */

#if defined(_NEXT_SOURCE)
#define VWERASE 	11				/* ICANON */
#define VREPRINT 	12				/* ICANON */
#define VLNEXT		13				/* IEXTEN */
#define VDISCARD	14				/* IEXTEN */
#define VDSUSP		15				/* ISIG */
#define VQUOTE		16				/* ICANON */
#endif 	/* _NEXT_SOURCE */

#define	NCCS		17

/*
 * Input flags - software input processing
 */
#define	IGNBRK		0x00000001	/* ignore BREAK condition */
#define	BRKINT		0x00000002	/* map BREAK to SIGINTR */
#define	IGNPAR		0x00000004	/* ignore (discard) parity errors */
#define	PARMRK		0x00000008	/* mark parity and framing errors */
#define	INPCK		0x00000010	/* enable checking of parity errors */
#define	ISTRIP		0x00000020	/* strip 8th bit off chars */
#define	INLCR		0x00000040	/* map NL into CR */
#define	IGNCR		0x00000080	/* ignore CR */
#define	ICRNL		0x00000100	/* map CR to NL (ala CRMOD) */
#define	IXON		0x00000200	/* enable output flow control */
#define	IXOFF		0x00000400	/* enable input flow control */

#if defined(_NEXT_SOURCE)
#define	IXANY		0x00000800	/* any char will restart after stop */
#define IMAXBEL		0x00002000	/* ring bell on input queue full */
#endif	 /* _NEXT_SOURCE */

/*
 * Output flags - software output processing
 */
#define	OPOST		0x00000001	/* enable following output processing */
#if defined(_NEXT_SOURCE)
#define ONLCR		0x00000002	/* map NL to CR-NL (ala CRMOD) */
	/* use the same bits as old delay flags */
#define	NLDELAY		0x00000300	/* \n delay */
#define		NL0	0x00000000
#define		NL1	0x00000100	/* tty 37 */
#define		NL2	0x00000200	/* vt05 */
#define		NL3	0x00000300
#define	TBDELAY		0x00000c00	/* horizontal tab delay */
#define		TAB0	0x00000000
#define		TAB1	0x00000400	/* tty 37 */
#define		TAB2	0x00000800
#define	XTABS		0x00000c00	/* expand tabs on output */
#define	CRDELAY		0x00003000	/* \r delay */
#define		CR0	0x00000000
#define		CR1	0x00001000	/* tn 300 */
#define		CR2	0x00002000	/* tty 37 */
#define		CR3	0x00003000	/* concept 100 */
#define	VTDELAY		0x00004000	/* vertical tab delay */
#define		FF0	0x00000000
#define		FF1	0x00004000	/* tty 37 */
#define	BSDELAY		0x00008000	/* \b delay */
#define		BS0	0x00000000
#define		BS1	0x00008000
#define	ALLDELAY	(NLDELAY|TBDELAY|CRDELAY|VTDELAY|BSDELAY)
#endif	/* _NEXT_SOURCE */

/*
 * Control flags - hardware control of terminal
 */
#if defined(_NEXT_SOURCE)
#define	CIGNORE		0x00000001	/* ignore control flags */
#endif	/* _NEXT_SOURCE */

#define CSIZE		0x00000300	/* character size mask */
#define     CS5		    0x00000000	    /* 5 bits (pseudo) */
#define     CS6		    0x00000100	    /* 6 bits */
#define     CS7		    0x00000200	    /* 7 bits */
#define     CS8		    0x00000300	    /* 8 bits */
#define CSTOPB		0x00000400	/* send 2 stop bits */
#define CREAD		0x00000800	/* enable receiver */
#define PARENB		0x00001000	/* parity enable */
#define PARODD		0x00002000	/* odd parity, else even */
#define HUPCL		0x00004000	/* hang up on last close */
#define CLOCAL		0x00008000	/* ignore modem status lines */

#if defined(_NEXT_SOURCE)
#define CSTOPB110	0x00010000
#define PAR0		0x00020000	/* Space parity */
#define PAR1		0x00040000	/* Mark parity */
#endif	/* _NEXT_SOURCE */


/*
 * "Local" flags - dumping ground for other state
 *
 * Warning: some flags in this structure begin with
 * the letter "I" and look like they belong in the
 * input flag.
 */

#if defined(_NEXT_SOURCE)
#define	ECHOKE		0x00000001	/* visual erase for line kill */
#endif	/* _NEXT_SOURCE */

#define	ECHOE		0x00000002	/* visually erase chars */
#define	ECHOK		0x00000004	/* echo NL after line kill */
#define ECHO		0x00000008	/* enable echoing */
#define	ECHONL		0x00000010	/* echo NL even if ECHO is off */
#define	ICANON		0x00000020	/* canonicalize input lines */
#define	ISIG		0x00000040	/* enable signals INTR, QUIT, [D]SUSP */
#define	IEXTEN		0x00000080	/* enable DISCARD and LNEXT */

#if defined(_NEXT_SOURCE)
#define	ECHOCRT		0x00000100	/* visual erase mode for crt */
#define	ECHOPRT		0x00000200	/* visual erase mode for hardcopy */
#define ECHOCTL  	0x00000400	/* echo control chars as ^(Char) */
#define ALTWERASE	0x00000800	/* use alternate WERASE algorithm */
#define	MDMBUF		0x00100000	/* flow control output via Carrier */
#endif	/* _NEXT_SOURCE */

#define TOSTOP		0x00400000	/* stop background jobs from output */

#if defined(_NEXT_SOURCE)
#define XLCASE		0x04000000
#define XEUCBKSP	0x08000000
#endif	/* _NEXT_SOURCE */

#define	NOFLSH		0x80000000	/* don't flush after interrupt */

typedef unsigned long	tcflag_t;
typedef unsigned char	cc_t;
typedef char		speed_t;

struct termios {
	tcflag_t	c_iflag;	/* input flags */
	tcflag_t	c_oflag;	/* output flags */
	tcflag_t	c_cflag;	/* control flags */
	tcflag_t	c_lflag;	/* local flags */
	cc_t		c_cc[NCCS];	/* control chars */
	speed_t		c_ispeed;	/* input speed */
	speed_t		c_ospeed;	/* output speed */
};

/*
 * Commands passed to tcsetattr() for setting the termios structure.
 */
#define	TCSANOW		0		/* make change immediate */
#define	TCSADRAIN	1		/* drain output, then change */
#define	TCSAFLUSH	2		/* drain output, flush input */

#if defined(_NEXT_SOURCE)
#define TCSASOFT	0x10		/* flag - don't alter h.w. state */
#endif	/* _NEXT_SOURCE */

/*
 * Standard speeds
 */
#import <sys/ttydev.h>

#ifndef KERNEL

#ifdef __STDC__
speed_t	cfgetispeed(const struct termios *);
speed_t	cfgetospeed(const struct termios *);
int	cfsetispeed(struct termios *, int);
int	cfsetospeed(struct termios *, int);
int	tcdrain(int);
int	tcflow(int, int);
int	tcflush(int, int);
int	tcgetattr(int, struct termios *);
int	tcsendbreak(int, int);
int	tcsetattr(int, int, const struct termios *);

#if defined(_NEXT_SOURCE)
void	cfmakeraw(struct termios *);
void	cfsetspeed(struct termios *, int);
#endif	/* _NEXT_SOURCE */
#endif /* __STDC__ */

#define	TCIFLUSH	1
#define	TCOFLUSH	2
#define TCIOFLUSH	3
#define	TCOOFF		1
#define	TCOON		2
#define TCIOFF		3
#define TCION		4

#endif /* !KERNEL */

/*
 * END OF PROTECTED INCLUDE.
 */
#endif /* !_TERMIOS_H_ */


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~1999-10-22  7:00 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1999-10-21 15:31 BUG: doinsert() in NextStep/OpenStep 4.2 Brian Boonstra
1999-10-21 17:55 ` Bart Schaefer
1999-10-21 19:28   ` Brian Boonstra
1999-10-21 21:12     ` Bart Schaefer
1999-10-21 22:06       ` Brian Boonstra

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).