ksh/ksh93-vi.dif

61 lines
1.3 KiB
Plaintext

--- src/cmd/ksh93/edit/vi.c
+++ src/cmd/ksh93/edit/vi.c 2007-03-28 18:41:47.032501418 +0200
@@ -401,6 +401,8 @@ int ed_viread(void *context, int fd, reg
if(!yankbuf)
yankbuf = (genchar*)malloc(MAXLINE*CHARSIZE);
+ if (!vp->lastline)
+ vp->lastline = (genchar*)malloc(MAXLINE*CHARSIZE);
if( vp->last_cmd == '\0' )
{
/*** first time for this shell ***/
@@ -410,6 +412,8 @@ int ed_viread(void *context, int fd, reg
vp->lastmotion = '\0';
vp->lastrepeat = 1;
vp->repeat = 1;
+ if (!yankbuf)
+ return(-1);
*yankbuf = 0;
}
@@ -1075,7 +1079,7 @@ static void cdelete(Vi_t *vp,register in
/*** save characters to be deleted ***/
- if( mode != 'c' )
+ if( mode != 'c' && yankbuf )
{
i = cp[nchars];
cp[nchars] = 0;
@@ -2047,6 +2051,9 @@ static void save_last(register Vi_t* vp)
{
register int i;
+ if (vp->lastline == NULL)
+ return;
+
if( (i = cur_virt - first_virt + 1) > 0 )
{
/*** save last thing user typed ***/
@@ -2292,6 +2299,11 @@ static int textmod(register Vi_t *vp,reg
p = yankbuf;
}
+ if (!p)
+ {
+ return(BAD);
+ }
+
addin:
switch( c )
{
@@ -2564,6 +2576,8 @@ yankeol:
vp->lastmotion = c;
if( c == 'y' )
{
+ if (!yankbuf)
+ return(BAD);
gencpy(yankbuf, virtual);
}
else if(!delmotion(vp, c, 'y'))