Hi! ----
While doing some testing for ksh93-integration update2 on B111 I hit the following "dbx -access" error in usr/src/lib/libshell/common/edit/edit.c and I am not able to make heads or tails from this issue (or I am always working at night and don't sot the error then): -- snip -- <rtc> Read from uninitialized (rui): Attempting to read 4 bytes at address 0x80472dc which is 40 bytes above the current stack pointer =>[1] tty_get(fd = 0, tty = 0x80472dc), line 190 in "edit.c" [2] tty_check(fd = 0), line 165 in "edit.c" [3] sh_iocheckfd(shp = 0x82269f4, fd = 0), line 1817 in "io.c" [4] sh_iostream(shp = 0x82269f4, fd = 0), line 471 in "io.c" [5] sh_ioinit(shp = 0x82269f4), line 405 in "io.c" [6] sh_init(argc = 3, argv = 0x80479bc, userinit = (nil)), line 1087 in "init.c" [7] sh_main(ac = 3, av = 0x80479bc, userinit = (nil)), line 156 in "main.c" [8] main(argc = 3, argv = 0x80479bc), line 46 in "pmain.c" -- snip -- ... but looking at the matching section of code in "edit.c" ... -- snip -- 155 156 /* 157 * This routine returns true if fd refers to a terminal 158 * This should be equivalent to isatty 159 */ 160 int tty_check(int fd) 161 { 162 register Edit_t *ep = (Edit_t*)(sh_getinterp()->ed_context); 163 struct termios tty; 164 ep->e_savefd = -1; 165 return(tty_get(fd,&tty)==0); 166 } 167 168 /* 169 * Get the current terminal attributes 170 * This routine remembers the attributes and just returns them if it 171 * is called again without an intervening tty_set() 172 */ 173 174 int tty_get(register int fd, register struct termios *tty) 175 { 176 register Edit_t *ep = (Edit_t*)(sh_getinterp()->ed_context); 177 if(fd == ep->e_savefd) 178 *tty = ep->e_savetty; 179 else 180 { 181 while(tcgetattr(fd,tty) == SYSERR) 182 { 183 if(errno !=EINTR) 184 return(SYSERR); 185 errno = 0; 186 } 187 /* save terminal settings if in cannonical state */ 188 if(ep->e_raw==0) 189 { 190 ep->e_savetty = *tty; 191 ep->e_savefd = fd; 192 } 193 } 194 return(0); 195 } 196 197 /* 198 * Set the terminal attributes 199 * If fd<0, then current attributes are invalidated 200 */ -- snip -- ... the loop in line 181 only loops for errors, if |tcgetattr()| returns success (or better: A non-|-1| return code (|SYSERR| is a #define to |-1|)) the code moves forward to line 190. Where is the error in this case - is there any condition when |tcgetattr()| returns "success" but doesn't fill-out the |struct termios| structure passed via |tty| ? Compiler/dbx versions are (note I am using the Ceres dbx since SS12 dbx's "check -access" is broken in B111): $ cc -V cc: Sun C 5.9 SunOS_i386 Patch 124868-07 2008/10/07 usage: cc [ options] files. Use 'cc -flags' for details $ /opt/SS_express200811v2/SUNWspro/bin/dbx -V Sun Ceres DBX Debugger 7.7 SunOS_i386 2008/10/22 ---- Bye, Roland -- __ . . __ (o.\ \/ /.o) roland.mainz at nrubsig.org \__\/\/__/ MPEG specialist, C&&JAVA&&Sun&&Unix programmer /O /==\ O\ TEL +49 641 3992797 (;O/ \/ \O;)