Commit Diff


commit - 50e628cb8f4594b7cbccc17ff3f701ff260a69c0
commit + 1c253ceb586c4519f42ce115954c4efab787f81a
blob - dc9cc3d8892f83d8168167a5bbe4f3cf2ff1af15
blob + 9104a08c8dad87a99a0094185e825a191cc4aa24
--- bin/9c
+++ bin/9c
@@ -15,8 +15,7 @@ usegcc()
 	"
 }
 
-cc=none
-tag="`uname`-`uname -m`-${CC:-cc}"
+tag="`uname`-`uname -m`-${CC9:-cc}"
 case "$tag" in
 *BSD*)		usegcc ;;
 *Darwin*)	usegcc ;;
@@ -30,4 +29,4 @@ case "$tag" in
 	exit 1
 esac
 
-exec cc $cflags "$@"
+exec $cc $cflags "$@"
blob - 2db7be540115d14ad7590986ba16950a20d66a59
blob + adc6603855dc3134bf31fe46baf7e8fd4efe182c
--- bin/9l
+++ bin/9l
@@ -1,26 +1,18 @@
 #!/bin/sh
 
-ld=none
 extralibs=-lm
-tag="`uname`-`uname -m`-${CC:-cc}"
+tag="`uname`-`uname -m`"
 case "$tag" in
 *FreeBSD*)	ld=gcc ;;
 *BSD*)		ld=gcc ;;
 *Linux*)	ld=gcc ;;
 *Darwin*)	ld=gcc ;;
-*SunOS*-cc)	ld=cc; extralibs="$extralibs -lrt -lpthread" ;;
-*SunOS*-gcc)	ld=gcc ;;
+*SunOS*)	ld=${CC9:-cc}
+		extralibs="$extralibs -lrt -lpthread -lsocket -lnsl"
+		;;
 *)
 	echo do not know how to link on "$tag" 1>&2
 	exit 1
 esac
 
-case $ld in
-gcc)
-	exec gcc \
-		-ggdb \
-		-L$PLAN9/lib \
-		"$@" \
-		$extralibs
-	;;
-esac
+exec $ld -L$PLAN9/lib "$@" $extralibs
blob - f6f3e4cf6c89fab70d5a037d1f0789273a24bdc3
blob + e309de71833dac3eff47a42056f5ab32e321ea5b
--- include/lib9.h
+++ include/lib9.h
@@ -30,6 +30,15 @@ extern "C" {
 #define _NEEDUINT 1
 #define _NEEDULONG 1
 
+/* better to assume we have these and then be proved wrong */
+#define _HAVESTGEN 1
+#define _HAVETIMEGM 1
+#define _HAVETMZONE 1
+#define _HAVETMTZOFF 1
+#define _HAVETIMEZONEINT 1
+#define _HAVEFUTIMESAT 1
+#define _HAVEFUTIMES 1
+
 typedef long p9jmp_buf[sizeof(sigjmp_buf)/sizeof(long)];
 
 #if defined(__linux__)
@@ -45,6 +54,12 @@ typedef long p9jmp_buf[sizeof(sigjmp_buf)/sizeof(long)
 #	undef _NEEDUSHORT
 #	undef _NEEDUINT
 #	undef _NEEDULONG
+#	undef _HAVESTGEN
+#	undef _HAVETIMEGM
+#	undef _HAVETMZONE
+#	undef _HAVETMTZOFF
+#	undef _HAVEFUTIMES
+#	undef _HAVEUTIMES
 #endif
 #if defined(__FreeBSD__)
 #	include <sys/types.h>
@@ -52,6 +67,7 @@ typedef long p9jmp_buf[sizeof(sigjmp_buf)/sizeof(long)
 #		undef _NEEDUSHORT
 #		undef _NEEDUINT
 #	endif
+#	define _HAVEDISKLABEL 1
 #endif
 #if defined(__APPLE__)
 #	include <sys/types.h>
@@ -412,7 +428,7 @@ extern	double	atof(char*); <stdlib.h>
 extern	int	atoi(char*);
 extern	long	atol(char*);
  */
-extern	vlong	atoll(char*);
+extern	vlong	atoll(const char*);
 extern	double	charstod(int(*)(void*), void*);
 extern	char*	cleanname(char*);
 extern	int	p9decrypt(void*, void*, int);
@@ -723,7 +739,7 @@ extern	int	p9dup(int, int);
 extern	int	errstr(char*, uint);
 extern	int	p9exec(char*, char*[]);
 /* extern	int	execl(char*, ...); <unistd.h> */
-extern	int	fork(void);
+/* extern	int	fork(void); <unistd.h> */
 extern	int	p9rfork(int);
 /* not implemented 
 extern	int	fauth(int, char*);
@@ -788,8 +804,8 @@ extern	int	dirfwstat(int, Dir*);
 extern	long	dirread(int, Dir**);
 extern	void	nulldir(Dir*);
 extern	long	dirreadall(int, Dir**);
-extern	int	getpid(void);
-extern	int	getppid(void);
+/* extern	int	getpid(void); <unistd.h> */
+/* extern	int	getppid(void); */
 extern	void	rerrstr(char*, uint);
 extern	char*	sysname(void);
 extern	void	werrstr(char*, ...);
blob - b75e3c3596d5666f0be6b7348d5cf707457807b2
blob + 1c8010d4551db9862d509c1122c3d3a21de123d5
--- src/Makefile
+++ src/Makefile
@@ -1,5 +1,6 @@
 ../bin/mk: mkmk.sh
-	PATH=`pwd`/../bin:$PATH export PATH
+	PATH=`pwd`/../bin:$$PATH export PATH; \
+	PLAN9=`pwd`/.. export PLAN9; \
 	sh -x mkmk.sh
 
 all clean install nuke: ../bin/mk
blob - 72a2320a7c8a87e5a74813db844d23a0e0b7583b
blob + b34a61b360021e87dec64473ec70c44f0223be20
--- src/cmd/mkfile
+++ src/cmd/mkfile
@@ -6,7 +6,7 @@ LDFLAGS=$LDFLAGS -lsec -lregexp9 -l9 -lbio -lfmt -lutf
 
 <$PLAN9/src/mkmany
 
-BUGGERED='CVS|oplumb|plumb|plumb2|mk|vac'
+BUGGERED='CVS|oplumb|plumb|plumb2|mk|vac|9term'
 DIRS=`ls -l |sed -n 's/^d.* //p' |egrep -v "$BUGGERED"`
 
 <$PLAN9/src/mkdirs
blob - c7de3531385d2618b2a080252c850c3f21633e4e
blob + 38a01036487be5111198187ef12099605962a136
--- src/cmd/rc/syn.y
+++ src/cmd/rc/syn.y
@@ -7,7 +7,7 @@
 %left BANG SUBSHELL
 %left PIPE
 %left '^'
-%right '$' COUNT '"'
+%right '$' COUNT '\"'
 %left SUB
 %{
 #include "rc.h"
blob - 48f2c60fcb284694f42d547aac09a775f5d3c26f
blob + e899ef3fb523acc626b8cf29f88fc71aee5172a2
--- src/cmd/venti/mkfile
+++ src/cmd/venti/mkfile
@@ -71,16 +71,12 @@ it:V: all
 
 <$PLAN9/src/mkmany
 
+$SLIB: $LIBOFILES
+	ar rvc $SLIB $LIBOFILES
+
 # xml.c:D:	mkxml dat.h
 # 	./mkxml dat.h > xml.c
 
-$SLIB(%.$O):N: %.$O
-$SLIB:	${LIBOFILES:%=$SLIB(%)}
-	names=`echo $newprereq | sed -E 's/'$SLIB'\(([^)]+)\)/\1/g'`
-	# names = `{echo $newprereq |sed 's/ /\n/g' |sed -n 's/'$SLIB'\(([^)]+)\)/\1/gp'}
-	ar rvc $SLIB $names
-#	rm $names
-
 ainstall:V: ${TARG:%=%.ainstall}
 
 %.ainstall:V:	$O.%
blob - 93c98425720b350a3d6734c6f1bbffb3f15c2e82
blob + 44594dc00e86c4274e25e9915e96ce33a15e91bc
--- src/lib9/_p9dialparse.c
+++ src/lib9/_p9dialparse.c
@@ -1,9 +1,9 @@
-#include <u.h>
-#include <libc.h>
-
 #include <netdb.h>
 #include <sys/un.h>
 
+#include <u.h>
+#include <libc.h>
+
 static char *nets[] = { "tcp", "udp", nil };
 #define CLASS(p) ((*(uchar*)(p))>>6)
 
@@ -59,7 +59,7 @@ _p9dialparse(char *addr, char **pnet, char **punix, u3
 	int i;
 	struct servent *se;
 	struct hostent *he;
-	struct sockaddr_un *sun;
+	struct sockaddr_un *sockun;
 
 	if(strncmp(addr, "/net/", 5) == 0)
 		addr += 5;
@@ -73,7 +73,7 @@ _p9dialparse(char *addr, char **pnet, char **punix, u3
 	if((port = strchr(host, '!')) == nil){
 		if(strcmp(net, "unix")==0 || strcmp(net, "net")==0){
 		Unix:
-			if(strlen(host)+1 > sizeof sun->sun_path){
+			if(strlen(host)+1 > sizeof sockun->sun_path){
 				werrstr("unix socket name too long");
 				return -1;
 			}
blob - 459bd1572bb203767b5d2f303c664a145b2c192d
blob + 0903c57d13efdd5122ef8848fa1460d2b2008e2d
--- src/lib9/_p9dir.c
+++ src/lib9/_p9dir.c
@@ -1,13 +1,15 @@
-#include <u.h>
-#define NOPLAN9DEFINES
-#include <libc.h>
-
 #include <sys/stat.h>
+#ifdef _HAVEDISKLABEL
 #include <sys/disklabel.h>
+#endif
 #include <dirent.h>
 #include <pwd.h>
 #include <grp.h>
 
+#include <u.h>
+#define NOPLAN9DEFINES
+#include <libc.h>
+
 int
 _p9dir(struct stat *st, char *name, Dir *d, char **str, char *estr)
 {
@@ -83,7 +85,9 @@ _p9dir(struct stat *st, char *name, Dir *d, char **str
 
 		d->muid = "";
 		d->qid.path = ((uvlong)st->st_dev<<32) | st->st_ino;
+#ifdef _HAVESTGEN
 		d->qid.vers = st->st_gen;
+#endif
 		d->mode = st->st_mode&0777;
 		d->atime = st->st_atime;
 		d->mtime = st->st_mtime;
@@ -96,6 +100,7 @@ _p9dir(struct stat *st, char *name, Dir *d, char **str
 		}
 
 		/* fetch real size for disks */
+#ifdef _HAVEDISKLABEL
 		if(S_ISCHR(st->st_mode)){
 			int fd, n;
 			struct disklabel lab;
@@ -114,6 +119,7 @@ _p9dir(struct stat *st, char *name, Dir *d, char **str
 			if(fd >= 0)
 				close(fd);
 		}
+#endif
 	}
 
 	return sz;
blob - dc8cbbbf4daecd274e51ef2110873c07048d4d0e
blob + 04c712d9b27b96457928dfe0f9836cd075ffec51
--- src/lib9/announce.c
+++ src/lib9/announce.c
@@ -6,6 +6,8 @@
 #include <netinet/in.h>
 #include <sys/un.h>
 
+#undef sun
+#define sun sockun
 extern int _p9dialparse(char*, char**, char**, u32int*, int*);
 
 static int
@@ -88,7 +90,6 @@ print("announce dir: %s\n", dir);
 Unix:
 	memset(&sun, 0, sizeof sun);
 	sun.sun_family = AF_UNIX;
-	sun.sun_len = sizeof sun;
 	strcpy(sun.sun_path, unix);
 	if((s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)
 		return -1;
blob - 67e99b829c651d94980543cfdda326be750641ed
blob + ba94c28aefca2321c4e8d5785ed8f37d5a9efae3
--- src/lib9/await.c
+++ src/lib9/await.c
@@ -38,7 +38,9 @@ static struct {
 	SIGVTALRM,	"sys: virtual time alarm",
 	SIGPROF,		"sys: profiling timer alarm",
 	SIGWINCH,	"sys: window size change",
+#ifdef SIGINFO
 	SIGINFO,		"sys: status request",
+#endif
 	SIGUSR1,		"sys: usr1",
 	SIGUSR2,		"sys: usr2",
 };
blob - 2e84fd0a08b552a54db4a093f875c821b189a320
blob + 72860aa711496a205148fc01c8f5ac62720c8eae
--- src/lib9/date.c
+++ src/lib9/date.c
@@ -25,8 +25,12 @@ tm2Tm(struct tm *tm, Tm *bigtm)
 	bigtm->mon = tm->tm_mon;
 	bigtm->year = tm->tm_year;
 	bigtm->wday = tm->tm_wday;
+#ifdef _HAVETMZONE
 	strecpy(bigtm->zone, bigtm->zone+4, tm->tm_zone);
+#endif
+#ifdef _HAVETZOFF
 	bigtm->tzoff = tm->tm_gmtoff;
+#endif
 }
 
 static void
@@ -40,8 +44,12 @@ Tm2tm(Tm *bigtm, struct tm *tm)
 	tm->tm_mon = bigtm->mon;
 	tm->tm_year = bigtm->year;
 	tm->tm_wday = bigtm->wday;
+#ifdef _HAVETMZONE
 	tm->tm_zone = bigtm->zone;
+#endif
+#ifdef _HAVETZOFF
 	tm->tm_gmtoff = bigtm->tzoff;
+#endif
 }
 
 Tm*
@@ -64,6 +72,14 @@ p9localtime(long t)
 	return &bigtm;
 }
 
+#if !defined(_HAVETIMEGM) && defined(_HAVETIMEZONEINT)
+static long
+timegm(struct tm *tm)
+{
+	return mktime(tm)-timezone;
+}
+#endif
+
 long
 p9tm2sec(Tm *bigtm)
 {
blob - 1d961b4c4f53d896f4f776835fef5ef212c16b31
blob + fa19cce81eb209f0cb1aca1cf0737a43b67d0417
--- src/lib9/dial.c
+++ src/lib9/dial.c
@@ -72,7 +72,6 @@ p9dial(char *addr, char *dummy1, char *dummy2, int *du
 
 Unix:
 	memset(&su, 0, sizeof su);
-	su.sun_len = sizeof su;
 	su.sun_family = AF_UNIX;
 	if(strlen(unix)+1 > sizeof su.sun_path){
 		werrstr("unix socket name too long");
blob - 7f6c54aa36629a678b69974817e5f788e0c732bb
blob + 7ca512514db08470444991b53b452edf63fa2df3
--- src/lib9/dirfwstat.c
+++ src/lib9/dirfwstat.c
@@ -4,6 +4,14 @@
 
 #include <sys/time.h>
 
+#if !defined(_HAVEFUTIMES) && defined(_HAVEFUTIMESAT)
+static int
+futimes(int fd, struct timeval *tv)
+{
+	return futimesat(fd, 0, tv);
+}
+#endif
+
 int
 dirfwstat(int fd, Dir *dir)
 {
@@ -19,3 +27,4 @@ dirfwstat(int fd, Dir *dir)
 	tv[1].tv_usec = 0;
 	return futimes(fd, tv);
 }
+
blob - f4610f6888f1c0312185de0c9ef83acf901a86fa
blob + 5151b132cb35bf70acf5497c8c08f71d835418ec
--- src/lib9/dirread.c
+++ src/lib9/dirread.c
@@ -24,10 +24,10 @@ countde(char *p, int n)
 		de = (struct dirent*)p;
 		if(de->d_reclen <= 4+2+2+1 || p+de->d_reclen > e)
 			break;
-		if(de->d_namlen == 1 && de->d_name[0]=='.')
-			de->d_namlen = 0;
-		else if(de->d_namlen == 2 && de->d_name[0]=='.' && de->d_name[1]=='.')
-			de->d_namlen = 0;
+		if(de->d_name[0]=='.' && de->d_name[1]==0)
+			de->d_name[0] = 0;
+		else if(de->d_name[0]=='.' && de->d_name[1]=='.' && de->d_name[2]==0)
+			de->d_name[0] = 0;
 		else
 			m++;
 		p += de->d_reclen;
@@ -59,7 +59,7 @@ dirpackage(int fd, char *buf, int n, Dir **dp)
 	for(i=0; i<n; i++){
 		de = (struct dirent*)p;
 		if(stat(de->d_name, &st) < 0)
-			de->d_namlen = 0;
+			de->d_name[0] = 0;
 		else
 			nstr += _p9dir(&st, de->d_name, nil, nil, nil);
 		p += de->d_reclen;
@@ -78,7 +78,7 @@ dirpackage(int fd, char *buf, int n, Dir **dp)
 	m = 0;
 	for(i=0; i<n; i++){
 		de = (struct dirent*)p;
-		if(de->d_namlen != 0 && stat(de->d_name, &st) >= 0)
+		if(de->d_name[0] != 0 && stat(de->d_name, &st) >= 0)
 			_p9dir(&st, de->d_name, &d[m++], &str, estr);
 		p += de->d_reclen;
 	}
@@ -108,7 +108,7 @@ dirread(int fd, Dir **dp)
 	if(buf == nil)
 		return -1;
 
-	n = getdents(fd, buf, st.st_blksize);
+	n = getdents(fd, (struct dirent*)buf, st.st_blksize);
 	if(n < 0){
 		free(buf);
 		return -1;
@@ -141,7 +141,7 @@ dirreadall(int fd, Dir **d)
 			return -1;
 		}
 		buf = nbuf;
-		n = getdents(fd, buf+ts, st.st_blksize);
+		n = getdents(fd, (struct dirent*)(buf+ts), st.st_blksize);
 		if(n <= 0)
 			break;
 		ts += n;
blob - 9f5971abcc793f5b7afff24f902eb1cd7b18faf7
blob + deb692490913d172c7408da2cf45d1121ae36d52
--- src/lib9/mkfile
+++ src/lib9/mkfile
@@ -38,7 +38,7 @@ OFILES=\
 	getuser.$O\
 	getwd.$O\
 	jmp.$O\
-	jmp-FreeBSD.$O\
+	jmp-$SYSNAME.$O\
 	lock.$O\
 	main.$O\
 	malloctag.$O\
blob - e248cd78ef328e4b849c599f99e1bd3dbddc67a1
blob + 41d3f9d6fea27e46d7f2e494840b41785d908bc4
--- src/lib9/rfork.c
+++ src/lib9/rfork.c
@@ -9,7 +9,7 @@ p9rfork(int flags)
 		return -1;
 	}
 	if(flags&RFNOTEG){
-		setpgrp(0, 0);
+		setpgid(0, getpid());
 		flags &= ~RFNOTEG;
 	}
 	if(flags){
blob - 6740a0027bf239310860a6c81ed448872cd9fff8
blob + a896be23daa59d88da4c567f51b3e4f7c2182ba1
--- src/mkfile
+++ src/mkfile
@@ -42,7 +42,7 @@ testmkmk:V:
 	ls -l ../bin/mk
 
 testcvs:V:
-	cvs up -dAP
+	(cd ..; cvs up -dAP)
 	cp ../bin/_mk ../bin/mk
 	mk clean
 	rm ../lib/*.a
blob - 2cc8d973ef964041245cefa60f5017db1c49d72b
blob + d1b65729598827f1c3964d65f899e3aacc5d0c94
--- src/mkhdr
+++ src/mkhdr
@@ -2,14 +2,18 @@ SYSNAME=`uname`
 OBJTYPE=`uname -m | sed 's;i.86;386;; s;/.*;;; s; ;;g'`
 
 X11=/usr/X11R6
-LDFLAGS=
+CC=9c
+LD=9l
+AS=9a
 CFLAGS=
+LDFLAGS=
 AFLAGS=
+O=o
 
 BIN=$PLAN9/bin
 LIBDIR=$PLAN9/lib
 
-<|sed -E '"s/(.*)\+=/\1=$\1 /g"' $PLAN9/src/Make.$SYSNAME-$OBJTYPE
+<$PLAN9/src/mk.$SYSNAME-$OBJTYPE
 
 OS=$O
 LD=9l