#include <stdio.h>
#include <stdlib.h>
#include <err.h>
#include <string.h>
#include "patterns.h"
static void read_string(char *, size_t);
static void read_string_stop(void);
static void
read_string(char *buf, size_t len)
{
size_t i;
bzero(buf, len);
if (fgets(buf, len, stdin) == NULL)
err(1, "fgets");
i = strnlen(buf, len);
if (i != 0)
buf[i-1] = '\0';
}
static void
read_string_stop()
{
if (getchar() != EOF)
errx(1, "read_string_stop: too many input");
}
int
main(int argc, char *argv[])
{
char string[1024];
char pattern[1024];
struct str_match m;
const char *errstr = NULL;
int ret;
size_t i;
if (argc != 3) {
read_string(string, sizeof(string));
read_string(pattern, sizeof(pattern));
read_string_stop();
} else {
strlcpy(string, argv[1], sizeof(string));
strlcpy(pattern, argv[2], sizeof(pattern));
}
printf("string='%s'\n", string);
printf("pattern='%s'\n", pattern);
ret = str_match(string, pattern, &m, &errstr);
if (errstr != NULL)
errx(1, "str_match: %s", errstr);
printf("ret=%d num=%d\n", ret, m.sm_nmatch);
for (i=0; i<m.sm_nmatch; i++) {
printf("%ld: %s\n", i, m.sm_match[i]);
}
str_match_free(&m);
return (EXIT_SUCCESS);
}