greg@smash.CTS.COM (Greg Laskin) (10/09/87)
As distributed, the program uses pointers and longs interchangably. These hacks make it work better under SCO Xenix SV (2.1.3). Most of the changes would probably be useful for uPort too. Watch out under uPort for lots of mallocs and the makefile changes some of which are Xenix specific. *** cxref.orig/bsearch.c Fri Oct 9 11:24:49 1987 --- cxref/bsearch.c Fri Oct 9 12:11:34 1987 *************** *** 1,6 /* Copyright (c) 1986, Greg McGary */ static char sccsid[] = "@(#)bsearch.c 1.1 86/10/09"; ! char *bsearch(); /* --- 1,9 ----- /* Copyright (c) 1986, Greg McGary */ static char sccsid[] = "@(#)bsearch.c 1.1 86/10/09"; ! #ifdef LINT_ARGS ! #define bsearch Bsearch ! #endif ! long bsearch(); /* *************** *** 6,12 /* Binary search -- from Knuth (6.2.1) Algorithm B */ ! char * bsearch(key, base, nel, width, compar) char *key; register char *base; --- 8,14 ----- /* Binary search -- from Knuth (6.2.1) Algorithm B */ ! long bsearch(key, base, nel, width, compar) char *key; long base; *************** *** 9,15 char * bsearch(key, base, nel, width, compar) char *key; ! register char *base; unsigned int nel; int width; int (*compar)(); --- 11,17 ----- long bsearch(key, base, nel, width, compar) char *key; ! long base; unsigned int nel; int width; int (*compar)(); *************** *** 14,21 int width; int (*compar)(); { ! register char *last; ! register char *position; register int result; int width2; --- 16,23 ----- int width; int (*compar)(); { ! long last; ! long position; register int result; int width2; *************** *** 20,26 int width2; width2 = width * 2; ! last = &base[width * (nel - 1)]; while (last >= base) { position = &base[width * ((last - base)/width2)]; --- 22,28 ----- int width2; width2 = width * 2; ! last = base + (width * (nel - 1)); while (last >= base) { position = base + (width * ((last - base)/width2)); *************** *** 23,29 last = &base[width * (nel - 1)]; while (last >= base) { ! position = &base[width * ((last - base)/width2)]; if ((result = (*compar)(key, position)) == 0) return position; --- 25,31 ----- last = base + (width * (nel - 1)); while (last >= base) { ! position = base + (width * ((last - base)/width2)); if ((result = (*compar)(key, position)) == 0) return position; *************** *** 32,36 else base = position + width; } ! return (char *)0; } --- 34,38 ----- else base = position + width; } ! return 0; } *** cxref.orig/hash.c Fri Oct 9 11:24:56 1987 --- cxref/hash.c Wed Oct 7 10:37:07 1987 *************** *** 27,34 char *base; /* base of hash table */ register int nel; /* number of elements in table */ int width; /* width of each element */ ! int (*h1)(); /* primary hash function */ ! int (*h2)(); /* secondary hash function */ int (*compar)(); /* key comparison function */ long *probes; { --- 27,34 ----- char *base; /* base of hash table */ register int nel; /* number of elements in table */ int width; /* width of each element */ ! unsigned (*h1)(); /* primary hash function */ ! unsigned (*h2)(); /* secondary hash function */ int (*compar)(); /* key comparison function */ long *probes; { *************** *** 32,39 int (*compar)(); /* key comparison function */ long *probes; { ! register int hash1; ! register int hash2; register char *slot; hash1 = (*h1)(key) % nel; --- 32,39 ----- int (*compar)(); /* key comparison function */ long *probes; { ! register unsigned hash1; ! register unsigned hash2; register char *slot; hash1 = (*h1)(key) % nel; *** cxref.orig/init.c Fri Oct 9 11:24:58 1987 --- cxref/init.c Tue Oct 6 18:23:31 1987 *************** *** 21,27 return NULL; fseek(idFILE, 0L, 0); ! fread(idhp, sizeof(struct idhead), 1, idFILE); if (!strnequ(idhp->idh_magic, IDH_MAGIC, sizeof(idhp->idh_magic))) { fprintf(stderr, "%s: Not an id file: `%s'\n", MyName, idFile); exit(1); --- 21,27 ----- return NULL; fseek(idFILE, 0L, 0); ! fread((char *)idhp, sizeof(struct idhead), 1, idFILE); if (!strnequ(idhp->idh_magic, IDH_MAGIC, sizeof(idhp->idh_magic))) { fprintf(stderr, "%s: Not an id file: `%s'\n", MyName, idFile); exit(1); *** cxref.orig/lid.c Fri Oct 9 11:25:03 1987 --- cxref/lid.c Wed Oct 7 16:56:30 1987 *************** *** 231,237 if (!Merging || (re = fileRE(name, delimit, delimit)) == NULL) re = NULL; #ifdef REGEX ! else if ((reCompiled = regcmp(re, 0)) == NULL) { fprintf(stderr, "%s: Syntax Error: %s\n", MyName, re); return; } --- 231,237 ----- if (!Merging || (re = fileRE(name, delimit, delimit)) == NULL) re = NULL; #ifdef REGEX ! else if ((reCompiled = regcmp(re,(char *) 0)) == NULL) { fprintf(stderr, "%s: Syntax Error: %s\n", MyName, re); return; } *************** *** 473,479 char *reCompiled; #ifdef REGEX ! if ((reCompiled = regcmp(re, 0)) == NULL) { fprintf(stderr, "%s: Syntax Error: %s\n", MyName, re); return 0; } --- 473,479 ----- char *reCompiled; #ifdef REGEX ! if ((reCompiled = regcmp(re, (char *)0)) == NULL) { fprintf(stderr, "%s: Syntax Error: %s\n", MyName, re); return 0; } *** cxref.orig/makefile Fri Oct 9 11:24:32 1987 --- cxref/makefile Fri Oct 9 12:14:33 1987 *************** *** 32,38 # it, set `RANLIB' to something harmless like `@:', or `echo' # -------------------------------------------------------------------- ! # DEFS = -DREGEX -DNDIR -DTERMIO # typical System-V defs # DEFS = -Dvoid=int -DRINDEX -DRE_EXEC -DNDIR # typical V7 defs DEFS = -Dvoid=int -DRINDEX -DRE_EXEC -DERRLINEBUF # BSD defs --- 32,38 ----- # it, set `RANLIB' to something harmless like `@:', or `echo' # -------------------------------------------------------------------- ! DEFS = -DREGEX -DNDIR -DTERMIO # typical System-V defs # DEFS = -Dvoid=int -DRINDEX -DRE_EXEC -DNDIR # typical V7 defs # DEFS = -Dvoid=int -DRINDEX -DRE_EXEC -DERRLINEBUF # BSD defs *************** *** 34,40 # DEFS = -DREGEX -DNDIR -DTERMIO # typical System-V defs # DEFS = -Dvoid=int -DRINDEX -DRE_EXEC -DNDIR # typical V7 defs ! DEFS = -Dvoid=int -DRINDEX -DRE_EXEC -DERRLINEBUF # BSD defs # LIBS = -lndir -lPW # typical System-V libs # LIBS = -lndir # typical V7 libs --- 34,40 ----- DEFS = -DREGEX -DNDIR -DTERMIO # typical System-V defs # DEFS = -Dvoid=int -DRINDEX -DRE_EXEC -DNDIR # typical V7 defs ! # DEFS = -Dvoid=int -DRINDEX -DRE_EXEC -DERRLINEBUF # BSD defs # LIBS = -lndir -lPW # typical System-V libs # LIBS = -lndir # typical V7 libs *************** *** 38,44 # LIBS = -lndir -lPW # typical System-V libs # LIBS = -lndir # typical V7 libs ! LIBS = # typical BSD libs (none) #RANLIB = @: # system doesn't have ranlib (Sys-V) RANLIB = ranlib # system has ranlib (typically V7 & BSD) --- 38,45 ----- # LIBS = -lndir -lPW # typical System-V libs # LIBS = -lndir # typical V7 libs ! # LIBS = # typical BSD libs (none) ! LIBS = -lx # Xenix SV ndir extension #RANLIB = @: # system doesn't have ranlib (Sys-V) RANLIB = ranlib # system has ranlib (typically V7 & BSD) *************** *** 51,57 # CCFLG = -g -DDEBUG # debugging # CCFLG = -p # profiling ! CCFLG = -O # production # LDFLG = -g # debugging # LDFLG = -p # profiling --- 52,58 ----- # CCFLG = -g -DDEBUG # debugging # CCFLG = -p # profiling ! CCFLG = -LARGE -O -Ml # production # LDFLG = -g # debugging # LDFLG = -p # profiling *************** *** 55,61 # LDFLG = -g # debugging # LDFLG = -p # profiling ! LDFLG = # production # -------------------------------------------------------------------- --- 56,62 ----- # LDFLG = -g # debugging # LDFLG = -p # profiling ! LDFLG = -S3 -Ml -i # production # -------------------------------------------------------------------- *************** *** 82,88 $(RANLIB) $@ mkid: mkid.o libid.a ! $(CC) -o $@ $@.o $(LDFLAGS) fid: fid.o libid.a $(CC) -o $@ $@.o $(LDFLAGS) --- 83,89 ----- $(RANLIB) $@ mkid: mkid.o libid.a ! $(CC) $(LDFLAGS) -o $@ $@.o fid: fid.o libid.a $(CC) $(LDFLAGS) -o $@ $@.o *************** *** 85,91 $(CC) -o $@ $@.o $(LDFLAGS) fid: fid.o libid.a ! $(CC) -o $@ $@.o $(LDFLAGS) lid: lid.o libid.a $(CC) -o $@ $@.o $(LDFLAGS) --- 86,92 ----- $(CC) $(LDFLAGS) -o $@ $@.o fid: fid.o libid.a ! $(CC) $(LDFLAGS) -o $@ $@.o lid: lid.o libid.a $(CC) $(LDFLAGS) -o $@ $@.o *************** *** 88,94 $(CC) -o $@ $@.o $(LDFLAGS) lid: lid.o libid.a ! $(CC) -o $@ $@.o $(LDFLAGS) idx: idx.o libid.a $(CC) -o $@ $@.o $(LDFLAGS) --- 89,95 ----- $(CC) $(LDFLAGS) -o $@ $@.o lid: lid.o libid.a ! $(CC) $(LDFLAGS) -o $@ $@.o idx: idx.o libid.a $(CC) $(LDFLAGS) -o $@ $@.o *************** *** 91,97 $(CC) -o $@ $@.o $(LDFLAGS) idx: idx.o libid.a ! $(CC) -o $@ $@.o $(LDFLAGS) $(LIDLINKS): lid -/bin/rm -f $@ --- 92,98 ----- $(CC) $(LDFLAGS) -o $@ $@.o idx: idx.o libid.a ! $(CC) $(LDFLAGS) -o $@ $@.o $(LIDLINKS): lid -/bin/rm -f $@ *** cxref.orig/mkid.c Fri Oct 9 11:25:11 1987 --- cxref/mkid.c Fri Oct 9 12:11:14 1987 *************** *** 174,180 for (idArgs = idArgHead; idArgs->ida_next; idArgs = idArgs->ida_next) { char *(*scanner)(); FILE *srcFILE; ! char *arg, *lang, *suff; arg = idArgs->ida_arg; if (idArgs->ida_flags & IDA_ARG) { --- 174,180 ----- for (idArgs = idArgHead; idArgs->ida_next; idArgs = idArgs->ida_next) { char *(*scanner)(); FILE *srcFILE; ! char *arg, *lang=NULL, *suff; arg = idArgs->ida_arg; if (idArgs->ida_flags & IDA_ARG) { *************** *** 238,244 hashCompress(HashTable, HashSize); if (Verbose) fprintf(stderr, "Sorting Hash Table...\n"); ! qsort(HashTable, HashFill, sizeof(struct idname *), idnQsortCmp); if (argsFrom == AF_IDFILE) { if (Verbose) --- 238,244 ----- hashCompress(HashTable, HashSize); if (Verbose) fprintf(stderr, "Sorting Hash Table...\n"); ! qsort((char *)HashTable, (int)HashFill, sizeof(struct idname *), idnQsortCmp); if (argsFrom == AF_IDFILE) { if (Verbose) *************** *** 277,283 int flags; while ((key = (*getId)(srcFILE, &flags)) != NULL) { ! slot = (struct idname **)hashSearch(key, HashTable, HashSize, sizeof(struct idname *), h1str, h2str, idnHashCmp, &HashProbes); HashSearches++; if (*slot != NULL) { (*slot)->idn_flags |= flags; --- 277,283 ----- int flags; while ((key = (*getId)(srcFILE, &flags)) != NULL) { ! slot = (struct idname **)hashSearch(key, (char *)HashTable, (int) HashSize, sizeof(struct idname *), h1str, h2str, idnHashCmp, &HashProbes); HashSearches++; if (*slot != NULL) { (*slot)->idn_flags |= flags; *************** *** 337,343 idh.idh_vecc = i; vecBuf = malloc((idh.idh_pthc + 1) * idh.idh_vecc); - putc('\377', idFILE); before = idh.idh_namo = ftell(idFILE); longest = 0; --- 337,342 ----- idh.idh_vecc = i; vecBuf = malloc((idh.idh_pthc + 1) * idh.idh_vecc); putc('\377', idFILE); before = idh.idh_namo = ftell(idFILE); longest = 0; *************** *** 378,384 strncpy(idh.idh_magic, IDH_MAGIC, sizeof(idh.idh_magic)); idh.idh_vers = IDH_VERS; fseek(idFILE, 0L, 0); ! fwrite(&idh, sizeof(struct idhead), 1, idFILE); fclose(idFILE); } --- 377,383 ----- strncpy(idh.idh_magic, IDH_MAGIC, sizeof(idh.idh_magic)); idh.idh_vers = IDH_VERS; fseek(idFILE, 0L, 0); ! fwrite((char *)&idh, sizeof(struct idhead), 1, idFILE); fclose(idFILE); } *************** *** 412,418 usage(); } idModTime = statBuf.st_mtime; ! fread(&idh, sizeof(struct idhead), 1, idFILE); if (!strnequ(idh.idh_magic, IDH_MAGIC, sizeof(idh.idh_magic))) { fprintf(stderr, "%s: Not an id file: `%s'\n", MyName, idFile); exit(1); --- 411,417 ----- usage(); } idModTime = statBuf.st_mtime; ! fread((char *)&idh, sizeof(struct idhead), 1, idFILE); if (!strnequ(idh.idh_magic, IDH_MAGIC, sizeof(idh.idh_magic))) { fprintf(stderr, "%s: Not an id file: `%s'\n", MyName, idFile); exit(1); *************** *** 477,483 if ((idFILE = fopen(idFile, "r")) == NULL) filerr("open", idFile); ! fread(&idh, sizeof(struct idhead), 1, idFILE); entry = malloc(idh.idh_bsiz); --- 476,482 ----- if ((idFILE = fopen(idFile, "r")) == NULL) filerr("open", idFile); ! fread((char *)&idh, sizeof(struct idhead), 1, idFILE); entry = malloc(idh.idh_bsiz); bitsOff = malloc(BitArraySize); *************** *** 480,486 fread(&idh, sizeof(struct idhead), 1, idFILE); entry = malloc(idh.idh_bsiz); - bitsOff = malloc(BitArraySize); bzero(bitsOff, BitArraySize); for (i = 0; idArgs->ida_next; idArgs = idArgs->ida_next) --- 479,484 ----- fread((char *)&idh, sizeof(struct idhead), 1, idFILE); entry = malloc(idh.idh_bsiz); bitsOff = malloc(BitArraySize); bzero(bitsOff, BitArraySize); for (i = 0; idArgs->ida_next; idArgs = idArgs->ida_next) *************** *** 490,495 bitArray = malloc(BitArraySize); bzero(bitArray, BitArraySize); t2 = newTable = (struct idname **)malloc((idh.idh_namc + 1) * sizeof(struct idname *)); fseek(idFILE, idh.idh_namo, 0); count = 0; for (i = 0; i < idh.idh_namc; i++) { --- 488,494 ----- bitArray = malloc(BitArraySize); bzero(bitArray, BitArraySize); t2 = newTable = (struct idname **)malloc((idh.idh_namc + 1) * sizeof(struct idname *)); + fseek(idFILE, idh.idh_namo, 0); count = 0; for (i = 0; i < idh.idh_namc; i++) { *************** *** 587,593 fprintf(stderr, "Rehashing... (doubling size to %ld)\n", HashSize); HashMaxLoad = HashSize - (HashSize >> 4); HashTable = (struct idname **)calloc(HashSize, sizeof(struct idname *)); - HashFill = 0; for (htp = oldHashTable; htp < &oldHashTable[oldHashSize]; htp++) { if (*htp == NULL) --- 586,591 ----- fprintf(stderr, "Rehashing... (doubling size to %ld)\n", HashSize); HashMaxLoad = HashSize - (HashSize >> 4); HashTable = (struct idname **)calloc(HashSize, sizeof(struct idname *)); HashFill = 0; for (htp = oldHashTable; htp < &oldHashTable[oldHashSize]; htp++) { if (*htp == NULL) *************** *** 592,598 for (htp = oldHashTable; htp < &oldHashTable[oldHashSize]; htp++) { if (*htp == NULL) continue; ! slot = (struct idname **)hashSearch((*htp)->idn_name, (char *)HashTable, HashSize, sizeof(struct idname *), h1str, h2str, idnHashCmp, &HashProbes); if (*slot) { fprintf(stderr, "%s: Duplicate hash entry!\n"); exit(1); --- 590,596 ----- for (htp = oldHashTable; htp < &oldHashTable[oldHashSize]; htp++) { if (*htp == NULL) continue; ! slot = (struct idname **)hashSearch((*htp)->idn_name, (char *)HashTable, (int)HashSize, sizeof(struct idname *), h1str, h2str, idnHashCmp, &HashProbes); if (*slot) { fprintf(stderr, "%s: Duplicate hash entry!\n"); exit(1); *************** *** 601,607 HashSearches++; HashFill++; } ! free(oldHashTable); } /* --- 599,605 ----- HashSearches++; HashFill++; } ! free((char *)oldHashTable); } /* *** cxref.orig/paths.c Fri Oct 9 11:25:14 1987 --- cxref/paths.c Tue Oct 6 18:00:29 1987 *************** *** 127,134 } #include <sys/types.h> #include <sys/stat.h> ! #ifdef NDIR ! #include <ndir.h> #else #include <sys/dir.h> #endif --- 127,136 ----- } #include <sys/types.h> #include <sys/stat.h> ! #if defined(NDIR) && defined(M_XENIX) && defined(M_SYS5) ! #include <sys/ndir.h> ! #elif defined (NDIR) ! #include <ndir.h> #else #include <sys/dir.h> #endif -- Greg Laskin "When everybody's talking and nobody's listening, how can we decide?" INTERNET: laskin@gryphon.CTS.COM UUCP: {hplabs!hp-sdd, sdcsvax, ihnp4, nosc}!crash!gryphon!laskin