commit 1c253ceb586c4519f42ce115954c4efab787f81a from: rsc date: Sun Nov 23 19:49:17 2003 UTC Annoying changes to work on Sun boxes. 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 @@ -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 @@ -412,7 +428,7 @@ extern double atof(char*); 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*, ...); */ -extern int fork(void); +/* extern int fork(void); */ 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); */ +/* 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 -#include - #include #include +#include +#include + 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 -#define NOPLAN9DEFINES -#include - #include +#ifdef _HAVEDISKLABEL #include +#endif #include #include #include +#include +#define NOPLAN9DEFINES +#include + 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 #include +#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 +#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; id_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; id_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