home *** CD-ROM | disk | FTP | other *** search
- /* Copyright (c) 1994 Sun Wu, Udi Manber, Burra Gopal. All Rights Reserved. */
- #include "agrep.h"
-
- /* AGREP_POINTER must be defined to be 1 always */
- /* #define AGREP_POINTER 1 */
- /* Removed since we now have a -DAGREP_POINTER=1 option in the Makefile */
-
- fill_buf(fd, buf, record_size)
- int fd, record_size;
- unsigned char *buf;
- {
- int num_read=1;
- int total_read=0;
-
- if (fd >= 0) {
- while(total_read < record_size && num_read > 0) {
- num_read = read(fd, buf+total_read, record_size - total_read);
- total_read = total_read + num_read;
- }
- }
- #if AGREP_POINTER
- else return 0; /* should not call this function if buf is a pointer to a user-specified region! */
- #else /*AGREP_POINTER*/
- else { /* simulate a file */
- total_read = (record_size > (agrep_inlen - agrep_inpointer)) ? (agrep_len - agrep_inpointer) : record_size;
- memcpy(buf, agrep_inbuffer + agrep_inpointer, total_read);
- agrep_inpointer += total_read;
- }
- #endif /*AGREP_POINTER*/
- return(total_read);
- }
-
- /*
- * In these functions no allocs/copying is done when
- * fd == -1, i.e., agrep is called to search within memory.
- */
-
- alloc_buf(fd, buf, size)
- int fd;
- char **buf;
- int size;
- {
- #if AGREP_POINTER
- if (fd != -1)
- #endif /*AGREP_POINTER*/
- *buf = (char *)malloc(size);
- }
-
- free_buf(fd, buf)
- int fd;
- char *buf;
- {
- #if AGREP_POINTER
- if (fd != -1)
- #endif /*AGREP_POINTER*/
- free(buf);
- }
-