Xref: utzoo news.software.b:2292 comp.unix.xenix:6341 Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!sun-barr!cs.utexas.edu!uunet!ateng!chip From: chip@ateng.com (Chip Salzenberg) Newsgroups: news.software.b,comp.unix.xenix Subject: C News on SCO Xenix Message-ID: <1989Jun13.173501.16429@ateng.com> Date: 13 Jun 89 17:35:01 GMT Organization: A T Engineering Lines: 126 C News on SCO Xenix/386 2.3 works like a dream. Notes on how to do it: First, be sure _all_ shell scripts in the development tree that start with "#! /bin/sh" are changed to ": use /bin/sh". It's too bad Xenix suffers from Not Invented Here disease; "#!" is such a nice feature. Sigh. Second, tell "build" that the following things are unavailable: ANSI stdlib.h fsync() index() rindex() symlink() Third, Xenix setuid(geteuid()) is broken so badly that it doesn't even return -1 when it fails! I got around this problem by making the following change in relay/relay.c: /* Xenix setuid() doesn't return error?! */ (void) setgid(newsgid); (void) setuid(newsuid); if (getgid() != newsgid || getegid() != newsgid || getuid() != newsuid || geteuid() != newsuid) { /* this code runs the setuid-root hack program */ } Fourth, you need spacefor.xenix. I'm including it in this article as a sharchive. You'll need to modify the device assignment labeled "dare to be stupid". :-) All in all, C News works tremendously well. I love it to pieces. Thanks much to Geoff and Henry. #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh 'spacefor.xenix' <<'END_OF_FILE' X: use /bin/sh X# spacefor - determine available disk space X# About how many things of $1 bytes will fit in the available space for X# stuff of type $2 ("incoming", "articles", "control", "outbound $3", X# or "archive") without cramping things too badly? X# X# You'll have to change this -- your blocksize, minimum-free-desired amounts, X# and df output format will probably differ, and you may need to name X# your filesystems explicitly. X X# =()<. ${NEWSCONFIG-@@}>()= X. ${NEWSCONFIG-/usr/lib/news/bin/config} X XPATH=$NEWSCTL/bin:$NEWSBIN:$NEWSPATH ; export PATH Xumask $NEWSUMASK X X# punt to server if necessary Xif test -r $NEWSCTL/server Xthen X server="`cat $NEWSCTL/server`" X me="`hostname`" X if test " $server" != " $me" X then X exec rsh $server "PATH=$PATH `basename $0` $*" X # does not return X fi Xfi X X# head off special case Xcase "$1" in X0) echo 10000 ; exit 0 ;; Xesac X X# argument to df, df units, and free space desired (in df units) Xdfunit=512 # default unit (bytes) Xcase "$2" in Xincoming) arg="$NEWSARTS/in.coming" ; desire=5000 ;; Xarticles) arg="$NEWSARTS" ; desire=5000 ;; Xcontrol) arg="$NEWSCTL" ; desire=3000 ;; Xoutbound) arg="/usr/spool/uucp" ; desire=10000 ;; # ignore $3 Xarchive) arg="$NEWSARTS" ; desire=1 ;; # system-specific X*) echo "$0: bad type argument \`$2'!!" >&2 X exit 2 ;; Xesac X X# dare to be stupid Xarg=/dev/root X X# this is set up for the stupid System V df Xdf $arg | sed "s/.*:/: :/" | awk "BEGIN { nf = 6 ; nr = 1 } X NR == nr && NF >= nf { X nb = (\$3 - $desire) * $dfunit / $1 X if (nb > 10000) X nb = 10000 # ensure representable as integer X nb = int(nb) X if (nb <= 0) X print 0 X else X print nb X exit X } X NR == nr && NF < nf { # idiotic Berkeley continuation X nr += 1 X nf -= 1 X }" END_OF_FILE if test 1729 -ne `wc -c <'spacefor.xenix'`; then echo shar: \"'spacefor.xenix'\" unpacked with wrong size! fi chmod +x 'spacefor.xenix' # end of 'spacefor.xenix' fi echo shar: End of shell archive. exit 0 -- You may redistribute this article only to those who may freely do likewise. Chip Salzenberg | or A T Engineering | Me? Speak for my company? Surely you jest!