Lines Matching refs:vp
99 struct tbl *vp, **vpp = l->vars.tbls, *vq;
106 if ((vp = *vpp++) != NULL && (vp->flag&SPECIAL)) {
107 if ((vq = global(vp->name))->flag & ISSET)
155 register struct tbl *vp;
159 if ((vp = ktsearch(&l->vars, vn, h)) != NULL)
166 vp = NULL;
168 *vpp = vp;
189 struct tbl *vp;
194 varsearch(e->loc, &vp, vn, hash(vn));
196 if (vp && (vp->flag & (DEFINED | ASSOC | ARRAY)) ==
201 strdup2x(cp, str_val(vp), p);
245 struct tbl *vp;
262 vp = vtemp;
263 vp->flag = DEFINED;
264 vp->type = 0;
265 vp->areap = ATEMP;
269 shf_snprintf(vp->name, 12, Tf_d, c);
272 setstr(vp, l->argv[c],
276 vp->name[0] = '\0';
277 vp->flag |= RDONLY;
280 vp->name[0] = c;
281 vp->name[1] = '\0';
282 vp->flag |= RDONLY;
285 vp->flag |= ISSET|INTEGER;
288 vp->val.i = kshpid;
292 if ((vp->val.i = j_async()) == 0)
293 vp->flag &= ~(ISSET|INTEGER);
296 vp->val.i = exstat & 0xFF;
299 vp->val.i = l->argc;
302 vp->flag &= ~INTEGER;
303 vp->val.s = getoptions();
306 vp->flag &= ~(ISSET|INTEGER);
310 l = varsearch(e->loc, &vp, vn, h);
311 if (vp == NULL && docreate)
312 vp = ktenter(&l->vars, vn, h);
315 if (vp != NULL) {
317 vp = arraysearch(vp, val);
319 vp->flag |= DEFINED;
321 vp->flag |= SPECIAL;
328 return (vp);
337 struct tbl *vp;
350 vp = vtemp;
351 vp->flag = DEFINED|RDONLY;
352 vp->type = 0;
353 vp->areap = ATEMP;
356 vp = ktenter(&l->vars, vn, h);
357 if (copy && !(vp->flag & DEFINED)) {
362 vp->flag |= vq->flag &
366 vp->type = vq->type;
367 vp->u2.field = vq->u2.field;
371 vp = arraysearch(vp, val);
372 vp->flag |= DEFINED;
374 vp->flag |= SPECIAL;
379 return (vp);
385 str_val(struct tbl *vp)
389 if ((vp->flag&SPECIAL))
390 getspec(vp);
391 if (!(vp->flag&ISSET))
394 else if (!(vp->flag&INTEGER))
396 s = vp->val.s + vp->type;
407 const char *digits = (vp->flag & UCASEV_AL) ?
411 if (vp->flag & INT_U)
412 n = vp->val.u;
414 n = (vp->val.i < 0) ? -vp->val.u : vp->val.u;
415 base = (vp->type == 0) ? 10U : (unsigned int)vp->type;
444 if (!(vp->flag & INT_U) && vp->val.i < 0)
447 if (vp->flag & (RJUST|LJUST))
449 s = formatstr(vp, s);
528 getint(struct tbl *vp, mksh_ari_u *nump, bool arith)
534 if (vp->flag & SPECIAL)
535 getspec(vp);
537 if (!(vp->flag & ISSET) || (!(vp->flag & INTEGER) && vp->val.s == NULL))
539 if (vp->flag & INTEGER) {
540 nump->i = vp->val.i;
541 return (vp->type);
543 s = vp->val.s + vp->type;
565 !(vp->flag & ZEROFIL)) {
622 * convert variable vq to integer variable, setting its value from vp
623 * (vq and vp may be the same)
626 setint_v(struct tbl *vq, struct tbl *vp, bool arith)
631 if ((base = getint(vp, &num, arith)) == -1)
658 formatstr(struct tbl *vp, const char *s)
666 if (vp->flag & (RJUST|LJUST)) {
667 if (!vp->u2.field)
669 vp->u2.field = olen;
670 nlen = vp->u2.field;
675 if (vp->flag & (RJUST|LJUST)) {
678 if (vp->flag & RJUST) {
689 if (vp->flag & ZEROFIL && vp->flag & INTEGER) {
697 if (vp->u2.field <= n)
704 while (slen > vp->u2.field)
706 if (vp->u2.field - slen)
707 memset(p + n, (vp->flag & ZEROFIL) ? '0' : ' ',
708 vp->u2.field - slen);
710 shf_snprintf(p + vp->u2.field - slen,
711 psiz - (vp->u2.field - slen),
717 if (vp->flag & ZEROFIL)
721 vp->u2.field, vp->u2.field, s);
726 if (vp->flag & UCASEV_AL) {
729 } else if (vp->flag & LCASEV) {
738 * make vp->val.s be "name=value" for quick exporting.
741 exportprep(struct tbl *vp, const char *val, size_t cursz)
743 char *cp = (vp->flag & ALLOC) ? vp->val.s : NULL;
744 size_t namelen = strlen(vp->name);
747 vp->flag |= ALLOC;
748 vp->type = namelen + 1;
750 vp->val.s = aresizeif(cursz, cp, vp->type + vallen, vp->areap);
751 memmove(vp->val.s + vp->type, val == cp ? vp->val.s : val, vallen);
752 memcpy(vp->val.s, vp->name, namelen);
753 vp->val.s[namelen] = '=';
770 struct tbl *vp;
861 varsearch(e->loc, &vp, tvar, hash(tvar));
862 if (vp == NULL)
864 qval = str_val(vp);
903 varsearch(e->loc, &vp, qval, hash(qval));
905 if (vp && ((vp->flag & (ARRAY | ASSOC)) == ASSOC))
906 qval = str_val(vp);
917 vp = (set & LOCAL) ? local(tvar, tobool(set & LOCAL_COPY)) :
919 if (new_refflag == SRF_DISABLE && (vp->flag & (ARRAY|ASSOC)) == ASSOC)
920 vp->flag &= ~ASSOC;
922 if (vp->flag & ARRAY) {
926 for (a = vp->u.array; a; ) {
933 vp->u.array = NULL;
934 vp->flag &= ~ARRAY;
936 vp->flag |= ASSOC;
941 vpbase = (vp->flag & ARRAY) ? global(arrayname(tvar)) : vp;
967 fake_assign = (t->flag & ISSET) && (!val || t != vp) &&
991 if ((set & INTEGER) && base > 0 && (!val || t != vp))
1022 if ((vp->flag & (ISSET|ALLOC|SPECIAL|INTEGER|UCASEV_AL|LCASEV|LJUST|RJUST)) != (ISSET|ALLOC)) {
1024 strdup2x(tvar, str_val(vp), val);
1029 len = strlen(vp->val.s);
1031 vp->val.s = aresize(vp->val.s, len + tlen, vp->areap);
1032 memcpy(vp->val.s + len, val, tlen);
1035 if (vp->flag&INTEGER) {
1037 setstr(vp, val, KSH_UNWIND_ERROR | 0x4);
1040 vp->type = base;
1043 setstr(vp, val, KSH_RETURN_ERROR | 0x4);
1056 return (vp);
1065 unset(struct tbl *vp, int flags)
1067 if (vp->flag & ALLOC)
1068 afree(vp->val.s, vp->areap);
1069 if ((vp->flag & ARRAY) && (flags & 1)) {
1073 for (a = vp->u.array; a; ) {
1080 vp->u.array = NULL;
1083 vp->flag &= ~(ALLOC|ISSET);
1087 vp->flag &= SPECIAL | ((flags & 1) ? 0 : ARRAY|DEFINED);
1088 if (vp->flag & SPECIAL)
1090 unsetspec(vp, true);
1174 struct tbl *vp, **vpp;
1181 if ((vp = *vpp++) != NULL &&
1182 (vp->flag&(ISSET|EXPORT)) == (ISSET|EXPORT)) {
1185 uint32_t h = hash(vp->name);
1189 vp2 = ktsearch(&l2->vars, vp->name, h);
1193 if ((vp->flag&INTEGER)) {
1196 val = str_val(vp);
1197 vp->flag &= ~(INTEGER|RDONLY|SPECIAL);
1199 setstr(vp, val, KSH_RETURN_ERROR);
1203 if (!strcmp(vp->name, "BEGINLIBPATH") ||
1204 !strcmp(vp->name, "ENDLIBPATH") ||
1205 !strcmp(vp->name, "LIBPATHSTRICT"))
1208 XPput(denv, vp->val.s);
1250 getspec(struct tbl *vp)
1256 switch ((st = special(vp->name))) {
1290 vp->flag &= ~SPECIAL;
1294 setstr(vp, buf, KSH_RETURN_ERROR | 0x4);
1295 vp->flag |= SPECIAL;
1310 if (vp->flag & ISSET) {
1317 /* do nothing, do not touch vp at all */
1320 vp->flag &= ~SPECIAL;
1321 setint_n(vp, num.i, 0);
1322 vp->flag |= SPECIAL;
1326 setspec(struct tbl *vp)
1330 int st = special(vp->name);
1341 if (!(vp->flag&INTEGER)) {
1342 s = str_val(vp);
1357 setextlibpath(vp->name, str_val(vp));
1362 sethistfile(str_val(vp));
1366 set_ifs(str_val(vp));
1370 s = str_val(vp);
1377 x_initterm(str_val(vp));
1390 s = str_val(vp);
1400 if (vp->flag & IMPORT) {
1402 unspecial(vp->name);
1403 vp->flag &= ~SPECIAL;
1413 vp->flag &= ~SPECIAL;
1414 if (getint(vp, &num, false) == -1) {
1415 s = str_val(vp);
1417 errorf(Tf_sD_sD_s, vp->name, Tbadnum, s);
1420 vp->flag |= SPECIAL;
1430 /* do nothing, do not touch vp at all */
1477 unsetspec(struct tbl *vp, bool dounset)
1487 switch (special(vp->name)) {
1492 setextlibpath(vp->name, "");
1526 unspecial(vp->name);
1539 unspecial(vp->name);
1546 * vp, indexed by val.
1549 arraysearch(struct tbl *vp, uint32_t val)
1554 vp->flag = (vp->flag | (ARRAY | DEFINED)) & ~ASSOC;
1557 return (vp);
1558 prev = vp;
1559 curr = vp->u.array;
1571 len = strlen(vp->name);
1573 news = alloc(offsetof(struct tbl, name[0]) + ++len, vp->areap);
1574 memcpy(news->name, vp->name, len);
1576 news->flag = (vp->flag & ~(ALLOC|DEFINED|ISSET|SPECIAL)) | AINDEX;
1577 news->type = vp->type;
1578 news->areap = vp->areap;
1579 news->u2.field = vp->u2.field;
1634 struct tbl *vp, *vq;
1648 vp = global(ccp);
1651 if ((vp->flag&RDONLY))
1656 unset(vp, 1);
1658 arraysearch(vp, 0);
1670 for (vq = vp; vq; vq = vq->u.array) {
1703 vq = arraysearch(vp, j);
1857 struct tbl *vp;
1859 vp = local("KSH_MATCH", false);
1860 unset(vp, 1);
1861 vp->flag = DEFINED | RDONLY;
1862 setstr(vp, istr, 0x4);
1869 struct tbl *vp, **p;
2102 for (p = ktsort(&l->funs); (vp = *p++); ) {
2103 if (flag && (vp->flag & flag) == 0)
2107 tobool(vp->flag & FKSH),
2108 vp->name, vp->val.t);
2110 shf_puts(vp->name, shl_stdout);
2116 vp = isglobal(wp[i], false);
2117 c_typeset_vardump(vp, flag, thing,
2129 struct tbl **blockvars, *vp;
2134 while ((vp = *blockvars++))
2135 c_typeset_vardump(vp, flag, thing, 0, pflag, istset);
2140 c_typeset_vardump(struct tbl *vp, uint32_t flag, int thing, int any_set,
2146 if (!vp)
2153 for (tvp = vp; tvp; tvp = tvp->u.array)
2168 if (!any_set && !(vp->flag & USERATTRIB))
2170 if (flag && (vp->flag & flag) == 0)
2172 if (!(vp->flag & ARRAY))
2181 if (any_set && !(vp->flag & ISSET))
2186 shprintf(Tf_s_s_sN, Tset, "-A", vp->name);
2195 if (((vp->flag & (ARRAY | ASSOC)) == ASSOC))
2197 if ((vp->flag & INTEGER))
2199 if ((vp->flag & EXPORT))
2201 if ((vp->flag & RDONLY))
2203 if ((vp->flag & TRACE))
2205 if ((vp->flag & LJUST))
2206 shprintf("-L%d ", vp->u2.field);
2207 if ((vp->flag & RJUST))
2208 shprintf("-R%d ", vp->u2.field);
2209 if ((vp->flag & ZEROFIL))
2211 if ((vp->flag & LCASEV))
2213 if ((vp->flag & UCASEV_AL))
2215 if ((vp->flag & INT_U))
2222 shprintf("%s[%lu]", vp->name, arrayindex(vp));
2224 shf_puts(vp->name, shl_stdout);
2226 (thing == '-' && (vp->flag & ISSET))) {
2227 s = str_val(vp);
2230 if ((vp->flag & (INTEGER | LJUST | RJUST)) == INTEGER)
2243 } while (!(any_set & 4) && (vp = vp->u.array));