view objgrep/grep.c @ 318:4e1d7ce0ee71

frbl/reconst/boot.c: perfect match to TCS211 boot.obj
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 05 Mar 2020 00:27:22 +0000
parents c25367bb7656
children
line wrap: on
line source

/*
 * objgrep: the actual grep operation
 */

#include <sys/types.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include "globals.h"

do_grep()
{
	uint32_t *match, *mask, *haystack;
	unsigned matchlen_words, haystack_len_words, haystack_limit;
	unsigned i, j;

	match = (uint32_t *)pattern_match;
	mask = (uint32_t *)pattern_mask;
	haystack = (uint32_t *)binfilemap;
	matchlen_words = pattern_len >> 2;
	haystack_len_words = binfile_tot_size >> 2;
	haystack_limit = haystack_len_words - matchlen_words;
	for (i = 0; i <= haystack_limit; i++) {
		for (j = 0; j < matchlen_words; j++)
			if ((haystack[i+j] & mask[j]) != match[j])
				goto haystack_next;
		/* got a match! */
		match_offset = i << 2;
		return(1);
haystack_next:	continue;
	}
	return(0);
}