diff --git a/ksh.changes b/ksh.changes index 4009ae2..360c472 100644 --- a/ksh.changes +++ b/ksh.changes @@ -1,3 +1,13 @@ +------------------------------------------------------------------- +Thu Dec 20 12:48:02 UTC 2012 - werner@suse.de + +- Add ksh93-dttree-crash.dif - Allow empty strings in (dt)trees + (bnc#795324) +- Modify ksh93-jobs.dif - make sure that tty is closed even if an + interrupt has been happen at close and also be aware that the + return value of tcgetpgrp() is greater than `1' that does not + match the process group ID of any existing process group (bnc#790315) + ------------------------------------------------------------------- Fri Oct 26 15:05:09 UTC 2012 - coolo@suse.com diff --git a/ksh.spec b/ksh.spec index d4027a9..cafae45 100644 --- a/ksh.spec +++ b/ksh.spec @@ -114,6 +114,7 @@ Patch27: astksh_builtin_poll20120806_001.diff Patch28: ksh93-env.dif Patch29: ksh93-zerofill.dif Patch30: ksh93-pathtemp.dif +Patch31: ksh93-dttree-crash.dif Patch42: ksh-locale.patch %description @@ -200,6 +201,7 @@ fi %patch28 %patch29 %patch30 +%patch31 %build # diff --git a/ksh93-dttree-crash.dif b/ksh93-dttree-crash.dif new file mode 100644 index 0000000..7bb8c52 --- /dev/null +++ b/ksh93-dttree-crash.dif @@ -0,0 +1,11 @@ +--- src/lib/libast/include/cdt.h ++++ src/lib/libast/include/cdt.h 2012-12-20 11:37:28.641452879 +0000 +@@ -313,7 +313,7 @@ _END_EXTERNS_ + #define _DTCMP(dt,k1,k2,dc) \ + ((dc)->comparf ? (*(dc)->comparf)((dt), (k1), (k2), (dc)) : \ + (dc)->size > 0 ? memcmp((Void_t*)(k1), ((Void_t*)k2), (dc)->size) : \ +- strcmp((char*)(k1), ((char*)k2)) ) ++ strcmp((char*)(k1), ((char*)(k2 ? k2 : ""))) ) + + #define _DTHSH(dt,ky,dc) ((dc)->hashf ? (*(dc)->hashf)((dt), (ky), (dc)) : \ + dtstrhash(0, (ky), (dc)->size) ) diff --git a/ksh93-jobs.dif b/ksh93-jobs.dif index 81f677f..5c19f6b 100644 --- a/ksh93-jobs.dif +++ b/ksh93-jobs.dif @@ -1,6 +1,42 @@ --- src/cmd/ksh93/sh/jobs.c -+++ src/cmd/ksh93/sh/jobs.c 2011-08-15 18:43:23.005726321 +0200 -@@ -1103,7 +1103,7 @@ static struct process *job_bystring(regi ++++ src/cmd/ksh93/sh/jobs.c 2012-12-20 13:33:27.885452491 +0000 +@@ -638,12 +638,14 @@ void job_init(Shell_t *shp, int lflag) + /* This should have already been done by rlogin */ + register int fd; + register char *ttynam; ++ int err = errno; + #ifndef SIGTSTP + setpgid(0,shp->gd->pid); + #endif /*SIGTSTP */ + if(job.mypgid<0 || !(ttynam=ttyname(JOBTTY))) + return; +- close(JOBTTY); ++ while(close(JOBTTY)<0 && errno==EINTR) ++ errno = err; + if((fd = open(ttynam,O_RDWR)) <0) + return; + if(fd!=JOBTTY) +@@ -660,7 +662,7 @@ void job_init(Shell_t *shp, int lflag) + /* wait until we are in the foreground */ + while((job.mytgid=tcgetpgrp(JOBTTY)) != job.mypgid) + { +- if(job.mytgid == -1) ++ if(job.mytgid <= 0) + return; + /* Stop this shell until continued */ + signal(SIGTTIN,SIG_DFL); +@@ -833,7 +835,9 @@ static void job_set(register struct proc + if((pw->p_flag&P_STOPPED) || tcgetpgrp(job.fd) == shp->gd->pid) + tcsetpgrp(job.fd,pw->p_fgrp); + /* if job is stopped, resume it in the background */ +- job_unstop(pw); ++ if(!shp->forked) ++ job_unstop(pw); ++ shp->forked = 0; + #endif /* SIGTSTP */ + } + +@@ -1104,7 +1110,7 @@ static struct process *job_bystring(regi int job_kill(register struct process *pw,register int sig) { @@ -9,7 +45,7 @@ register pid_t pid; register int r; const char *msg; -@@ -1116,6 +1116,7 @@ int job_kill(register struct process *pw +@@ -1117,6 +1123,7 @@ int job_kill(register struct process *pw errno = ECHILD; if(pw==0) goto error; @@ -17,3 +53,11 @@ pid = pw->p_pid; #if SHOPT_COSHELL if(pw->p_cojob) +@@ -2043,6 +2050,7 @@ void job_fork(pid_t parent) + job.in_critical = 0; + break; + default: ++ job_chksave(parent); + jobfork=0; + job_unlock(); + break;