Changeset 3569 in kBuild
- Timestamp:
- Jul 9, 2022 1:26:29 PM (3 years ago)
- Location:
- trunk/src/kash
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kash/shinstance.c
r3506 r3569 489 489 { 490 490 struct localvar *next = lvar->next; 491 491 if (!(lvar->flags & VTEXTFIXED)) 492 492 sh_free(psh, lvar->text); 493 493 sh_free(psh, lvar); … … 509 509 if (!(var->flags & (VTEXTFIXED | VSTACK))) 510 510 sh_free(psh, var->text); 511 if (!(var->flags & VSTRFIXED))511 if (!(var->flags & (VSTRFIXED | VSTRFIXED2))) 512 512 sh_free(psh, var); 513 513 var = next; -
trunk/src/kash/var.c
r3477 r3569 137 137 const struct varinit varinit[] = { 138 138 #if ATTY 139 { offsetof(shinstance, vatty), VSTRFIXED|V TEXTFIXED|VUNSET, "ATTY=",139 { offsetof(shinstance, vatty), VSTRFIXED|VSTRFIXED2|VTEXTFIXED|VUNSET, "ATTY=", 140 140 NULL }, 141 141 #endif 142 142 #ifndef SMALL 143 { offsetof(shinstance, vhistsize), VSTRFIXED|V TEXTFIXED|VUNSET, "HISTSIZE=",143 { offsetof(shinstance, vhistsize), VSTRFIXED|VSTRFIXED2|VTEXTFIXED|VUNSET, "HISTSIZE=", 144 144 sethistsize }, 145 145 #endif 146 { offsetof(shinstance, vifs), VSTRFIXED|V TEXTFIXED, "IFS= \t\n",146 { offsetof(shinstance, vifs), VSTRFIXED|VSTRFIXED2|VTEXTFIXED, "IFS= \t\n", 147 147 NULL }, 148 { offsetof(shinstance, vmail), VSTRFIXED|V TEXTFIXED|VUNSET, "MAIL=",148 { offsetof(shinstance, vmail), VSTRFIXED|VSTRFIXED2|VTEXTFIXED|VUNSET, "MAIL=", 149 149 NULL }, 150 { offsetof(shinstance, vmpath), VSTRFIXED|V TEXTFIXED|VUNSET, "MAILPATH=",150 { offsetof(shinstance, vmpath), VSTRFIXED|VSTRFIXED2|VTEXTFIXED|VUNSET, "MAILPATH=", 151 151 NULL }, 152 { offsetof(shinstance, vpath), VSTRFIXED|V TEXTFIXED, "PATH=" _PATH_DEFPATH,152 { offsetof(shinstance, vpath), VSTRFIXED|VSTRFIXED2|VTEXTFIXED, "PATH=" _PATH_DEFPATH, 153 153 changepath }, 154 154 /* 155 155 * vps1 depends on uid 156 156 */ 157 { offsetof(shinstance, vps2), VSTRFIXED|V TEXTFIXED, "PS2=> ",157 { offsetof(shinstance, vps2), VSTRFIXED|VSTRFIXED2|VTEXTFIXED, "PS2=> ", 158 158 NULL }, 159 { offsetof(shinstance, vps4), VSTRFIXED|V TEXTFIXED, "PS4=+ ",159 { offsetof(shinstance, vps4), VSTRFIXED|VSTRFIXED2|VTEXTFIXED, "PS4=+ ", 160 160 NULL }, 161 161 #ifndef SMALL 162 { offsetof(shinstance, vterm), VSTRFIXED|V TEXTFIXED|VUNSET, "TERM=",162 { offsetof(shinstance, vterm), VSTRFIXED|VSTRFIXED2|VTEXTFIXED|VUNSET, "TERM=", 163 163 setterm }, 164 164 #endif 165 { offsetof(shinstance, voptind), VSTRFIXED|V TEXTFIXED|VNOFUNC, "OPTIND=1",165 { offsetof(shinstance, voptind), VSTRFIXED|VSTRFIXED2|VTEXTFIXED|VNOFUNC, "OPTIND=1", 166 166 getoptsreset }, 167 167 { 0, 0, NULL, … … 212 212 for (i = 0; i < 4; i++) 213 213 { 214 psh->libpath_vars[i].flags = VSTRFIXED | V OS2LIBPATH;214 psh->libpath_vars[i].flags = VSTRFIXED | VSTRFIXED2 | VOS2LIBPATH; 215 215 psh->libpath_vars[i].func = NULL; 216 216 … … 236 236 { 237 237 psh->libpath_vars[i].flags |= VUNSET | VTEXTFIXED; 238 psh->libpath_vars[i].text = (char *)libpath_envs[i];238 psh->libpath_vars[i].text = (char *)libpath_envs[i]; 239 239 } 240 240 if (find_var(psh, psh->libpath_vars[i].text, &vpp, &psh->libpath_vars[i].name_len) != NULL) … … 267 267 psh->vps1.text = sh_strdup(psh, sh_geteuid(psh) ? "PS1=$ " : "PS1=# "); 268 268 #endif 269 psh->vps1.flags = VSTRFIXED|V TEXTFIXED;269 psh->vps1.flags = VSTRFIXED|VSTRFIXED2|VTEXTFIXED; /** @todo text isn't fixed here... */ 270 270 } 271 271 } … … 282 282 for (i = 0; i < K_ELEMENTS(inherit->vartab); i++) { 283 283 struct var const *vsrc = inherit->vartab[i]; 284 if (!vsrc) { 285 } else { 284 if (vsrc) { 286 285 struct var **ppdst = &psh->vartab[i]; 287 286 do 288 287 { 289 288 struct var *dst; 290 if (!(vsrc->flags & VSTRFIXED )) {289 if (!(vsrc->flags & VSTRFIXED2)) { 291 290 dst = (struct var *)ckmalloc(psh, sizeof(*dst)); 291 *dst = *vsrc; 292 dst->flags &= ~VSTRFIXED; 292 293 } else { 293 /* VSTRFIXED is used when the structure is a fixed allocation in294 /* VSTRFIXED2 is used when the structure is a fixed allocation in 294 295 the shinstance structure, so scan those to find which it is: */ 295 296 size_t left = ((struct var *)&inherit->vartab[0] - &inherit->vatty); … … 303 304 break; 304 305 kHlpAssert(left < 256 /*whatever, just no rollover*/); 306 *dst = *vsrc; 305 307 } 306 *dst = *vsrc;307 308 308 309 if (!(vsrc->flags & VTEXTFIXED)) { … … 328 329 struct localvar *dst = ckmalloc(psh, sizeof(*dst)); 329 330 330 dst->flags = vsrc->flags & ~ VSTACK;331 if (vsrc-> flags & VTEXTFIXED)332 331 dst->flags = vsrc->flags & ~(VSTACK | VTEXTFIXED | (vsrc->flags & VSTRFIXED2 ? 0 : VSTRFIXED)); 332 if (vsrc->text) 333 dst->text = savestr(psh, vsrc->text); 333 334 else 334 dst->text = vsrc->text; 335 335 { 336 dst->text = NULL; 337 dst->flags |= vsrc->flags & VTEXTFIXED; 338 } 336 339 dst->vp = find_var(psh, vsrc->vp->text, NULL, NULL); 337 340 kHlpAssert(dst->vp); … … 342 345 vsrc = vsrc->next; 343 346 } while (vsrc); 347 *ppdst = NULL; 344 348 } 345 349 } … … 630 634 if ((vp->flags & VTEXTFIXED) == 0) 631 635 ckfree(psh, vp->text); 632 if ((vp->flags & VSTRFIXED) == 0)636 if ((vp->flags & (VSTRFIXED | VSTRFIXED2)) == 0) 633 637 ckfree(psh, vp); 634 638 } else { … … 948 952 vp->flags &= ~VEXPORT; 949 953 vp->flags |= VUNSET; 950 if ((vp->flags & VSTRFIXED) == 0) {954 if ((vp->flags & (VSTRFIXED | VSTRFIXED2)) == 0) { 951 955 if ((vp->flags & VTEXTFIXED) == 0) 952 956 ckfree(psh, vp->text); -
trunk/src/kash/var.h
r3438 r3569 51 51 #define VNOFUNC 0x40 /* don't call the callback function */ 52 52 #define VNOSET 0x80 /* do not set variable - just readonly test */ 53 #define VSTRFIXED2 0x4000 /* variable struct is in the shinstance, cannot be freed. (VSTRFIXED is mixed up in local vars) */ 53 54 #ifdef PC_OS2_LIBPATHS 54 55 #define VOS2LIBPATH 0x8000 /* OS/2 LIBPATH related variable. */
Note:
See TracChangeset
for help on using the changeset viewer.