Проблемма использования функции regexec из regex.h с использованием regmatch_t UNIX C

Пробую реолизовать grep, и в ряде функций использую функии из библиотеки regex.h

Так я реализую сохранение данных с использованием regexec

typedef struct {
  unsigned int mutual : 16;
  const char* const s_opt;
  regex_t pattern;
    regmatch_t match[1];
} g_opt;

В данном фрагменте пытаюсь вытянуть из считанной строки найденное соответствие. И реализую это для флага из grep

void print_with_opt(int *argc, char ***argv, FILE * fp, g_opt* opt, size_t index) {
  char buffer[BUF_SIZE];
  long count_of_matching = 0;
  bool if_match_file = false;
  for (int line = 1; fgets(buffer, BUF_SIZE, fp) != NULL; ++line) {
    if (strlen(buffer) == BUF_SIZE - 1)
      fprintf(stderr, "%s: Line too long\n", *(*argv + index));
    if (search(buffer, opt) == 0) {
      if_match_file = true;
      if (!OPT_CL(EQUAL) && !OPT_MF(EQUAL)) {
        if (*argc > 1 && !OPT_WN(EQUAL))
          printf("%s:", *(*argv + index));
        if (OPT_NL(EQUAL))
          printf("%d:", line);
        if (OPT_MP(EQUAL)) {
          regoff_t off = opt->match[0].rm_so;
          regoff_t len = opt->match[0].rm_eo - opt->match[0].rm_so;
          fprintf(stdout, "%.*s\n", len, buffer + off);
        } else {
          printf("%s", buffer);
        }
      }
      ++count_of_matching;
    }
  }
  if (OPT_MF(EQUAL) && if_match_file)
    printf("%s%s", index > 0 ? "\n" : "", *(*argv + index));
  if (OPT_CL(EQUAL)) printf("%ld", count_of_matching);
}

Проблема в следуещем. Пытаясь вытянуть сравниваемое значение, и делав это согласно документации, у меня не выходит получить запись в структуру regoff_t. Где я допускаю ошибку и не учитываю что-либо?

int search(char *buf, g_opt* opt) {
  int flag = regexec(&(opt->pattern), buf, sizeof(opt->match) / sizeof(opt->match[0]), opt->match, 0);
  return OPT_IM(EQUAL) ? !flag : flag;
}

github


Ответы (0 шт):