rendered paste body#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <ctype.h>
#include <regex.h>
#include <errno.h>
#include <sys/types.h>
#include <string.h>
#define PATTERN
#define BUFSIZE 128
#define SUBMATCH_NUM 20
void usage(char *progname);
void search(regex_t *preg, char *buffer);
int main(int argc, char **argv) {
if(argc != 2) { usage(argv[0]); exit(1); }
FILE *memdump;
char *buf = calloc(BUFSIZE, sizeof(char));
int c, i = 0;
char n;
regex_t prg;
if(regcomp(&prg, PATTERN, 0) != 0)
{ perror("regcomp"); exit(1); }
if((memdump = fopen(argv[1], "r")) == NULL)
{ perror("fopen"); exit(1); }
//while((c = fgetc(memdump)) != EOF) {
//if((isgraph(c) == 0) && (i < BUFSIZE)) {
//buf[i] = (char)c;
while((fscanf(memdump, "%c", &n)) != EOF) {
if((isgraph(n) == 0) && (i < BUFSIZE)) {
buf[i] = n;
} else {
search(&prg, buf);
i = 0;
}
i++;
}
regfree(&prg);
free(buf);
fclose(memdump);
return 0;
}
void usage(char *progname) {
printf("Usage: %s filename\n", progname);
}
void search(regex_t *preg, char *buffer) {
size_t nmtch = SUBMATCH_NUM;
regmatch_t pmtch[SUBMATCH_NUM];
int err, i;
if((err = regexec(preg, buffer, nmtch, pmtch, 0)) != 0) {
size_t length = regerror(err, preg, NULL, 0);
char *err_buf = malloc(length);
regerror(err, preg, err_buf, length);
printf("%s\n", err_buf);
free(err_buf);
} else {
for(i=0;i < SUBMATCH_NUM;i++) {
if(sizeof(pmtch[i]) != 0) {
printf("w00t! match!\n");
}
}
}
}