1 0 stevel /* 2 0 stevel * CDDL HEADER START 3 0 stevel * 4 0 stevel * The contents of this file are subject to the terms of the 5 2256 na195498 * Common Development and Distribution License (the "License"). 6 2256 na195498 * You may not use this file except in compliance with the License. 7 0 stevel * 8 0 stevel * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 0 stevel * or http://www.opensolaris.org/os/licensing. 10 0 stevel * See the License for the specific language governing permissions 11 0 stevel * and limitations under the License. 12 0 stevel * 13 0 stevel * When distributing Covered Code, include this CDDL HEADER in each 14 0 stevel * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 0 stevel * If applicable, add the following below this CDDL HEADER, with the 16 0 stevel * fields enclosed by brackets "[]" replaced with your own identifying 17 0 stevel * information: Portions Copyright [yyyy] [name of copyright owner] 18 0 stevel * 19 0 stevel * CDDL HEADER END 20 0 stevel */ 21 0 stevel 22 0 stevel /* 23 9369 Nobutomo * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24 0 stevel * Use is subject to license terms. 25 0 stevel */ 26 0 stevel 27 527 chin /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ 28 527 chin /* All Rights Reserved */ 29 0 stevel 30 0 stevel #ifndef _DEFS_H 31 0 stevel #define _DEFS_H 32 0 stevel 33 0 stevel #ifdef __cplusplus 34 0 stevel extern "C" { 35 0 stevel #endif 36 0 stevel 37 0 stevel /* 38 0 stevel * UNIX shell 39 0 stevel */ 40 0 stevel 41 0 stevel /* execute flags */ 42 0 stevel #define XEC_EXECED 01 43 0 stevel #define XEC_LINKED 02 44 0 stevel #define XEC_NOSTOP 04 45 0 stevel 46 0 stevel /* endjobs flags */ 47 0 stevel #define JOB_STOPPED 01 48 0 stevel #define JOB_RUNNING 02 49 0 stevel 50 0 stevel /* error exits from various parts of shell */ 51 0 stevel #define ERROR 1 52 0 stevel #define SYNBAD 2 53 0 stevel #define SIGFAIL 2000 54 0 stevel #define SIGFLG 0200 55 0 stevel 56 0 stevel /* command tree */ 57 0 stevel #define FPIN 0x0100 58 0 stevel #define FPOU 0x0200 59 0 stevel #define FAMP 0x0400 60 0 stevel #define COMMSK 0x00F0 61 9369 Nobutomo #define CNTMSK 0x000F /* this bit fields no longer used */ 62 0 stevel 63 0 stevel #define TCOM 0x0000 64 0 stevel #define TPAR 0x0010 65 0 stevel #define TFIL 0x0020 66 0 stevel #define TLST 0x0030 67 0 stevel #define TIF 0x0040 68 0 stevel #define TWH 0x0050 69 0 stevel #define TUN 0x0060 70 0 stevel #define TSW 0x0070 71 0 stevel #define TAND 0x0080 72 0 stevel #define TORF 0x0090 73 0 stevel #define TFORK 0x00A0 74 0 stevel #define TFOR 0x00B0 75 0 stevel #define TFND 0x00C0 76 0 stevel 77 0 stevel /* execute table */ 78 0 stevel #define SYSSET 1 79 0 stevel #define SYSCD 2 80 0 stevel #define SYSEXEC 3 81 0 stevel 82 0 stevel #ifdef RES /* include login code */ 83 0 stevel #define SYSLOGIN 4 84 0 stevel #else 85 0 stevel #define SYSNEWGRP 4 86 0 stevel #endif 87 0 stevel 88 0 stevel #define SYSTRAP 5 89 0 stevel #define SYSEXIT 6 90 0 stevel #define SYSSHFT 7 91 0 stevel #define SYSWAIT 8 92 0 stevel #define SYSCONT 9 93 0 stevel #define SYSBREAK 10 94 0 stevel #define SYSEVAL 11 95 0 stevel #define SYSDOT 12 96 0 stevel #define SYSRDONLY 13 97 0 stevel #define SYSTIMES 14 98 0 stevel #define SYSXPORT 15 99 0 stevel #define SYSNULL 16 100 0 stevel #define SYSREAD 17 101 0 stevel #define SYSTST 18 102 0 stevel 103 0 stevel #ifndef RES /* exclude umask code */ 104 0 stevel #define SYSUMASK 20 105 0 stevel #define SYSULIMIT 21 106 0 stevel #endif 107 0 stevel 108 0 stevel #define SYSECHO 22 109 0 stevel #define SYSHASH 23 110 0 stevel #define SYSPWD 24 111 0 stevel #define SYSRETURN 25 112 0 stevel #define SYSUNS 26 113 0 stevel #define SYSMEM 27 114 0 stevel #define SYSTYPE 28 115 0 stevel #define SYSGETOPT 29 116 0 stevel #define SYSJOBS 30 117 0 stevel #define SYSFGBG 31 118 0 stevel #define SYSKILL 32 119 0 stevel #define SYSSUSP 33 120 0 stevel #define SYSSTOP 34 121 0 stevel 122 0 stevel /* used for input and output of shell */ 123 0 stevel #define INIO 19 124 0 stevel 125 0 stevel /* io nodes */ 126 0 stevel #define USERIO 10 127 0 stevel #define IOUFD 15 128 5976 nakanon #define IODOC 0x0010 129 5976 nakanon #define IOPUT 0x0020 130 5976 nakanon #define IOAPP 0x0040 131 5976 nakanon #define IOMOV 0x0080 132 5976 nakanon #define IORDW 0x0100 133 5976 nakanon #define IOSTRIP 0x0200 134 5976 nakanon #define IODOC_SUBST 0x0400 135 0 stevel #define INPIPE 0 136 0 stevel #define OTPIPE 1 137 0 stevel 138 0 stevel /* arg list terminator */ 139 0 stevel #define ENDARGS 0 140 0 stevel 141 0 stevel #include <unistd.h> 142 527 chin #include "mac.h" 143 0 stevel #include "mode.h" 144 0 stevel #include "name.h" 145 0 stevel #include <signal.h> 146 0 stevel #include <sys/types.h> 147 0 stevel 148 0 stevel /* id's */ 149 0 stevel extern pid_t mypid; 150 0 stevel extern pid_t mypgid; 151 0 stevel extern pid_t mysid; 152 0 stevel 153 0 stevel /* getopt */ 154 0 stevel 155 0 stevel extern int optind; 156 0 stevel extern int opterr; 157 0 stevel extern int _sp; 158 0 stevel extern char *optarg; 159 0 stevel 160 0 stevel 161 0 stevel /* use sh-private versions of memory allocation routines */ 162 0 stevel 163 0 stevel #define alloc malloc 164 0 stevel 165 0 stevel /* result type declarations */ 166 0 stevel 167 0 stevel extern int handle(); 168 0 stevel extern void chktrap(); 169 527 chin extern void done(int) 170 527 chin __NORETURN; 171 0 stevel extern void sh_free(); 172 0 stevel extern unsigned char *make(); 173 0 stevel extern unsigned char *movstr(); 174 0 stevel extern unsigned char *movstrn(); 175 0 stevel extern unsigned char *cwdget(); 176 0 stevel extern struct trenod *cmd(); 177 0 stevel extern struct trenod *makefork(); 178 0 stevel extern struct namnod *lookup(); 179 0 stevel extern struct namnod *findnam(); 180 0 stevel extern struct dolnod *useargs(); 181 0 stevel extern float expr(); 182 0 stevel extern unsigned char *catpath(); 183 0 stevel extern unsigned char *getpath(); 184 0 stevel extern unsigned char *nextpath(); 185 0 stevel extern unsigned char **scan(); 186 0 stevel extern unsigned char *mactrim(); 187 0 stevel extern unsigned char *macro(); 188 527 chin extern void exname(struct namnod *); 189 527 chin extern void printnam(struct namnod *); 190 527 chin extern void printro(struct namnod *); 191 527 chin extern void printexp(struct namnod *); 192 0 stevel extern unsigned int readwc(); 193 0 stevel extern unsigned int nextwc(); 194 0 stevel extern unsigned char skipc(); 195 0 stevel extern unsigned char **local_setenv(); 196 0 stevel extern time_t time(); 197 527 chin extern void exitsh(int) 198 527 chin __NORETURN; 199 2256 na195498 extern void failed_real(unsigned char *, const char *, unsigned char *) 200 2256 na195498 __NORETURN; 201 2256 na195498 extern void error(const char *) __NORETURN; 202 527 chin extern void prf(); 203 527 chin extern void assign(struct namnod *, unsigned char *); 204 527 chin extern void setmode(int); 205 527 chin extern void trim(unsigned char *); 206 527 chin extern void preacct(unsigned char *); 207 9369 Nobutomo extern void addblok(unsigned int); 208 9369 Nobutomo extern void freetree(struct trenod *); 209 527 chin 210 527 chin 211 0 stevel 212 0 stevel #define attrib(n, f) (n->namflg |= f) 213 0 stevel #define round(a, b) (((int)(((char *)(a)+b)-1))&~((b)-1)) 214 2256 na195498 #define closepipe(x) (close(x[INPIPE]), close(x[OTPIPE])) 215 0 stevel #define eq(a, b) (cf(a, b) == 0) 216 0 stevel #define max(a, b) ((a) > (b)?(a):(b)) 217 0 stevel #define assert(x) 218 2256 na195498 #define _gettext(s) (unsigned char *)gettext(s) 219 2256 na195498 220 2256 na195498 /* 221 2256 na195498 * macros using failed_real(). Only s2 is gettext'd with both functions. 222 2256 na195498 */ 223 2256 na195498 #define failed(s1, s2) failed_real(s1, s2, NULL) 224 2256 na195498 #define bfailed(s1, s2, s3) failed_real(s1, s2, s3) 225 2256 na195498 226 2256 na195498 /* 227 2256 na195498 * macros using failure_real(). s1 and s2 is gettext'd with gfailure(), but 228 2256 na195498 * only s2 is gettext'd with failure(). 229 2256 na195498 */ 230 2256 na195498 #define failure(s1, s2) failure_real(s1, s2, 0) 231 2256 na195498 #define gfailure(s1, s2) failure_real(s1, s2, 1) 232 0 stevel 233 0 stevel /* temp files and io */ 234 0 stevel extern int output; 235 0 stevel extern int ioset; 236 0 stevel extern struct ionod *iotemp; /* files to be deleted sometime */ 237 0 stevel extern struct ionod *fiotemp; /* function files to be deleted sometime */ 238 0 stevel extern struct ionod *iopend; /* documents waiting to be read at NL */ 239 0 stevel extern struct fdsave fdmap[]; 240 0 stevel extern int savpipe; 241 0 stevel 242 0 stevel /* substitution */ 243 0 stevel extern int dolc; 244 0 stevel extern unsigned char **dolv; 245 0 stevel extern struct dolnod *argfor; 246 0 stevel extern struct argnod *gchain; 247 0 stevel 248 0 stevel /* stak stuff */ 249 0 stevel #include "stak.h" 250 0 stevel 251 0 stevel /* 252 0 stevel * If non-ANSI C, make const go away. We bring it back 253 0 stevel * at the end of the file to avoid side-effects. 254 0 stevel */ 255 0 stevel #ifndef __STDC__ 256 0 stevel #define const 257 0 stevel #endif 258 0 stevel 259 0 stevel /* string constants */ 260 0 stevel extern const char atline[]; 261 0 stevel extern const char readmsg[]; 262 0 stevel extern const char colon[]; 263 0 stevel extern const char minus[]; 264 0 stevel extern const char nullstr[]; 265 0 stevel extern const char sptbnl[]; 266 0 stevel extern const char unexpected[]; 267 0 stevel extern const char endoffile[]; 268 0 stevel extern const char synmsg[]; 269 0 stevel 270 0 stevel /* name tree and words */ 271 0 stevel extern const struct sysnod reserved[]; 272 0 stevel extern const int no_reserved; 273 0 stevel extern const struct sysnod commands[]; 274 0 stevel extern const int no_commands; 275 0 stevel 276 0 stevel extern int wdval; 277 0 stevel extern int wdnum; 278 0 stevel extern int fndef; 279 0 stevel extern int nohash; 280 0 stevel extern struct argnod *wdarg; 281 0 stevel extern int wdset; 282 0 stevel extern BOOL reserv; 283 0 stevel 284 0 stevel /* prompting */ 285 0 stevel extern const char stdprompt[]; 286 0 stevel extern const char supprompt[]; 287 0 stevel extern const char profile[]; 288 0 stevel extern const char sysprofile[]; 289 0 stevel 290 0 stevel /* locale testing */ 291 0 stevel extern const char localedir[]; 292 0 stevel extern int localedir_exists; 293 0 stevel 294 0 stevel /* built in names */ 295 0 stevel extern struct namnod fngnod; 296 0 stevel extern struct namnod cdpnod; 297 0 stevel extern struct namnod ifsnod; 298 0 stevel extern struct namnod homenod; 299 0 stevel extern struct namnod mailnod; 300 0 stevel extern struct namnod pathnod; 301 0 stevel extern struct namnod ps1nod; 302 0 stevel extern struct namnod ps2nod; 303 0 stevel extern struct namnod mchknod; 304 0 stevel extern struct namnod acctnod; 305 0 stevel extern struct namnod mailpnod; 306 0 stevel 307 0 stevel /* special names */ 308 0 stevel extern unsigned char flagadr[]; 309 0 stevel extern unsigned char *pcsadr; 310 0 stevel extern unsigned char *pidadr; 311 0 stevel extern unsigned char *cmdadr; 312 0 stevel 313 0 stevel /* names always present */ 314 0 stevel extern const char defpath[]; 315 0 stevel extern const char mailname[]; 316 0 stevel extern const char homename[]; 317 0 stevel extern const char pathname[]; 318 0 stevel extern const char cdpname[]; 319 0 stevel extern const char ifsname[]; 320 0 stevel extern const char ps1name[]; 321 0 stevel extern const char ps2name[]; 322 0 stevel extern const char mchkname[]; 323 0 stevel extern const char acctname[]; 324 0 stevel extern const char mailpname[]; 325 0 stevel 326 0 stevel /* transput */ 327 0 stevel extern unsigned char tmpout[]; 328 527 chin extern int tmpout_offset; 329 527 chin extern unsigned int serial; 330 0 stevel 331 527 chin /* 332 527 chin * allow plenty of room for size for temp file name: 333 527 chin * "/tmp/sh"(7) + <pid> (<=6) + <unsigned int #> (<=10) + \0 (1) 334 527 chin */ 335 527 chin #define TMPOUTSZ 32 336 0 stevel 337 0 stevel extern struct fileblk *standin; 338 0 stevel 339 0 stevel #define input (standin->fdes) 340 0 stevel #define eof (standin->feof) 341 0 stevel 342 0 stevel extern int peekc; 343 0 stevel extern int peekn; 344 0 stevel extern unsigned char *comdiv; 345 0 stevel extern 346 0 stevel #ifdef __STDC__ 347 0 stevel const 348 0 stevel #endif 349 0 stevel char devnull[]; 350 0 stevel 351 0 stevel /* flags */ 352 0 stevel #define noexec 01 353 0 stevel #define sysflg 01 354 0 stevel #define intflg 02 355 0 stevel #define prompt 04 356 0 stevel #define setflg 010 357 0 stevel #define errflg 020 358 0 stevel #define ttyflg 040 359 0 stevel #define forked 0100 360 0 stevel #define oneflg 0200 361 0 stevel #define rshflg 0400 362 0 stevel #define subsh 01000 363 0 stevel #define stdflg 02000 364 0 stevel #define STDFLG 's' 365 0 stevel #define execpr 04000 366 0 stevel #define readpr 010000 367 0 stevel #define keyflg 020000 368 0 stevel #define hashflg 040000 369 0 stevel #define nofngflg 0200000 370 0 stevel #define exportflg 0400000 371 0 stevel #define monitorflg 01000000 372 0 stevel #define jcflg 02000000 373 0 stevel #define privflg 04000000 374 0 stevel #define forcexit 010000000 375 0 stevel #define jcoff 020000000 376 0 stevel #define pfshflg 040000000 377 0 stevel 378 0 stevel extern long flags; 379 0 stevel extern int rwait; /* flags read waiting */ 380 0 stevel 381 0 stevel /* error exits from various parts of shell */ 382 0 stevel #include <setjmp.h> 383 0 stevel extern jmp_buf subshell; 384 0 stevel extern jmp_buf errshell; 385 0 stevel 386 0 stevel /* fault handling */ 387 0 stevel #include "brkincr.h" 388 0 stevel 389 0 stevel extern unsigned brkincr; 390 0 stevel #define MINTRAP 0 391 0 stevel #define MAXTRAP NSIG 392 0 stevel 393 0 stevel #define TRAPSET 2 394 0 stevel #define SIGSET 4 395 0 stevel #define SIGMOD 8 396 0 stevel #define SIGIGN 16 397 0 stevel 398 0 stevel extern BOOL trapnote; 399 0 stevel 400 0 stevel /* name tree and words */ 401 0 stevel extern unsigned char **environ; 402 0 stevel extern unsigned char numbuf[]; 403 0 stevel extern const char export[]; 404 0 stevel extern const char duperr[]; 405 0 stevel extern const char readonly[]; 406 0 stevel 407 0 stevel /* execflgs */ 408 0 stevel extern int exitval; 409 0 stevel extern int retval; 410 0 stevel extern BOOL execbrk; 411 0 stevel extern int loopcnt; 412 0 stevel extern int breakcnt; 413 0 stevel extern int funcnt; 414 0 stevel extern int tried_to_exit; 415 0 stevel 416 0 stevel /* messages */ 417 0 stevel extern const char mailmsg[]; 418 0 stevel extern const char coredump[]; 419 0 stevel extern const char badopt[]; 420 0 stevel extern const char badparam[]; 421 0 stevel extern const char unset[]; 422 0 stevel extern const char badsub[]; 423 0 stevel extern const char nospace[]; 424 0 stevel extern const char nostack[]; 425 0 stevel extern const char notfound[]; 426 0 stevel extern const char badtrap[]; 427 0 stevel extern const char baddir[]; 428 0 stevel extern const char badshift[]; 429 0 stevel extern const char restricted[]; 430 0 stevel extern const char execpmsg[]; 431 0 stevel extern const char notid[]; 432 0 stevel extern const char badulimit[]; 433 0 stevel extern const char ulimit[]; 434 0 stevel extern const char wtfailed[]; 435 0 stevel extern const char badcreate[]; 436 0 stevel extern const char nofork[]; 437 0 stevel extern const char noswap[]; 438 0 stevel extern const char piperr[]; 439 0 stevel extern const char badopen[]; 440 0 stevel extern const char badnum[]; 441 0 stevel extern const char badsig[]; 442 0 stevel extern const char badid[]; 443 0 stevel extern const char arglist[]; 444 0 stevel extern const char txtbsy[]; 445 0 stevel extern const char toobig[]; 446 0 stevel extern const char badexec[]; 447 0 stevel extern const char badfile[]; 448 0 stevel extern const char badreturn[]; 449 0 stevel extern const char badexport[]; 450 0 stevel extern const char badunset[]; 451 0 stevel extern const char nohome[]; 452 0 stevel extern const char badperm[]; 453 0 stevel extern const char mssgargn[]; 454 0 stevel extern const char libacc[]; 455 0 stevel extern const char libbad[]; 456 0 stevel extern const char libscn[]; 457 0 stevel extern const char libmax[]; 458 0 stevel extern const char emultihop[]; 459 0 stevel extern const char nulldir[]; 460 0 stevel extern const char enotdir[]; 461 0 stevel extern const char enoent[]; 462 0 stevel extern const char eacces[]; 463 0 stevel extern const char enolink[]; 464 0 stevel extern const char exited[]; 465 0 stevel extern const char running[]; 466 0 stevel extern const char ambiguous[]; 467 0 stevel extern const char nosuchjob[]; 468 0 stevel extern const char nosuchpid[]; 469 0 stevel extern const char nosuchpgid[]; 470 0 stevel extern const char usage[]; 471 0 stevel extern const char nojc[]; 472 0 stevel extern const char killuse[]; 473 0 stevel extern const char jobsuse[]; 474 0 stevel extern const char stopuse[]; 475 0 stevel extern const char ulimuse[]; 476 0 stevel extern const char nocurjob[]; 477 0 stevel extern const char loginsh[]; 478 0 stevel extern const char jobsstopped[]; 479 0 stevel extern const char jobsrunning[]; 480 2256 na195498 extern const char nlorsemi[]; 481 2256 na195498 extern const char signalnum[]; 482 2256 na195498 extern const char badpwd[]; 483 2256 na195498 extern const char badlocale[]; 484 2256 na195498 extern const char nobracket[]; 485 2256 na195498 extern const char noparen[]; 486 2256 na195498 extern const char noarg[]; 487 0 stevel 488 0 stevel /* 'builtin' error messages */ 489 0 stevel 490 0 stevel extern const char btest[]; 491 0 stevel extern const char badop[]; 492 0 stevel 493 0 stevel #ifndef __STDC__ 494 0 stevel #undef const /* bring back const */ 495 0 stevel #endif 496 0 stevel 497 0 stevel /* fork constant */ 498 0 stevel 499 0 stevel #define FORKLIM 32 500 0 stevel 501 0 stevel extern address end[]; 502 0 stevel 503 0 stevel #include "ctype.h" 504 0 stevel #include <ctype.h> 505 0 stevel #include <locale.h> 506 0 stevel 507 0 stevel extern int eflag; 508 0 stevel extern int ucb_builtins; 509 0 stevel 510 0 stevel /* 511 0 stevel * Find out if it is time to go away. 512 0 stevel * `trapnote' is set to SIGSET when fault is seen and 513 0 stevel * no trap has been set. 514 0 stevel */ 515 0 stevel 516 0 stevel #define sigchk() if (trapnote & SIGSET) \ 517 0 stevel exitsh(exitval ? exitval : SIGFAIL) 518 0 stevel 519 0 stevel #define exitset() retval = exitval 520 0 stevel 521 0 stevel /* Multibyte characters */ 522 0 stevel unsigned char *readw(); 523 0 stevel #include <stdlib.h> 524 0 stevel #include <limits.h> 525 0 stevel #define MULTI_BYTE_MAX MB_LEN_MAX 526 0 stevel 527 0 stevel 528 0 stevel #ifdef __cplusplus 529 0 stevel } 530 0 stevel #endif 531 0 stevel 532 0 stevel #endif /* _DEFS_H */ 533