From ee5fc884bd37db9cba56d603b8d4e30b0cc78083 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Tue, 8 Nov 2005 01:35:49 +0000 Subject: [PATCH] fixes --- Make.unix | 2 +- Make.win32 | 6 +- cpu.c | 3 +- gui-win32/Makefile | 3 +- include/dtos.h | 1 + include/lib.h | 12 --- kern/devcons.c | 25 ------ kern/devip-win32.c | 27 ++++--- kern/devip.c | 1 + kern/devroot.c | 2 + kern/devssl.c | 2 +- kern/win32.c | 187 ++++++++++++++++++++++++++++++++++++++++++--- libc/Makefile | 4 - libc/nan64.c | 10 +-- libmemdraw/draw.c | 2 +- main.c | 3 + 16 files changed, 210 insertions(+), 80 deletions(-) diff --git a/Make.unix b/Make.unix index 858c702..9993b2b 100644 --- a/Make.unix +++ b/Make.unix @@ -5,7 +5,7 @@ AR=ar AS=as RANLIB=ranlib CC=gcc -CFLAGS=-Wall -Wno-missing-braces -ggdb -I$(ROOT) -I$(ROOT)/include -I$(ROOT)/kern -c -D_THREAD_SAFE $(PTHREAD) +CFLAGS=-Wall -Wno-missing-braces -ggdb -I$(ROOT) -I$(ROOT)/include -I$(ROOT)/kern -c -D_THREAD_SAFE $(PTHREAD) -O2 O=o OS=posix GUI=x11 diff --git a/Make.win32 b/Make.win32 index c6bf99d..80cbfff 100644 --- a/Make.win32 +++ b/Make.win32 @@ -3,20 +3,20 @@ # on another platform. Otherwise the binaries are just # named gcc, etc. -MING=mingw32- +MING=i586-mingw32msvc- #MING= AR=$(MING)ar CC=$(MING)gcc AS=$(MING)as RANLIB=$(MING)ranlib -CFLAGS=-Wall -Wno-missing-braces -I$(ROOT)/include -I$(ROOT) -I$(ROOT)/kern -c -D_X86_ -DIS_32 -DWINDOWS +CFLAGS=-Wall -Wno-missing-braces -I$(ROOT)/include -I$(ROOT) -I$(ROOT)/kern -c -D_X86_ -DIS_32 -DWINDOWS -O2 O=o FS=fs-win32 IP=win32 OS=win32 GUI=win32 LDFLAGS=-mwindows -LDADD=-lkernel32 -ladvapi32 -lgdi32 -lmpr -lwsock32 +LDADD=-lkernel32 -ladvapi32 -lgdi32 -lmpr -lwsock32 -lmsvcrt -lmingw32 TARG=drawterm.exe # Windows via MSVC diff --git a/cpu.c b/cpu.c index 1c44952..79734d6 100644 --- a/cpu.c +++ b/cpu.c @@ -380,9 +380,8 @@ p9auth(int fd) return fd; /* exchange random numbers */ - srand(truerand()); for(i = 0; i < 4; i++) - key[i] = rand(); + key[i] = fastrand(); if(write(fd, key, 4) != 4) return -1; if(readn(fd, key+12, 4) != 4) diff --git a/gui-win32/Makefile b/gui-win32/Makefile index 3402872..1054760 100644 --- a/gui-win32/Makefile +++ b/gui-win32/Makefile @@ -7,8 +7,7 @@ OFILES=\ cload.$O\ draw.$O\ load.$O\ - screen.$O\ - wstrtoutf.$O + screen.$O default: $(LIB) $(LIB): $(OFILES) diff --git a/include/dtos.h b/include/dtos.h index 623ab8a..0e6135e 100644 --- a/include/dtos.h +++ b/include/dtos.h @@ -5,6 +5,7 @@ # endif #elif defined(WINDOWS) # include "9windows.h" +# define main mymain #else # error "Define an OS" #endif diff --git a/include/lib.h b/include/lib.h index f6eacc7..35381df 100644 --- a/include/lib.h +++ b/include/lib.h @@ -15,11 +15,6 @@ #define log2 liblog2 #define log liblog #define reboot libreboot -#define srand dtsrand -#define rand dtrand -#define nrand dtnrand -#define lrand dtlrand -#define lnrand dtlnrand #undef timeradd #define timeradd xtimeradd @@ -240,13 +235,6 @@ extern int fmtprint(Fmt*, char*, ...); extern int fmtvprint(Fmt*, char*, va_list); extern void* mallocz(ulong, int); -extern void srand(long); -extern int rand(void); -extern int nrand(int); -extern long lrand(void); -extern long lnrand(long); -extern double frand(void); - extern ulong getcallerpc(void*); extern char* cleanname(char*); extern void sysfatal(char*, ...); diff --git a/kern/devcons.c b/kern/devcons.c index f654e82..7176ebb 100644 --- a/kern/devcons.c +++ b/kern/devcons.c @@ -60,7 +60,6 @@ static struct char *sysname; vlong fasthz; -static void seedrand(void); static int readtime(ulong, char*, int); static int readbintime(char*, int); static int writetime(char*, int); @@ -986,30 +985,6 @@ Dev consdevtab = { devwstat, }; -static ulong randn; - -static void -seedrand(void) -{ - randomread((void*)&randn, sizeof(randn)); -} - -int -xnrand(int n) -{ - if(randn == 0) - seedrand(); - randn = randn*1103515245 + 12345 + fastticks(0); - return (randn>>16) % n; -} - -int -rand(void) -{ - xnrand(1); - return randn; -} - static uvlong uvorder = (uvlong) 0x0001020304050607ULL; static uchar* diff --git a/kern/devip-win32.c b/kern/devip-win32.c index acf22ca..72700fc 100644 --- a/kern/devip-win32.c +++ b/kern/devip-win32.c @@ -46,12 +46,13 @@ so_socket(int type) fd = socket(AF_INET, type, 0); if(fd < 0) - error(sys_errlist[errno]); + oserror(); one = 1; - if(setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char*)&one, sizeof(one)) > 0) - print("setsockopt: %s", sys_errlist[errno]); - + if(setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char*)&one, sizeof(one)) > 0){ + oserrstr(); + print("setsockopt: %s\n", up->errstr); + } return fd; } @@ -68,7 +69,7 @@ so_connect(int fd, unsigned long raddr, unsigned short rport) hnputl(&sin.sin_addr.s_addr, raddr); if(connect(fd, (struct sockaddr*)&sin, sizeof(sin)) < 0) - error(sys_errlist[errno]); + oserror(); } void @@ -79,7 +80,7 @@ so_getsockname(int fd, unsigned long *laddr, unsigned short *lport) len = sizeof(sin); if(getsockname(fd, (struct sockaddr*)&sin, &len) < 0) - error(sys_errlist[errno]); + oserror(); if(sin.sin_family != AF_INET || len != sizeof(sin)) error("not AF_INET"); @@ -92,7 +93,7 @@ void so_listen(int fd) { if(listen(fd, 5) < 0) - error(sys_errlist[errno]); + oserror(); } int @@ -104,7 +105,7 @@ so_accept(int fd, unsigned long *raddr, unsigned short *rport) len = sizeof(sin); nfd = accept(fd, (struct sockaddr*)&sin, &len); if(nfd < 0) - error(sys_errlist[errno]); + oserror(); if(sin.sin_family != AF_INET || len != sizeof(sin)) error("not AF_INET"); @@ -121,8 +122,10 @@ so_bind(int fd, int su, unsigned short port) struct sockaddr_in sin; one = 1; - if(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&one, sizeof(one)) < 0) - print("setsockopt: %s", sys_errlist[errno]); + if(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&one, sizeof(one)) < 0){ + oserrstr(); + print("setsockopt: %s", up->errstr); + } if(su) { for(i = 600; i < 1024; i++) { @@ -133,7 +136,7 @@ so_bind(int fd, int su, unsigned short port) if(bind(fd, (struct sockaddr*)&sin, sizeof(sin)) >= 0) return; } - error(sys_errlist[errno]); + oserror(); } memset(&sin, 0, sizeof(sin)); @@ -141,7 +144,7 @@ so_bind(int fd, int su, unsigned short port) hnputs(&sin.sin_port, port); if(bind(fd, (struct sockaddr*)&sin, sizeof(sin)) < 0) - error(sys_errlist[errno]); + oserror(); } int diff --git a/kern/devip.c b/kern/devip.c index d15d4de..8e60319 100644 --- a/kern/devip.c +++ b/kern/devip.c @@ -228,6 +228,7 @@ ipopen(Chan *c, int omode) Conv *cv, *lcv; omode &= 3; + perm = 0; switch(omode) { case OREAD: perm = 4; diff --git a/kern/devroot.c b/kern/devroot.c index 94b1ab7..951e113 100644 --- a/kern/devroot.c +++ b/kern/devroot.c @@ -181,6 +181,8 @@ rootgen(Chan *c, char *name, Dirtab *dirt, int ndirt, int s, Dir *dp) t = c->qid.path - Qmnt - 1; l = &mntlist; break; + default: + return -1; } if(t >= l->ndir) return -1; diff --git a/kern/devssl.c b/kern/devssl.c index 40e5375..a16dc61 100644 --- a/kern/devssl.c +++ b/kern/devssl.c @@ -717,7 +717,7 @@ static void randfill(uchar *buf, int len) { while(len-- > 0) - *buf++ = nrand(256); + *buf++ = fastrand(); } static long diff --git a/kern/win32.c b/kern/win32.c index 105123c..8c19ac8 100644 --- a/kern/win32.c +++ b/kern/win32.c @@ -3,6 +3,7 @@ #include "lib.h" #include "dat.h" #include "fns.h" +#include typedef struct Oproc Oproc; struct Oproc { @@ -136,24 +137,49 @@ procwakeup(Proc *p) ReleaseSemaphore(op->sema, 1, 0); } +void +random20(uchar *p) +{ + LARGE_INTEGER ti; + int i, j; + FILETIME ft; + DigestState ds; + vlong tsc; + + GetSystemTimeAsFileTime(&ft); + memset(&ds, 0, sizeof ds); + sha1((uchar*)&ft, sizeof(ft), 0, &ds); + for(i=0; i<50; i++) { + for(j=0; j<10; j++) { + QueryPerformanceCounter(&ti); + sha1((uchar*)&ti, sizeof(ti), 0, &ds); + tsc = GetTickCount(); + sha1((uchar*)&tsc, sizeof(tsc), 0, &ds); + } + Sleep(10); + } + sha1(0, 0, p, &ds); +} + void randominit(void) { - srand(seconds()); } ulong randomread(void *v, ulong n) { - int m, i, *r; - - m = (n / sizeof(int)) * sizeof(int); - for (i = 0, r = (int*)v; i < m; i += sizeof(int)) { - *r = rand(); - r += sizeof(int); + int i; + uchar p[20]; + + for(i=0; i N backslashes and end quote + * 2N+1 backslashes + " ==> N backslashes + literal " + * N backslashes not followed by " ==> N backslashes + */ +static int +args(char *argv[], int n, char *p) +{ + char *p2; + int i, j, quote, nbs; + + for(i=0; *p && i>1); j++) + *p2++ = '\\'; + if(nbs&1) + *p2++ = *p; + else + quote = !quote; + } else { + for(j=0; j>32)==0x7FF00000 && !__isInf(d, 0); } @@ -33,9 +33,9 @@ double __Inf(int sign) { if(sign < 0) - return *(double*)&uvinf; + return *(double*)(void*)&uvinf; else - return *(double*)&uvneginf; + return *(double*)(void*)&uvneginf; } int @@ -43,7 +43,7 @@ __isInf(double d, int sign) { uvlong x; - x = *(uvlong*)&d; + x = *(uvlong*)(void*)&d; if(sign == 0) return x==uvinf || x==uvneginf; else if(sign > 0) diff --git a/libmemdraw/draw.c b/libmemdraw/draw.c index cc8f8aa..c71b753 100644 --- a/libmemdraw/draw.c +++ b/libmemdraw/draw.c @@ -2368,7 +2368,7 @@ DBG print("bsh %d\n", bsh); bx = -bsh-1; ex = -bsh-1-dx; - SET(bits); + bits = 0; v = par->sdval; /* make little endian */ diff --git a/main.c b/main.c index 20e9419..5ab5257 100644 --- a/main.c +++ b/main.c @@ -32,6 +32,8 @@ int main(int argc, char **argv) { eve = getuser(); + if(eve == nil) + eve = "drawterm"; sizebug(); fmtinstall('r', errfmt); @@ -101,6 +103,7 @@ findkey(char **puser, char *dom) continue; pass = nil; haveproto = havedom = 0; + user = nil; for(i=1; i