All pastes #987998 Raw Edit

Mine

public text v1 · immutable
#987998 ·published 2008-04-17 04:18 UTC
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");
			}
		}
	}
}