예제 #1
0
파일: netsh.c 프로젝트: 21011996/OS2016
int read_and_exec(int socket) {
    struct buf_t* buf = buf_new(8049);
    int pos = buf_readuntil(socket, buf, '\n');
    if (pos == -2)
        return 0;
    char* buffer = buf->data;
    buffer[pos] = '\0';
    struct execargs_t* arguments[1024];
    int k = 0;
    while (1) {
        char delim;
        int argc = count_words(buffer, '|');
        if (argc == 0)
            break;
        char* argv[argc];
        int shift;
        int i = 0;
        for (i = 0; i < argc; i++) {
            delim = '|';
            argv[i] = get_word(buffer, &delim, &shift);
            buffer += shift;
        }
        arguments[k] = (struct execargs_t*) malloc(sizeof(struct execargs_t));
        *arguments[k] = new_args(argc, argv);
        shift = get_delim(buffer, '|');
        buffer+=shift;
        k++;
    }
    buf->size -= (buffer - (char*) buf->data + 1);
    runpiped(arguments, k, socket);
    buf_free(buf);
    return 0;
}
예제 #2
0
파일: rpn.c 프로젝트: larioj/languages
// requires: exp be a c string, with no
// spaces and only valid characters.
int rpn(char *exp, int size) {
  if (size == 1) {
    return 0;
  } else {
    if (check_constraints(exp, size)) {
      printf("%s\n", exp);
      printf("Constraints not met\n");
      return 1;
    }
    int delim_loc = get_delim(exp, size);
    char delim = exp[delim_loc];
    exp[delim_loc] = '\0';
    exp[size - 1] = '\0';
    char *left, *right;
    left = exp + 1;
    right = exp + delim_loc + 1;
    if (rpn(left, strlen(left)) ||
        rpn(right, strlen(right))) {
      return 1;
    }
    merge(exp, left, right, delim);
    return 0;
  }
}
예제 #3
0
int get_line(char **lineptr,size_t *n,FILE *fp)
{
    return (get_delim(lineptr,n,'\n',fp));
}