VirtualBox

Changeset 2654 in kBuild


Ignore:
Timestamp:
Sep 9, 2012 6:16:28 PM (12 years ago)
Author:
bird
Message:

eval.c/evalcommand: tiny optimization wrt name=value handling.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kash/eval.c

    r2653 r2654  
    677677        int argc;
    678678        char **envp;
    679         int varflag;
     679        int numvars;
    680680        struct strlist *sp;
    681681        int mode;
     
    706706        psh->back_exitstatus = 0;
    707707
    708         /** @todo r=bird: Why is arguments and envvars expanded in this
    709          * particular order?  It would be both faster and simpler to do the
    710          * envvars first and then continue with the arguments... */
    711708        arglist.lastp = &arglist.list;
    712         varflag = 1;
    713709        /* Expand arguments, ignoring the initial 'name=value' ones */
    714         for (argp = cmd->ncmd.args ; argp ; argp = argp->narg.next) {
    715                 char *p = argp->narg.text;
    716                 if (varflag && is_name(*p)) {
    717                         do {
    718                                 p++;
    719                         } while (is_in_name(*p));
    720                         if (*p == '=')
    721                                 continue;
    722                 }
     710        for (argp = cmd->ncmd.args, numvars = 0 ; argp ; argp = argp->narg.next, numvars++) {
     711            char *p = argp->narg.text;
     712            char ch = *p;
     713            if (is_name(ch)) {
     714                    do  ch = *++p;
     715                    while (is_in_name(ch));
     716                    if (ch == '=')
     717                            continue;
     718            }
     719            break;
     720        }
     721        for (/*continue on argp from above. */ ; argp ; argp = argp->narg.next)
    723722                expandarg(psh, argp, &arglist, EXP_FULL | EXP_TILDE);
    724                 varflag = 0;
    725         }
    726723        *arglist.lastp = NULL;
    727724
     
    730727        /* Now do the initial 'name=value' ones we skipped above */
    731728        varlist.lastp = &varlist.list;
    732         for (argp = cmd->ncmd.args ; argp ; argp = argp->narg.next) {
    733                 char *p = argp->narg.text;
    734                 if (!is_name(*p))
    735                         break;
    736                 do
    737                         p++;
    738                 while (is_in_name(*p));
    739                 if (*p != '=')
    740                         break;
     729        for (argp = cmd->ncmd.args ; numvars > 0 && argp ; argp = argp->narg.next, numvars--)
    741730                expandarg(psh, argp, &varlist, EXP_VARTILDE);
    742         }
    743731        *varlist.lastp = NULL;
    744732
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette