diff options
author | nrootconauto <nrootconauto@gmail.com> | 2022-10-21 11:47:18 -0400 |
---|---|---|
committer | nrootconauto <nrootconauto@gmail.com> | 2022-10-21 11:47:18 -0400 |
commit | 9bfb79aa7734ada1a73e6738c60dfddc7006acba (patch) | |
tree | 23177ec166c1dbb3786a951390eeb13b2f8428cb | |
parent | 062a9d8629795418b8ccbb900b19c815b4a32bb3 (diff) |
Exit3Days() fixed. poopalloc.c will return NULL on bad alloc.
DskStrA will return a dummy string if unable to construct a filename.
Server will also find file if it has a ".Z" extension.
Signed-off-by: nrootconauto <nrootconauto@gmail.com>
-rw-r--r-- | 3d.h | 1 | ||||
-rw-r--r-- | HCRT.BIN | bin | 1109344 -> 1109376 bytes | |||
-rw-r--r-- | T/BlkDev2/DskStrA.HC | 2 | ||||
-rw-r--r-- | T/HCRT.DBG.Z | bin | 270431 -> 270366 bytes | |||
-rw-r--r-- | T/Mem/MemPag.HC | 5 | ||||
-rw-r--r-- | T/Server/gen_html.HC | 6 | ||||
-rw-r--r-- | T/Server/utils.HC | 3 | ||||
-rw-r--r-- | WIN_window.c | 2 | ||||
-rw-r--r-- | main.c | 5 | ||||
-rw-r--r-- | multic.c | 16 | ||||
-rw-r--r-- | poopalloc.c | 3 |
11 files changed, 30 insertions, 13 deletions
@@ -193,3 +193,4 @@ char **VFsDir(char *fn); FILE *VFsFOpen(char *path,char*); void VFsSetDrv(char d); void *_3DaysSetResolution(int64_t w,int64_t h); +extern int64_t _shutdown; Binary files differdiff --git a/T/BlkDev2/DskStrA.HC b/T/BlkDev2/DskStrA.HC index 1be49bc..57a7933 100644 --- a/T/BlkDev2/DskStrA.HC +++ b/T/BlkDev2/DskStrA.HC @@ -339,5 +339,7 @@ returns default. } Free(st); Free(ext); + if(!dft) dft=DirNameAbs(dirname); return dft; } +
\ No newline at end of file diff --git a/T/HCRT.DBG.Z b/T/HCRT.DBG.Z Binary files differindex 47a2fcc..8cb0016 100644 --- a/T/HCRT.DBG.Z +++ b/T/HCRT.DBG.Z diff --git a/T/Mem/MemPag.HC b/T/Mem/MemPag.HC index 49f7526..f99e592 100644 --- a/T/Mem/MemPag.HC +++ b/T/Mem/MemPag.HC @@ -82,7 +82,7 @@ U0 MemBlkCacheRemove(CBlkCache *cache,CMemBlk *blk) { Bool IsValidPtr(U8 *ptr,I64 sz=1) { "Use '-b' on 3d_loader to enable bounds-checker.\n"; throw('UseBC'); -}; +}; #endif U8 *MemPagAlloc(I64 pags,CBlkPool *bp=NULL) {/*Alloc pags from BlkPool. Don't link to task. @@ -97,7 +97,8 @@ Return: NULL if out of memory. PUSHFD old=!Bts(&(Fs->task_flags),TASKf_BREAK_LOCKED); res=NewVirtualChunk(pags<<MEM_PAG_BITS,!bp); - ins: + if(!res) return NULL; + ins: QueInit(res); QueInit(&res->next2); res->pags=pags; diff --git a/T/Server/gen_html.HC b/T/Server/gen_html.HC index 8eb119d..e503bec 100644 --- a/T/Server/gen_html.HC +++ b/T/Server/gen_html.HC @@ -6,7 +6,7 @@ U0 FileGet(CServer *srv,CDyadStream*stream,CURL *url,CHTTPRequest *req) { U8 *link=ChrootFile(url->abs_path); U8 *f,*mime,*dot=FileExtDot(link); I64 len; - if(dot&&FileFind(link)){ + if(dot&&FileFind(link,,FUF_Z_OR_NOT_Z)){ if(!StrICmp(dot,".GIF")||!StrICmp(dot,".GIF.Z")) mime="image/gif"; else if(!StrICmp(dot,".JPEG")||!StrICmp(dot,".JPEG.Z")) mime="image/jpeg"; else if(!StrICmp(dot,".JPG")||!StrICmp(dot,".JPG.Z")) mime="image/jpg"; @@ -375,7 +375,7 @@ U0 WikiGet(CServer *srv,CDyadStream *stream,CURL *url,CHTTPRequest *req) { QueInit(markup); QueInit(headers); cheader=headers; - last=markup; + last=markup; if(!StrLen(url->abs_path)||!StrCmp(url->abs_path,"/")) { path=StrNew(WIKI_ROOT"/WikiHome"); //Copy into URL to "redirect" @@ -387,7 +387,7 @@ U0 WikiGet(CServer *srv,CDyadStream *stream,CURL *url,CHTTPRequest *req) { Free(path); path=t1; } - if(FileFind(path)&&!IsDir(path)) { + if(FileFind(path,,FUF_Z_OR_NOT_Z)&&!IsDir(path)) { //dummy write an index to compute its length WriteLn(stream,,"HTTP/1.1 200 OK"); WriteLn(stream,,"Server: Bungis"); diff --git a/T/Server/utils.HC b/T/Server/utils.HC index 0417bda..77ebd95 100644 --- a/T/Server/utils.HC +++ b/T/Server/utils.HC @@ -95,7 +95,8 @@ U8 *HTMLify(U8 *str) { return r; } U8 *ChrootFile(U8 *fn,U8 *prefix=WIKI_ROOT) { - U8 *virt=MStrPrint("/%s/%s",prefix,fn); + if(*fn=='/') fn++; + U8 *virt=MStrPrint("%s/%s",prefix,fn); U8 *abs=FileNameAbs(virt),*abs2=FileNameAbs(prefix); if(!StrNCmp(abs,abs2,StrLen(abs2))) { Free(abs),Free(abs2); diff --git a/WIN_window.c b/WIN_window.c index 7e01e40..e289cca 100644 --- a/WIN_window.c +++ b/WIN_window.c @@ -464,6 +464,7 @@ LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { PAINTSTRUCT ps; int64_t cx,cy; RECT *lr; + if(_shutdown) goto kill; switch(msg) { case WM_SIZE: case WM_SIZING: @@ -501,6 +502,7 @@ LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam) { ReleaseMutex(mutex); break; case WM_DESTROY: +kill: PostQuitMessage(0); return 0; } @@ -73,7 +73,7 @@ static pthread_t core0; static HANDLE core0; #endif static int is_cmd_line=0; -static int64_t _shutdown=0; +int64_t _shutdown=0; int64_t IsCmdLine() { return is_cmd_line; } @@ -230,6 +230,7 @@ int main(int argc,char **argv) CLoader Loader; void __Shutdown() { _shutdown=1; - __ShutdownCore(0); + __ShutdownCores(); + exit(0); } char *cipher_passwd; @@ -136,12 +136,20 @@ void __ShutdownCore(int core) { pthread_kill(cores[core].thread,SIGUSR1); pthread_join(cores[core].thread,NULL); #else - TerminateThread(cores[core].thread,0); - WaitForMultipleObjects(1,&cores[core].thread,TRUE,INFINITE); + CONTEXT ctx; + SuspendThread(cores[core].thread); + GetThreadContext(cores[core].thread,&ctx); + ctx.Rip=&ExitCore; + SetThreadContext(cores[core].thread,&ctx); + ResumeThread(cores[core].thread); + WaitForSingleObject(cores[core].thread,INFINITE); #endif } void __ShutdownCores() { int c; - for(c=0;c!=mp_cnt(NULL);c++) - __ShutdownCore(c); + for(c=0;c<mp_cnt(NULL);c++) { + if(c!=__core_num) + __ShutdownCore(c); + } + __ShutdownCore(__core_num); } diff --git a/poopalloc.c b/poopalloc.c index 1df671a..478a406 100644 --- a/poopalloc.c +++ b/poopalloc.c @@ -72,10 +72,11 @@ void *NewVirtualChunk(int64_t sz,int64_t low32) { } found: fclose(map); - return ret=mmap(down,sz/ps*ps+pad,PROT_EXEC|PROT_WRITE|PROT_READ,MAP_PRIVATE|MAP_ANON|MAP_FIXED|MAP_32BIT,-1,0); + ret=mmap(down,sz/ps*ps+pad,PROT_EXEC|PROT_WRITE|PROT_READ,MAP_PRIVATE|MAP_ANON|MAP_FIXED|MAP_32BIT,-1,0); } } else ret=mmap(NULL,sz/ps*ps+pad,PROT_EXEC|PROT_WRITE|PROT_READ,MAP_PRIVATE|MAP_ANON,-1,0); + if(ret==MAP_FAILED) return NULL; return ret; #else if(low32) { |