Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/bdsh/compl.c

    r5935c079 re14a103  
    9090{
    9191        compl_t *cs = NULL;
     92        size_t pref_size;
    9293        char *stext = NULL;
    9394        char *prefix = NULL;
    9495        char *dirname = NULL;
    95         int retval;
    96        
    97         token_t *tokens = calloc(WORD_MAX, sizeof(token_t));
    98         if (tokens == NULL) {
    99                 retval = ENOMEM;
    100                 goto error;
    101         }
    102        
    103         size_t pref_size;
    10496        char *rpath_sep;
    10597        static const char *dirlist_arg[] = { ".", NULL };
     98        int retval;
    10699        tokenizer_t tok;
    107         ssize_t current_token;
     100        token_t tokens[WORD_MAX];
     101        unsigned int current_token;
    108102        size_t tokens_length;
    109        
     103
    110104        cs = calloc(1, sizeof(compl_t));
    111105        if (!cs) {
     
    113107                goto error;
    114108        }
    115        
     109
    116110        /* Convert text buffer to string */
    117111        stext = wstr_to_astr(text);
     
    133127       
    134128        /* Find the current token */
    135         for (current_token = 0; current_token < (ssize_t) tokens_length;
    136             current_token++) {
     129        for (current_token = 0; current_token < tokens_length; current_token++) {
    137130                token_t *t = &tokens[current_token];
    138131                size_t end = t->char_start + t->char_length;
    139                
    140                 /*
    141                  * Check if the caret lies inside the token or immediately
     132                /* Check if the caret lies inside the token or immediately
    142133                 * after it
    143134                 */
     
    147138        }
    148139       
    149         if (tokens_length == 0)
    150                 current_token = -1;
    151        
    152         if ((current_token >= 0) && (tokens[current_token].type != TOKTYPE_SPACE))
     140        if (tokens[current_token].type != TOKTYPE_SPACE) {
    153141                *cstart = tokens[current_token].char_start;
    154         else
     142        }
     143        else {
    155144                *cstart = pos;
    156        
    157         /*
    158          * Extract the prefix being completed
     145        }
     146       
     147        /* Extract the prefix being completed
    159148         * XXX: handle strings, etc.
    160149         */
     
    165154                goto error;
    166155        }
    167         prefix[pref_size] = 0;
    168 
    169         if (current_token >= 0) {
    170                 str_ncpy(prefix, pref_size + 1, stext +
    171                     tokens[current_token].byte_start, pref_size);
    172         }
     156
     157        str_ncpy(prefix, pref_size + 1, stext +
     158            tokens[current_token].byte_start, pref_size);
    173159
    174160        /*
     
    179165
    180166        /* Skip any whitespace before current token */
    181         ssize_t prev_token = current_token - 1;
    182         if ((prev_token >= 0) && (tokens[prev_token].type == TOKTYPE_SPACE))
     167        int prev_token = current_token - 1;
     168        if (prev_token != -1 && tokens[prev_token].type == TOKTYPE_SPACE) {
    183169                prev_token--;
    184        
     170        }
     171
    185172        /*
    186173         * It is a command if it is the first token or if it immediately
    187174         * follows a pipe token.
    188175         */
    189         if ((prev_token < 0) || (tokens[prev_token].type == TOKTYPE_SPACE))
     176        if (prev_token == -1 || tokens[prev_token].type == TOKTYPE_SPACE)
    190177                cs->is_command = true;
    191178        else
     
    262249        if (cs != NULL)
    263250                free(cs);
    264         if (tokens != NULL)
    265                 free(tokens);
    266251
    267252        return retval;
Note: See TracChangeset for help on using the changeset viewer.