Subversion Repositories HelenOS-historic

Rev

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

Rev 640 Rev 668
Line 469... Line 469...
469
{
469
{
470
    index_t start = 0, end = 0;
470
    index_t start = 0, end = 0;
471
    cmd_info_t *cmd = NULL;
471
    cmd_info_t *cmd = NULL;
472
    link_t *cur;
472
    link_t *cur;
473
    int i;
473
    int i;
-
 
474
    int error = 0;
474
   
475
   
475
    if (!parse_argument(cmdline, len, &start, &end)) {
476
    if (!parse_argument(cmdline, len, &start, &end)) {
476
        /* Command line did not contain alphanumeric word. */
477
        /* Command line did not contain alphanumeric word. */
477
        return NULL;
478
        return NULL;
478
    }
479
    }
Line 518... Line 519...
518
            printf("Too few arguments.\n");
519
            printf("Too few arguments.\n");
519
            spinlock_unlock(&cmd->lock);
520
            spinlock_unlock(&cmd->lock);
520
            return NULL;
521
            return NULL;
521
        }
522
        }
522
       
523
       
-
 
524
        error = 0;
523
        switch (cmd->argv[i].type) {
525
        switch (cmd->argv[i].type) {
524
        case ARG_TYPE_STRING:
526
        case ARG_TYPE_STRING:
525
                buf = cmd->argv[i].buffer;
527
                buf = cmd->argv[i].buffer;
526
                strncpy(buf, (const char *) &cmdline[start], min((end - start) + 2, cmd->argv[i].len));
528
                strncpy(buf, (const char *) &cmdline[start], min((end - start) + 2, cmd->argv[i].len));
527
            buf[min((end - start) + 1, cmd->argv[i].len - 1)] = '\0';
529
            buf[min((end - start) + 1, cmd->argv[i].len - 1)] = '\0';
528
            break;
530
            break;
529
        case ARG_TYPE_INT:
531
        case ARG_TYPE_INT:
530
            if (parse_int_arg(cmdline+start, end-start+1,
532
            if (parse_int_arg(cmdline+start, end-start+1,
531
                      &cmd->argv[i].intval))
533
                      &cmd->argv[i].intval))
532
                return NULL;
534
                error = 1;
533
            break;
535
            break;
534
        case ARG_TYPE_VAR:
536
        case ARG_TYPE_VAR:
535
            if (start != end && cmdline[start] == '"' && cmdline[end] == '"') {
537
            if (start != end && cmdline[start] == '"' && cmdline[end] == '"') {
536
                buf = cmd->argv[i].buffer;
538
                buf = cmd->argv[i].buffer;
537
                strncpy(buf, (const char *) &cmdline[start+1],
539
                strncpy(buf, (const char *) &cmdline[start+1],
Line 542... Line 544...
542
            } else if (!parse_int_arg(cmdline+start, end-start+1,
544
            } else if (!parse_int_arg(cmdline+start, end-start+1,
543
                         &cmd->argv[i].intval))
545
                         &cmd->argv[i].intval))
544
                cmd->argv[i].vartype = ARG_TYPE_INT;
546
                cmd->argv[i].vartype = ARG_TYPE_INT;
545
            else {
547
            else {
546
                printf("Unrecognized variable argument.\n");
548
                printf("Unrecognized variable argument.\n");
547
                return NULL;
549
                error = 1;
548
            }
550
            }
549
            break;
551
            break;
550
        case ARG_TYPE_INVALID:
552
        case ARG_TYPE_INVALID:
551
        default:
553
        default:
552
            printf("invalid argument type\n");
554
            printf("invalid argument type\n");
553
            return NULL;
555
            error = 1;
554
            break;
556
            break;
555
        }
557
        }
556
    }
558
    }
557
   
559
   
-
 
560
    if (error) {
-
 
561
        spinlock_unlock(&cmd->lock);
-
 
562
        return NULL;
-
 
563
    }
-
 
564
   
558
    start = end + 1;
565
    start = end + 1;
559
    if (parse_argument(cmdline, len, &start, &end)) {
566
    if (parse_argument(cmdline, len, &start, &end)) {
560
        printf("Too many arguments.\n");
567
        printf("Too many arguments.\n");
561
        spinlock_unlock(&cmd->lock);
568
        spinlock_unlock(&cmd->lock);
562
        return NULL;
569
        return NULL;