Проблемма использования функции 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;
}