1: #include <stdio.h> 2: #include <sys/types.h> 3: #include <sys/stat.h> 4: #include "bm.h" 5: int 6: GetPatFile(PatFile, DescVec) 7: char *PatFile; 8: struct PattDesc *DescVec[]; 9: /* read patterns from a file and set up a pattern descriptor vector */ 10: { 11: extern char *malloc(); 12: FILE *PFile; 13: struct stat StatBuff; 14: int PatSize; /* the number of chars in all the patterns */ 15: char *PatBuff; /* hold the patterns */ 16: if (!(PFile = fopen(PatFile,"r"))) { 17: fprintf(stderr,"bm: can't open pattern file %s\n",PatFile); 18: exit(2); 19: } /* if */ 20: /* find out how big the patterns are */ 21: if (fstat(fileno(PFile),&StatBuff) == -1) { 22: fprintf(stderr,"bm: can't fstat %s\n",PatFile); 23: exit(2); 24: } /* if */ 25: PatSize = StatBuff.st_size; 26: if (!PatSize) { 27: fprintf(stderr,"bm: pattern file is empty\n"); 28: exit(2); 29: } /* if */ 30: if (!(PatBuff = malloc(PatSize))) { 31: fprintf(stderr,"bm: insufficient memory to store patterns\n"); 32: exit(2); 33: } /* if */ 34: fread(PatBuff,1,PatSize,PFile); /* get the patterns */ 35: /* make sure the patterns are null-terminated. We can't have 36: * nulls in the patterns */ 37: if (PatBuff[PatSize-1] == '\n') 38: PatBuff[PatSize-1] = '\0'; 39: else 40: PatBuff[PatSize] = '\0'; 41: return(MkDescVec(DescVec,PatBuff)); 42: } /* GetPatFile */