Changeset 883 for trunk/src/ash-messup/error.c
- Timestamp:
- Apr 21, 2007, 10:55:18 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/ash-messup/error.c
r809 r883 61 61 #include "error.h" 62 62 #include "show.h" 63 #include "shinstance.h" 63 64 64 65 … … 67 68 */ 68 69 69 struct jmploc *handler;70 /*struct jmploc *handler; 70 71 int exception; 71 72 volatile int suppressint; 72 73 volatile int intpending; 73 char *commandname; 74 75 76 static void exverror( int, const char *, va_list)77 __attribute__((__noreturn__));74 char *commandname;*/ 75 76 77 static void exverror(shinstance *psh, int, const char *, va_list) 78 /*__attribute__((__noreturn__))*/; 78 79 79 80 /* … … 84 85 85 86 void 86 exraise( int e)87 { 88 if ( handler == NULL)87 exraise(shinstance *psh, int e) 88 { 89 if (psh->handler == NULL) 89 90 abort(); 90 exception = e;91 longjmp( handler->loc, 1);91 psh->exception = e; 92 longjmp(psh->handler->loc, 1); 92 93 } 93 94 … … 104 105 105 106 void 106 onint( void)107 { 108 s igset_t nsigset;109 110 if ( suppressint) {111 intpending = 1;107 onint(shinstance *psh) 108 { 109 sh_sigset_t nsigset; 110 111 if (psh->suppressint) { 112 psh->intpending = 1; 112 113 return; 113 114 } 114 intpending = 0;115 s igemptyset(&nsigset);116 s igprocmask(SIG_SETMASK, &nsigset, NULL);117 if ( rootshell &&iflag)118 exraise( EXINT);115 psh->intpending = 0; 116 sh_sigemptyset(&nsigset); 117 sh_sigprocmask(psh, SIG_SETMASK, &nsigset, NULL); 118 if (psh->rootshell && psh->iflag) 119 exraise(psh, EXINT); 119 120 else { 120 s ignal(SIGINT, SIG_DFL);121 raise(SIGINT);121 sh_signal(psh, SIGINT, SIG_DFL); 122 sh_raise_sigint(psh);/*raise(psh, SIGINT);*/ 122 123 } 123 124 /* NOTREACHED */ … … 125 126 126 127 static void 127 exvwarning( int sv_errno, const char *msg, va_list ap)128 exvwarning(shinstance *psh, int sv_errno, const char *msg, va_list ap) 128 129 { 129 130 /* Partially emulate line buffered output so that: … … 133 134 * both generate sensible text when stdout and stderr are merged. 134 135 */ 135 if ( output.nextc != output.buf &&output.nextc[-1] == '\n')136 flushout(& output);137 if ( commandname)138 outfmt(& errout, "%s: ",commandname);136 if (psh->output.nextc != psh->output.buf && psh->output.nextc[-1] == '\n') 137 flushout(&psh->output); 138 if (psh->commandname) 139 outfmt(&psh->errout, "%s: ", psh->commandname); 139 140 if (msg != NULL) { 140 doformat(& errout, msg, ap);141 doformat(&psh->errout, msg, ap); 141 142 if (sv_errno >= 0) 142 outfmt(& errout, ": ");143 outfmt(&psh->errout, ": "); 143 144 } 144 145 if (sv_errno >= 0) 145 outfmt(& errout, "%s", strerror(sv_errno));146 out2c( '\n');147 flushout(& errout);146 outfmt(&psh->errout, "%s", strerror(sv_errno)); 147 out2c(psh, '\n'); 148 flushout(&psh->errout); 148 149 } 149 150 … … 154 155 */ 155 156 static void 156 exverror( int cond, const char *msg, va_list ap)157 exverror(shinstance *psh, int cond, const char *msg, va_list ap) 157 158 { 158 159 CLEAR_PENDING_INT; … … 168 169 #endif 169 170 if (msg) 170 exvwarning( -1, msg, ap);171 172 output_flushall( );173 exraise( cond);171 exvwarning(psh, -1, msg, ap); 172 173 output_flushall(psh); 174 exraise(psh, cond); 174 175 /* NOTREACHED */ 175 176 } … … 177 178 178 179 void 179 error( const char *msg, ...)180 error(shinstance *psh, const char *msg, ...) 180 181 { 181 182 va_list ap; 182 183 183 184 va_start(ap, msg); 184 exverror( EXERROR, msg, ap);185 exverror(psh, EXERROR, msg, ap); 185 186 /* NOTREACHED */ 186 187 va_end(ap); … … 189 190 190 191 void 191 exerror( int cond, const char *msg, ...)192 exerror(shinstance *psh, int cond, const char *msg, ...) 192 193 { 193 194 va_list ap; 194 195 195 196 va_start(ap, msg); 196 exverror( cond, msg, ap);197 exverror(psh, cond, msg, ap); 197 198 /* NOTREACHED */ 198 199 va_end(ap); … … 204 205 205 206 void 206 sh_exit( int rval)207 { 208 exerrno = rval & 255;209 exraise( EXEXEC);210 } 211 212 void 213 sh_err( int status, const char *fmt, ...)207 sh_exit(shinstance *psh, int rval) 208 { 209 psh->exerrno = rval & 255; 210 exraise(psh, EXEXEC); 211 } 212 213 void 214 sh_err(shinstance *psh, int status, const char *fmt, ...) 214 215 { 215 216 va_list ap; 216 217 217 218 va_start(ap, fmt); 218 exvwarning( errno, fmt, ap);219 va_end(ap); 220 sh_exit( status);221 } 222 223 void 224 sh_verr( int status, const char *fmt, va_list ap)225 { 226 exvwarning( errno, fmt, ap);227 sh_exit( status);228 } 229 230 void 231 sh_errx( int status, const char *fmt, ...)219 exvwarning(psh, errno, fmt, ap); 220 va_end(ap); 221 sh_exit(psh, status); 222 } 223 224 void 225 sh_verr(shinstance *psh, int status, const char *fmt, va_list ap) 226 { 227 exvwarning(psh, errno, fmt, ap); 228 sh_exit(psh, status); 229 } 230 231 void 232 sh_errx(shinstance *psh, int status, const char *fmt, ...) 232 233 { 233 234 va_list ap; 234 235 235 236 va_start(ap, fmt); 236 exvwarning( -1, fmt, ap);237 va_end(ap); 238 sh_exit( status);239 } 240 241 void 242 sh_verrx( int status, const char *fmt, va_list ap)243 { 244 exvwarning( -1, fmt, ap);245 sh_exit( status);246 } 247 248 void 249 sh_warn( const char *fmt, ...)237 exvwarning(psh, -1, fmt, ap); 238 va_end(ap); 239 sh_exit(psh, status); 240 } 241 242 void 243 sh_verrx(shinstance *psh, int status, const char *fmt, va_list ap) 244 { 245 exvwarning(psh, -1, fmt, ap); 246 sh_exit(psh, status); 247 } 248 249 void 250 sh_warn(shinstance *psh, const char *fmt, ...) 250 251 { 251 252 va_list ap; 252 253 253 254 va_start(ap, fmt); 254 exvwarning( errno, fmt, ap);255 va_end(ap); 256 } 257 258 void 259 sh_vwarn( const char *fmt, va_list ap)260 { 261 exvwarning( errno, fmt, ap);262 } 263 264 void 265 sh_warnx( const char *fmt, ...)255 exvwarning(psh, errno, fmt, ap); 256 va_end(ap); 257 } 258 259 void 260 sh_vwarn(shinstance *psh, const char *fmt, va_list ap) 261 { 262 exvwarning(psh, errno, fmt, ap); 263 } 264 265 void 266 sh_warnx(shinstance *psh, const char *fmt, ...) 266 267 { 267 268 va_list ap; 268 269 269 270 va_start(ap, fmt); 270 exvwarning( -1, fmt, ap);271 va_end(ap); 272 } 273 274 void 275 sh_vwarnx( const char *fmt, va_list ap)276 { 277 exvwarning( -1, fmt, ap);271 exvwarning(psh, -1, fmt, ap); 272 va_end(ap); 273 } 274 275 void 276 sh_vwarnx(shinstance *psh, const char *fmt, va_list ap) 277 { 278 exvwarning(psh, -1, fmt, ap); 278 279 } 279 280 … … 357 358 358 359 const char * 359 errmsg( int e, int action)360 errmsg(shinstance *psh, int e, int action) 360 361 { 361 362 struct errname const *ep; 362 static char buf[12];363 /*static char buf[12];*/ 363 364 364 365 for (ep = errormsg ; ep->errcode ; ep++) { … … 366 367 return ep->msg; 367 368 } 368 fmtstr( buf, sizeofbuf, "error %d", e);369 return buf;370 } 369 fmtstr(psh->errmsg_buf, sizeof psh->errmsg_buf, "error %d", e); 370 return psh->errmsg_buf; 371 }
Note:
See TracChangeset
for help on using the changeset viewer.