djmolny@cuae2.ATT.COM (DJ Molny) (01/12/87)
The ATC source I posted on Friday assumed that kernel file locking was available. While this is true of System V Release 2 systems from AT&T, it is not included in all versions of System V. To get around the problem, I've introduced another compile option in the top level Makefile. If you have /usr/group standard record and file locking (check for the presence of /usr/include/unistd.h), leave the makefile as is. Otherwise, comment out the line that says "UNISTD = -DUNISTD". The new locking scheme is based on exclusive creation of a temporary file. It's hardly bullet-proof, but it should suffice in a friendly environment. Anybody who wants to beef it up should feel free to do so. Five files are affected by this change: Makefile, src/Makefile, src/include.h, src/log.c, and src/graphics.c. Vanilla diff's appear below. Sorry for the inconvenience. Diff for Makefile: 14a15,17 > # for System V with kernel locking, use the following line > UNISTD = -DUNISTD > 47,49c50,52 < ( cd $(SRC); \ < make OSVER=$(OSVER) DEST='"$(DESTINATION)"' \ < $(CURSESLIBR) USETERML=$(USETERML) ) --- > (cd $(SRC); \ > make OSVER=$(OSVER) UNISTD=$(UNISTD) \ > DEST='"$(DESTINATION)"' $(CURSESLIBR) USETERML=$(USETERML) ) Diff for src/Makefile: 10c10 < CFLAGS = -O -D$(OSVER) -DDEST='$(DEST)' --- > CFLAGS = $(UNISTD) -O -D$(OSVER) -DDEST='$(DEST)' Diff for src/include.h: 24a25 > #ifdef UNISTD 25a27 > #endif 27a30 > #include <errno.h> Diff for src/log.c: 82a83 > #ifdef UNISTD 83a85,100 > #else > #define LOCKNAME "/tmp/atc.lock" > /* locking scheme for those without kernel file locking */ > for (i=0; i < 10; i++) > { > if (open(LOCKNAME, O_WRONLY|O_CREAT|O_EXCL, 0200) != -1) > break; /* success */ > if (errno != EEXIST) /* some other error */ > { > i = 10; > break; > } > sleep(2); > } > > if (i == 10) /* hit loop end, bomb out */ 84a102 > #endif 190c208,210 < /* lock will evaporate upon close */ --- > /* kernel lock will evaporate upon close */ > #ifndef UNISTD > unlink(LOCKNAME); /* remove lock file */ Diffs for src/graphics.c: 11,13d10 < #ifdef SYSV < #include <errno.h> < #endif -- Regards, DJ Molny, N9609U ihnp4!cuae2!djmolny