Changeset 1198 for trunk/src/kash/expand.c
- Timestamp:
- Oct 6, 2007, 11:19:19 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kash/expand.c
r809 r1198 124 124 expandhere(union node *arg, int fd) 125 125 { 126 herefd = fd;126 psh->herefd = fd; 127 127 expandarg(arg, (struct arglist *)NULL, 0); 128 xwrite( fd, stackblock(), expdest - stackblock());128 xwrite(psh, fd, stackblock(psh), expdest - stackblock(psh)); 129 129 } 130 130 … … 144 144 145 145 argbackq = arg->narg.backquote; 146 STARTSTACKSTR( expdest);146 STARTSTACKSTR(psh, expdest); 147 147 ifsfirst.next = NULL; 148 148 ifslastp = NULL; … … 151 151 return; /* here document expanded */ 152 152 } 153 STPUTC( '\0', expdest);154 p = grabstackstr( expdest);153 STPUTC(psh, '\0', expdest); 154 p = grabstackstr(psh, expdest); 155 155 exparg.lastp = &exparg.list; 156 156 /* … … 165 165 if (flag & EXP_REDIR) /*XXX - for now, just remove escapes */ 166 166 rmescapes(p); 167 sp = (struct strlist *)stalloc( sizeof (struct strlist));167 sp = (struct strlist *)stalloc(psh, sizeof (struct strlist)); 168 168 sp->text = p; 169 169 *exparg.lastp = sp; … … 210 210 break; 211 211 if ((flag & EXP_FULL) != 0) 212 STPUTC( c, expdest);212 STPUTC(psh, c, expdest); 213 213 ifs_split = 0; 214 214 break; … … 218 218 case CTLESC: 219 219 if (quotes) 220 STPUTC( c, expdest);220 STPUTC(psh, c, expdest); 221 221 c = *p++; 222 STPUTC( c, expdest);222 STPUTC(psh, c, expdest); 223 223 break; 224 224 case CTLVAR: … … 239 239 * assignments (after the first '=' and after ':'s). 240 240 */ 241 STPUTC( c, expdest);241 STPUTC(psh, c, expdest); 242 242 if (flag & EXP_VARTILDE && *p == '~') { 243 243 if (c == '=') { … … 251 251 break; 252 252 default: 253 STPUTC( c, expdest);253 STPUTC(psh, c, expdest); 254 254 if (flag & EXP_IFS_SPLIT & ifs_split && strchr(ifs, c) != NULL) { 255 255 /* We need to get the output split here... */ 256 recordregion(expdest - stackblock( ) - 1,257 expdest - stackblock( ), 0);256 recordregion(expdest - stackblock(psh) - 1, 257 expdest - stackblock(psh), 0); 258 258 } 259 259 break; … … 300 300 while ((c = *home++) != '\0') { 301 301 if (quotes && SQSYNTAX[(int)c] == CCTL) 302 STPUTC( CTLESC, expdest);303 STPUTC( c, expdest);302 STPUTC(psh, CTLESC, expdest); 303 STPUTC(psh, c, expdest); 304 304 } 305 305 return (p); … … 378 378 #error "integers with more than 10 digits are not supported" 379 379 #endif 380 CHECKSTRSPACE( 12 - 2, expdest);381 USTPUTC( '\0', expdest);382 start = stackblock( );380 CHECKSTRSPACE(psh, 12 - 2, expdest); 381 USTPUTC(psh, '\0', expdest); 382 start = stackblock(psh); 383 383 p = expdest - 1; 384 384 while (*p != CTLARI && p >= start) … … 408 408 recordregion(begoff, p - 1 - start, 0); 409 409 result = expdest - p + 1; 410 STADJUST( -result, expdest);410 STADJUST(psh, -result, expdest); 411 411 } 412 412 … … 427 427 struct nodelist *saveargbackq; 428 428 char lastc; 429 int startloc = dest - stackblock( );429 int startloc = dest - stackblock(psh); 430 430 char const *syntax = quoted? DQSYNTAX : BASESYNTAX; 431 431 int saveherefd; … … 436 436 savelastp = ifslastp; 437 437 saveargbackq = argbackq; 438 saveherefd = herefd;439 herefd = -1;440 p = grabstackstr( dest);438 saveherefd = psh->herefd; 439 psh->herefd = -1; 440 p = grabstackstr(psh, dest); 441 441 evalbackcmd(cmd, &in); 442 ungrabstackstr(p , dest);442 ungrabstackstr(psh, p, dest); 443 443 ifsfirst = saveifs; 444 444 ifslastp = savelastp; 445 445 argbackq = saveargbackq; 446 herefd = saveherefd;446 psh->herefd = saveherefd; 447 447 448 448 p = in.buf; … … 462 462 if (lastc != '\0') { 463 463 if (quotes && syntax[(int)lastc] == CCTL) 464 STPUTC( CTLESC, dest);465 STPUTC( lastc, dest);464 STPUTC(psh, CTLESC, dest); 465 STPUTC(psh, lastc, dest); 466 466 } 467 467 } 468 468 469 469 /* Eat all trailing newlines */ 470 p = stackblock( ) + startloc;470 p = stackblock(psh) + startloc; 471 471 while (dest > p && dest[-1] == '\n') 472 STUNPUTC( dest);472 STUNPUTC(psh, dest); 473 473 474 474 if (in.fd >= 0) … … 479 479 back_exitstatus = waitforjob(in.jp); 480 480 if (quoted == 0) 481 recordregion(startloc, dest - stackblock( ), 0);481 recordregion(startloc, dest - stackblock(psh), 0); 482 482 TRACE(("evalbackq: size=%d: \"%.*s\"\n", 483 (dest - stackblock( )) - startloc,484 (dest - stackblock( )) - startloc,485 stackblock( ) + startloc));483 (dest - stackblock(psh)) - startloc, 484 (dest - stackblock(psh)) - startloc, 485 stackblock(psh) + startloc)); 486 486 expdest = dest; 487 487 INTON; … … 497 497 char *q; 498 498 int c = 0; 499 int saveherefd = herefd;499 int saveherefd = psh->herefd; 500 500 struct nodelist *saveargbackq = argbackq; 501 501 int amount; 502 502 503 herefd = -1;503 psh->herefd = -1; 504 504 argstr(p, 0); 505 STACKSTRNUL( expdest);506 herefd = saveherefd;505 STACKSTRNUL(psh, expdest); 506 psh->herefd = saveherefd; 507 507 argbackq = saveargbackq; 508 startp = stackblock( ) + startloc;508 startp = stackblock(psh) + startloc; 509 509 if (str == NULL) 510 str = stackblock( ) + strloc;510 str = stackblock(psh) + strloc; 511 511 512 512 switch (subtype) { … … 514 514 setvar(str, startp, 0); 515 515 amount = startp - expdest; 516 STADJUST( amount, expdest);516 STADJUST(psh, amount, expdest); 517 517 varflags &= ~VSNUL; 518 518 if (c != 0) … … 593 593 *loc = c; 594 594 amount = ((str - 1) - (loc - startp)) - expdest; 595 STADJUST( amount, expdest);595 STADJUST(psh, amount, expdest); 596 596 while (loc != str - 1) 597 597 *startp++ = *loc++; … … 600 600 recordright: 601 601 amount = loc - expdest; 602 STADJUST( amount, expdest);603 STPUTC( '\0', expdest);604 STADJUST( -1, expdest);602 STADJUST(psh, amount, expdest); 603 STPUTC(psh, '\0', expdest); 604 STADJUST(psh, -1, expdest); 605 605 return 1; 606 606 } … … 648 648 649 649 varlen = 0; 650 startloc = expdest - stackblock( );651 652 if (!set && uflag ) {650 startloc = expdest - stackblock(psh); 651 652 if (!set && uflag(psh)) { 653 653 switch (subtype) { 654 654 case VSNORMAL: … … 668 668 varvalue(var, varflags & VSQUOTE, subtype, flag); 669 669 if (subtype == VSLENGTH) { 670 varlen = expdest - stackblock( ) - startloc;671 STADJUST( -varlen, expdest);670 varlen = expdest - stackblock(psh) - startloc; 671 STADJUST(psh, -varlen, expdest); 672 672 } 673 673 } else { … … 681 681 while (*val) { 682 682 if (quotes && syntax[(int)*val] == CCTL) 683 STPUTC( CTLESC, expdest);684 STPUTC( *val++, expdest);683 STPUTC(psh, CTLESC, expdest); 684 STPUTC(psh, *val++, expdest); 685 685 } 686 686 … … 727 727 * right after it 728 728 */ 729 STPUTC( '\0', expdest);730 patloc = expdest - stackblock( );729 STPUTC(psh, '\0', expdest); 730 patloc = expdest - stackblock(psh); 731 731 if (subevalvar(p, NULL, patloc, subtype, 732 732 startloc, varflags) == 0) { 733 int amount = (expdest - stackblock( ) - patloc) + 1;734 STADJUST( -amount, expdest);733 int amount = (expdest - stackblock(psh) - patloc) + 1; 734 STADJUST(psh, -amount, expdest); 735 735 } 736 736 /* Remove any recorded regions beyond start of variable */ … … 760 760 761 761 if (apply_ifs) 762 recordregion(startloc, expdest - stackblock( ),762 recordregion(startloc, expdest - stackblock(psh), 763 763 varflags & VSQUOTE); 764 764 … … 846 846 while (*p) { \ 847 847 if (syntax[(int)*p] == CCTL) \ 848 STPUTC( CTLESC, expdest); \849 STPUTC( *p++, expdest); \848 STPUTC(psh, CTLESC, expdest); \ 849 STPUTC(psh, *p++, expdest); \ 850 850 } \ 851 851 } else \ 852 852 while (*p) \ 853 STPUTC( *p++, expdest); \853 STPUTC(psh, *p++, expdest); \ 854 854 } while (0) 855 855 … … 873 873 for (i = 0; optlist[i].name; i++) { 874 874 if (optlist[i].val) 875 STPUTC( optlist[i].letter, expdest);875 STPUTC(psh, optlist[i].letter, expdest); 876 876 } 877 877 break; … … 881 881 STRTODEST(p); 882 882 if (*ap) 883 STPUTC( '\0', expdest);883 STPUTC(psh, '\0', expdest); 884 884 } 885 885 break; … … 894 894 STRTODEST(p); 895 895 if (*ap && sep) 896 STPUTC( sep, expdest);896 STPUTC(psh, sep, expdest); 897 897 } 898 898 break; … … 969 969 if (ifslastp == NULL) { 970 970 /* Return entire argument, IFS doesn't apply to any of it */ 971 sp = (struct strlist *)stalloc( sizeof *sp);971 sp = (struct strlist *)stalloc(psh, sizeof *sp); 972 972 sp->text = start; 973 973 *arglist->lastp = sp; … … 1009 1009 /* Save this argument... */ 1010 1010 *q = '\0'; 1011 sp = (struct strlist *)stalloc( sizeof *sp);1011 sp = (struct strlist *)stalloc(psh, sizeof *sp); 1012 1012 sp->text = start; 1013 1013 *arglist->lastp = sp; … … 1043 1043 */ 1044 1044 if (*start /* || (!ifsspc && start > string) */) { 1045 sp = (struct strlist *)stalloc( sizeof *sp);1045 sp = (struct strlist *)stalloc(psh, sizeof *sp); 1046 1046 sp->text = start; 1047 1047 *arglist->lastp = sp; … … 1085 1085 1086 1086 while (str) { 1087 if (fflag )1087 if (fflag(psh)) 1088 1088 goto nometa; 1089 1089 p = str->text; … … 1264 1264 struct strlist *sp; 1265 1265 1266 p = stalloc( strlen(name) + 1);1266 p = stalloc(psh, strlen(name) + 1); 1267 1267 scopy(name, p); 1268 sp = (struct strlist *)stalloc( sizeof *sp);1268 sp = (struct strlist *)stalloc(psh, sizeof *sp); 1269 1269 sp->text = p; 1270 1270 *exparg.lastp = sp; … … 1509 1509 char *p; 1510 1510 1511 setstackmark( &smark);1511 setstackmark(psh, &smark); 1512 1512 argbackq = pattern->narg.backquote; 1513 STARTSTACKSTR( expdest);1513 STARTSTACKSTR(psh, expdest); 1514 1514 ifslastp = NULL; 1515 1515 argstr(pattern->narg.text, EXP_TILDE | EXP_CASE); 1516 STPUTC( '\0', expdest);1517 p = grabstackstr( expdest);1516 STPUTC(psh, '\0', expdest); 1517 p = grabstackstr(psh, expdest); 1518 1518 result = patmatch(p, val, 0); 1519 popstackmark( &smark);1519 popstackmark(psh, &smark); 1520 1520 return result; 1521 1521 } … … 1542 1542 1543 1543 while (*p) 1544 STPUTC( *p++, buf);1544 STPUTC(psh, *p++, buf); 1545 1545 return buf; 1546 1546 }
Note:
See TracChangeset
for help on using the changeset viewer.