Subversion Repositories HelenOS

Rev

Rev 2108 | Rev 2462 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2108 Rev 2113
Line 169... Line 169...
169
}
169
}
170
 
170
 
171
/** Try to find a command beginning with prefix */
171
/** Try to find a command beginning with prefix */
172
static const char * cmdtab_search_one(const char *name,link_t **startpos)
172
static const char * cmdtab_search_one(const char *name,link_t **startpos)
173
{
173
{
174
    int namelen = strlen(name);
174
    size_t namelen = strlen(name);
175
    const char *curname;
175
    const char *curname;
176
 
176
 
177
    spinlock_lock(&cmd_lock);
177
    spinlock_lock(&cmd_lock);
178
 
178
 
179
    if (!*startpos)
179
    if (!*startpos)
Line 414... Line 414...
414
        printf("%s: no stdin\n", __FUNCTION__);
414
        printf("%s: no stdin\n", __FUNCTION__);
415
        return;
415
        return;
416
    }
416
    }
417
   
417
   
418
    while (true) {
418
    while (true) {
419
        cmdline = clever_readline(prompt, stdin);
419
        cmdline = clever_readline((char *) prompt, stdin);
420
        len = strlen(cmdline);
420
        len = strlen(cmdline);
421
        if (!len)
421
        if (!len)
422
            continue;
422
            continue;
423
        cmd_info = parse_cmdline(cmdline, len);
423
        cmd_info = parse_cmdline(cmdline, len);
424
        if (!cmd_info)
424
        if (!cmd_info)
Line 484... Line 484...
484
cmd_info_t *parse_cmdline(char *cmdline, size_t len)
484
cmd_info_t *parse_cmdline(char *cmdline, size_t len)
485
{
485
{
486
    index_t start = 0, end = 0;
486
    index_t start = 0, end = 0;
487
    cmd_info_t *cmd = NULL;
487
    cmd_info_t *cmd = NULL;
488
    link_t *cur;
488
    link_t *cur;
489
    int i;
489
    count_t i;
490
    int error = 0;
490
    int error = 0;
491
   
491
   
492
    if (!parse_argument(cmdline, len, &start, &end)) {
492
    if (!parse_argument(cmdline, len, &start, &end)) {
493
        /* Command line did not contain alphanumeric word. */
493
        /* Command line did not contain alphanumeric word. */
494
        return NULL;
494
        return NULL;
Line 538... Line 538...
538
        }
538
        }
539
       
539
       
540
        error = 0;
540
        error = 0;
541
        switch (cmd->argv[i].type) {
541
        switch (cmd->argv[i].type) {
542
        case ARG_TYPE_STRING:
542
        case ARG_TYPE_STRING:
543
                buf = cmd->argv[i].buffer;
543
            buf = (char *) cmd->argv[i].buffer;
544
                strncpy(buf, (const char *) &cmdline[start],
544
            strncpy(buf, (const char *) &cmdline[start],
545
                min((end - start) + 2, cmd->argv[i].len));
545
                min((end - start) + 2, cmd->argv[i].len));
546
            buf[min((end - start) + 1, cmd->argv[i].len - 1)] = '\0';
546
            buf[min((end - start) + 1, cmd->argv[i].len - 1)] = '\0';
547
            break;
547
            break;
548
        case ARG_TYPE_INT:
548
        case ARG_TYPE_INT:
549
            if (parse_int_arg(cmdline + start, end - start + 1,
549
            if (parse_int_arg(cmdline + start, end - start + 1,
Line 551... Line 551...
551
                error = 1;
551
                error = 1;
552
            break;
552
            break;
553
        case ARG_TYPE_VAR:
553
        case ARG_TYPE_VAR:
554
            if (start != end && cmdline[start] == '"' &&
554
            if (start != end && cmdline[start] == '"' &&
555
                cmdline[end] == '"') {
555
                cmdline[end] == '"') {
556
                buf = cmd->argv[i].buffer;
556
                buf = (char *) cmd->argv[i].buffer;
557
                strncpy(buf, (const char *) &cmdline[start + 1],
557
                strncpy(buf, (const char *) &cmdline[start + 1],
558
                    min((end-start), cmd->argv[i].len));
558
                    min((end-start), cmd->argv[i].len));
559
                buf[min((end - start), cmd->argv[i].len - 1)] =
559
                buf[min((end - start), cmd->argv[i].len - 1)] =
560
                    '\0';
560
                    '\0';
561
                cmd->argv[i].intval = (unative_t) buf;
561
                cmd->argv[i].intval = (unative_t) buf;
Line 606... Line 606...
606
 *
606
 *
607
 * @return false on failure, true on success.
607
 * @return false on failure, true on success.
608
 */
608
 */
609
bool parse_argument(char *cmdline, size_t len, index_t *start, index_t *end)
609
bool parse_argument(char *cmdline, size_t len, index_t *start, index_t *end)
610
{
610
{
611
    int i;
611
    index_t i;
612
    bool found_start = false;
612
    bool found_start = false;
613
   
613
   
614
    ASSERT(start != NULL);
614
    ASSERT(start != NULL);
615
    ASSERT(end != NULL);
615
    ASSERT(end != NULL);
616
   
616