Example #1
0
int
main(int argc, char *argv[])
{
    wchar_t pattern[1024];
    int i;

    setlocale(LC_CTYPE, "");
    if (argc < 2) {
        fputs("no pattern\n", stderr);
        exit(1);
    }
    if (mbstowcs(pattern, argv[1], 1024) == (size_t)(-1)) {
        fprintf(stderr, "mbstowcs failed #1\n");
        exit(1);
    }
    if (argc == 2) {
        do_grep(pattern, stdin);
    }
    else {
        for (i = 2; i < argc; i++) {
            FILE *f;
            
            f = fopen(argv[i], "r");
            if (!f) {
                perror(argv[i]);
                exit(1);
            }
            do_grep(pattern, f);
            fclose(f);
        }
    }
    exit(0);
}
Example #2
0
int
main(int argc, char *argv[])
{
    regex_t pat;
    int err;
    int i;

    if (argc < 2) {
        fputs("no pattern\n", stderr);
        exit(1);
    }
    err = regcomp(&pat, argv[1], REG_EXTENDED | REG_NOSUB | REG_NEWLINE);
    if (err != 0) {
        char buf[1024];

        regerror(err, &pat, buf, sizeof buf);
        puts(buf);
        exit(1);
    }
    if (argc == 2) {
        do_grep(&pat, stdin);
    }
    else {
        for (i = 2; i < argc; i++) {
            FILE *f = fopen(argv[i], "r");
            if (!f) die(argv[i]);
            do_grep(&pat, f);
            fclose(f);
        }
    }
    regfree(&pat);
    exit(0);
}
int main(int argc, char *argv[]) {
  int opt;
  int ignore_case = 0;
  int matched = 0;

  while ((opt = getopt_long(argc, argv, "iv", longopts, NULL)) != -1) {
    switch (opt) {
      case 'i':
        ignore_case = REG_ICASE;
        break;
      case 'v':
        matched = REG_NOMATCH;
        break;
    }
  }

  regex_t pat;
  int err;
  int i;

  if (argc < 2) {
    fputs("no pattern\n", stderr);
    exit(1);
  }
  int regex_flg = REG_EXTENDED | REG_NOSUB | REG_NEWLINE | ignore_case;
  err = regcomp(&pat, argv[optind], regex_flg);
  if (err != 0) {
    char buf[1024];

    regerror(err, &pat, buf, sizeof buf);
    puts(buf);
    exit(1);
  }
  if (optind == argc) {
    do_grep(&pat, stdin, matched);
  } else {
    for (i = optind + 1; i < argc; i++) {
      FILE *f;

      f = fopen(argv[i], "r");
      if (!f) {
        perror(argv[i]);
        exit(1);
      }
      do_grep(&pat, f, matched);
      fclose(f);
    }
  }
  regfree(&pat);
  exit(0);
}
Example #4
0
int main(int argc, char *argv[]) {
    regex_t pat;
    int err;
    int opt;
    int re_mode;

    while ((opt = getopt(argc, argv, "iv")) != -1) {
        switch (opt) {
        case 'i':
            opt_ignorecase = 1;
            break;
        case 'v':
            opt_invert = 1;
            break;
        case '?':
            fprintf(stderr, "Usage: %s [-iv] [PATTERN] \n", argv[0]);
            exit(1);
        }
    }

    /* 
     * 配列の添字 0 の位置(アドレス)を変更している。
     *  [a,b,c] += 1 => [b,c,null]
     *  これにより argc, argv の両変数からオプションの情報を
     *  取り除ける。
     */
    argv += optind;
    argc -= optind;

    if (argc < 1) {
        fputs("no pattern\n", stderr);
        exit(1);
    }

    re_mode = REG_EXTENDED | REG_NOSUB | REG_NEWLINE;
    if (opt_ignorecase) {
        re_mode |= REG_ICASE;
    }

    err = regcomp(&pat, argv[0], re_mode);
    if (err != 0) {
        char buf[1024];
        regerror(err, &pat, buf, sizeof buf);
        puts(buf);
        exit(1);
    }

    if (argc == 1) {
        do_grep(&pat, stdin);
    }
    else {
        int i;
        for (i = 1; i < argc; i++) {
            FILE *f;
            f = fopen(argv[i], "r");
            if (!f) {
                perror(argv[i]);
                exit(1);
            }
            do_grep(&pat, f);
            fclose(f);
        }
    }
    regfree(&pat);
    exit(0);
}
Example #5
0
int main(int argc, char **argv) {
    char *pattern          = NULL;
    int status             = 0;
    regex_t *preg          = malloc(sizeof(regex_t));
    int regcomp_flags      = REG_BASIC;
    int regex_errcode      = 0;
    gargs.is_invert        = 0;
    gargs.show_filename    = 0;
    gargs.show_line_number = 0;

    static const char *optstr = "Ee:Hhinv";
    int opt = 0;
    while ((opt = getopt(argc, argv, optstr)) != -1) {
        switch(opt) {
        case 'e':
            pattern = read_pattern(optarg);
            break;
        case 'E':
            regcomp_flags |= REG_EXTENDED;
            break;
        case 'H':
            gargs.show_filename = 1;
            break;
        case 'h':
            display_usage(EXIT_SUCCESS, NULL, EXIT_SUCCESS);
            break;
        case 'i':
            regcomp_flags |= REG_ICASE;
            break;
        case 'n':
            gargs.show_line_number = 1;
            break;
        case 'v':
            gargs.is_invert = 1;
            break;
        default: // shouldn't reach here
            break;
        }
    }
    if ( !pattern ) { // no -e option
        if (argc - optind < 1) {
            display_usage(EXIT_TROUBLE, "Please provide pattern.", -1);
        } else {
            pattern = read_pattern(argv[optind++]);
        }
    }

    if ( (regex_errcode = regcomp(preg, pattern, regcomp_flags)) != 0 ) {
        regfree(preg);
        display_usage(EXIT_TROUBLE, "Pattern invalid.", regex_errcode);
    }
        
    free(pattern);

    #ifdef DEBUG
    printf("optind:%d, argc:%d\n\n", optind, argc);
    #endif

    if (argc == optind) { // use stdin
        status = do_grep(preg, "-");
        regfree(preg);
        exit(status);
    }

    if (argc - optind > 1)
        gargs.show_filename = 1;

    while (optind < argc) {
        char *filename = argv[optind++];
        if (isdir(filename))
            fprintf(stderr, "[WARNING] %s is a directory.\n", filename);
            //display_usage(EXIT_TROUBLE, "Please provide a file instead of directory", -1);
        status = do_grep(preg, filename);
    }

    regfree(preg);
    exit(status);
}