home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Fred Fish Collection 1.5
/
ffcollection-1-5-1992-11.iso
/
ff_disks
/
001-099
/
ff004.lzh
/
bm
/
GetPatFile.c
< prev
next >
Wrap
C/C++ Source or Header
|
1986-01-01
|
2KB
|
71 lines
#include <stdio.h>
#ifdef unix
#include <sys/types.h>
#include <sys/stat.h>
#endif
#include "bm.h"
int
GetPatFile(PatFile, DescVec)
char *PatFile;
struct PattDesc *DescVec[];
/* read patterns from a file and set up a pattern descriptor vector */
{
FILE *PFile;
#ifdef unix
extern char *malloc();
struct stat StatBuff;
int PatSize; /* the number of chars in all the patterns */
char *PatBuff; /* hold the patterns */
if (!(PFile = fopen(PatFile,"r"))) {
fprintf(stderr,"bm: can't open pattern file %s\n",PatFile);
exit(2);
} /* if */
/* find out how big the patterns are */
if (fstat(fileno(PFile),&StatBuff) == -1) {
fprintf(stderr,"bm: can't fstat %s\n",PatFile);
exit(2);
} /* if */
PatSize = StatBuff.st_size;
if (!PatSize) {
fprintf(stderr,"bm: pattern file is empty\n");
exit(2);
} /* if */
if (!(PatBuff = malloc(PatSize))) {
fprintf(stderr,"bm: insufficient memory to store patterns\n");
exit(2);
} /* if */
fread(PatBuff,1,PatSize,PFile); /* get the patterns */
/* make sure the patterns are null-terminated. We can't have
* nulls in the patterns */
if (PatBuff[PatSize-1] == '\n')
PatBuff[PatSize-1] = '\0';
else
PatBuff[PatSize] = '\0'; /* BUG! Past allocated mem */
#else
static char PatBuff[1024];
register char *PatBuffp = PatBuff;
register int inchar;
if (!(PFile = fopen(PatFile,"r"))) {
fprintf(stderr,"bm: can't open pattern file %s\n",PatFile);
exit(2);
} /* if */
while ((inchar = fgetc (PFile)) != EOF) {
if ((PatBuffp - PatBuff) >= sizeof (PatBuff)) {
fprintf(stderr,"bm: insufficient memory to store patterns\n");
exit(2);
}
*PatBuffp++ = inchar;
}
if (PatBuffp == PatBuff) {
fprintf(stderr,"bm: pattern file is empty\n");
exit(2);
} /* if */
/* make sure the patterns are null-terminated. We can't have
* nulls in the patterns */
if (*--PatBuffp == '\n')
*PatBuffp = '\0';
#endif
return(MkDescVec(DescVec,PatBuff));
} /* GetPatFile */