void add_file(char *filename) { char buff[PATH_MAX]; FILE *f; char *ptr; char *p2; int count = 0; if (strcmp(filename, "-") == 0) { f = stdin; } else { f = fopen(filename, "r"); if (f == NULL) { #ifdef USE_LIBSCHILY comerr("Cannot open '%s'.\n", filename); #else perror("fopen"); exit(1); #endif } } while (fgets(buff, sizeof (buff), f)) { count++; ptr = buff; while (isspace(*ptr)) ptr++; if (*ptr == 0) continue; if (*ptr == '#') continue; if (ptr[strlen(ptr) - 1] == '\n') ptr[strlen(ptr) - 1] = 0; p2 = strchr(ptr, '='); if (p2 == NULL) { #ifdef USE_LIBSCHILY comerrno(EX_BAD, "Error in file '%s' line %d: %s\n", filename, count, buff); #else fprintf(stderr, "Error in file '%s' line %d: %s\n", filename, count, buff); exit(1); #endif } *p2 = 0; p2++; add_one_file(ptr, p2); } if (f != stdin) fclose(f); }
/* * compile the regular expression argument into a dfa */ char * re_comp(char *sp) { char c; struct re_globals *_re = re_globals; char *ep; int cclcnt, numbra = 0; char *lastep = 0; char bracket[NBRA]; char *bracketp = &bracket[0]; char *retoolong = "Regular expression too long"; if (_re == 0) { _re = (struct re_globals *)calloc(1, sizeof (*_re)); if (_re == 0) return ("Out of memory"); re_globals = _re; } ep = expbuf; #define comerr(msg) {expbuf[0] = 0; return (msg); } if (sp == 0 || *sp == '\0') { if (*ep == 0) return ("No previous regular expression"); return (0); } if (*sp == '^') { circf = 1; sp++; } else circf = 0; for (;;) { if (ep >= &expbuf[ESIZE]) comerr(retoolong); if ((c = *sp++) == '\0') { if (bracketp != bracket) comerr("unmatched \\("); *ep++ = CEOF; *ep++ = 0; return (0); } if (c != '*') lastep = ep; switch (c) { case '.': *ep++ = CDOT; continue; case '*': if (lastep == 0 || *lastep == CBRA || *lastep == CKET) goto defchar; *lastep |= CSTAR; continue; case '$': if (*sp != '\0') goto defchar; *ep++ = CDOL; continue; case '[': *ep++ = CCL; *ep++ = 0; cclcnt = 1; if ((c = *sp++) == '^') { c = *sp++; ep[-2] = NCCL; } do { if (c == '\0') comerr("missing ]"); if (c == '-' && ep [-1] != 0) { if ((c = *sp++) == ']') { *ep++ = '-'; cclcnt++; break; } while (ep[-1] < c) { *ep = ep[-1] + 1; ep++; cclcnt++; if (ep >= &expbuf[ESIZE]) comerr(retoolong); } } *ep++ = c; cclcnt++; if (ep >= &expbuf[ESIZE]) comerr(retoolong); } while ((c = *sp++) != ']'); lastep[1] = (char)cclcnt; continue; case '\\': if ((c = *sp++) == '(') { if (numbra >= NBRA) comerr("too many \\(\\) pairs"); *bracketp++ = (char)numbra; *ep++ = CBRA; *ep++ = numbra++; continue; } if (c == ')') { if (bracketp <= bracket) comerr("unmatched \\)"); *ep++ = CKET; *ep++ = *--bracketp; continue; } if (c >= '1' && c < ('1' + NBRA)) { *ep++ = CBACK; *ep++ = c - '1'; continue; } *ep++ = CCHR; *ep++ = c; continue; defchar: default: *ep++ = CCHR; *ep++ = c; } } }
EXPORT void initfifo() { int pagesize; if (obs == 0) obs = bs; if (fs == 0) { #if defined(sun) && defined(mc68000) fs = 1*1024*1024; #else #if defined(__linux) && !defined(USE_MMAP) fs = 4*1024*1024; #else fs = 8*1024*1024; #endif #endif } if (fs < bs + obs) fs = bs + obs; if (fs < 2*obs) fs = 2*obs; fs = roundup(fs, obs); #ifdef _SC_PAGESIZE pagesize = sysconf(_SC_PAGESIZE); #else pagesize = getpagesize(); #endif buflen = roundup(fs, pagesize) + pagesize; EDEBUG(("bs: %d obs: %d fs: %d buflen: %d\n", bs, obs, fs, buflen)); #if defined(USE_MMAP) && defined(USE_USGSHM) if (shmflag) buf = mkshm(buflen); else buf = mkshare(buflen); #else #if defined(USE_MMAP) buf = mkshare(buflen); #endif #if defined(USE_USGSHM) buf = mkshm(buflen); #endif #if defined(USE_OS2SHM) buf = mkos2shm(buflen); #endif #endif mp = (m_head *)buf; fillbytes((char *)mp, sizeof(*mp), '\0'); stats = &mp->stats; mp->base = &buf[pagesize]; fifo_setparams(); if (pipe(mp->gp) < 0) comerr("pipe\n"); if (pipe(mp->pp) < 0) comerr("pipe\n"); mp->putptr = mp->getptr = mp->base; prmp(); { /* Temporary until all modules know about mp->xxx */ extern int bufsize; extern char* bigbuf; extern char* bigptr; bufsize = mp->size; bigptr = bigbuf = mp->base; } }