freebsd-ports/shells/ast-ksh/files/patch-src_lib_libast_vmalloc_vmdcsystem.c
Cy Schubert c6b0b5112f Resurrect the previous shells/ksh93 as shells/ast-ksh, a ksh93 port
that the maintainer wishes to use to create a shared library for use
with other applications such as CDE. It is based on ksh93v (2014-12-24)
and is incompatible with the direction that att/ast is taking the
official ksh93 implementation.

PR:		237332
Requested by:	maintainer (saper@saper.info)
2019-06-01 18:32:40 +00:00

126 lines
3.6 KiB
C

--- src/lib/libast/vmalloc/vmdcsystem.c.orig 2016-02-28 17:09:23 UTC
+++ src/lib/libast/vmalloc/vmdcsystem.c
@@ -66,18 +66,16 @@ static Vmemory_f _Vmemoryf = 0;
#if _std_malloc
#undef _mem_mmap_anon
-#undef _mem_mmap_zero
#undef _mem_sbrk
#undef _mem_win32
#endif
#if _mem_win32
#undef _mem_mmap_anon
-#undef _mem_mmap_zero
#undef _mem_sbrk
#endif
-#if _mem_mmap_anon || _mem_mmap_zero /* may get space using mmap */
+#if _mem_mmap_anon /* may get space using mmap */
#include <sys/mman.h>
#ifndef MAP_ANON
#ifdef MAP_ANONYMOUS
@@ -86,7 +84,7 @@ static Vmemory_f _Vmemoryf = 0;
#define MAP_ANON 0
#endif /*MAP_ANONYMOUS*/
#endif /*MAP_ANON*/
-#endif /*_mem_mmap_anon || _mem_mmap_zero*/
+#endif /*_mem_mmap_anon*/
/*
* hint at "transparent huge pages" (=largepages) if
@@ -259,73 +257,6 @@ static Void_t* mmapanonmem(Vmalloc_t* vm
}
#endif /* _mem_mmap_anon */
-#if _mem_mmap_zero /* get space by mmapping from /dev/zero */
-#include <fcntl.h>
-#ifndef OPEN_MAX
-#define OPEN_MAX 64
-#endif
-#define FD_PRIVATE (3*OPEN_MAX/4) /* private file descriptor */
-#define FD_NONE (-2) /* no mapping with file desc */
-
-/* this is called after an initial successful call of mmapzeromeminit() */
-static Void_t* mmapzeromem(Vmalloc_t* vm, Void_t* caddr, size_t csize, size_t nsize, Vmdisc_t* disc)
-{
- Memdisc_t* mmdc = (Memdisc_t*)disc;
- off_t offset;
-
- GETMEMCHK(vm, caddr, csize, nsize, disc);
- if(csize == 0)
- { nsize = ROUND(nsize, _Vmpagesize);
- offset = asoaddoff(&mmdc->offset, nsize);
- RESTARTMEM(caddr, mmap(NIL(Void_t*), nsize, PROT_READ|PROT_WRITE, MAP_PRIVATE, mmdc->fd, offset));
- ADVISE(vm, caddr, nsize);
- RETURN(vm, caddr, nsize);
- }
- else if(nsize == 0)
- { Vmuchar_t *addr = (Vmuchar_t*)sbrk(0);
- if(addr < (Vmuchar_t*)caddr ) /* in sbrk space */
- return NIL(Void_t*);
- (void)munmap(caddr, csize);
- RETURN(vm, caddr, nsize);
- }
- else return NIL(Void_t*);
-}
-
-/* if this call succeeds then mmapzeromem() is the implementation */
-static Void_t* mmapzeromeminit(Vmalloc_t* vm, Void_t* caddr, size_t csize, size_t nsize, Vmdisc_t* disc)
-{
- Memdisc_t* mmdc = (Memdisc_t*)disc;
- int fd;
-
- GETMEMCHK(vm, caddr, csize, nsize, disc);
- if(mmdc->fd != FD_INIT)
- return NIL(Void_t*);
- RESTARTSYS(fd, open("/dev/zero", O_RDONLY|O_CLOEXEC));
- if(fd < 0)
- { mmdc->fd = FD_NONE;
- return NIL(Void_t*);
- }
-#if O_CLOEXEC == 0
- else
- SETCLOEXEC(fd);
-#endif
- if(fd >= FD_PRIVATE || (mmdc->fd = fcntl(fd, F_DUPFD_CLOEXEC, FD_PRIVATE)) < 0)
- mmdc->fd = fd;
- else
- { close(fd);
-#if F_DUPFD_CLOEXEC == F_DUPFD
- SETCLOEXEC(mmdc->fd);
-#endif
- }
- RESTARTMEM(caddr, mmapzeromem(vm, caddr, csize, nsize, disc));
- if(!caddr)
- { close(mmdc->fd);
- mmdc->fd = FD_NONE;
- }
- RETURN(vm, caddr, nsize);
-}
-#endif /* _mem_mmap_zero */
-
#if _std_malloc /* using native malloc as a last resort */
static Void_t* mallocmem(Vmalloc_t* vm, Void_t* caddr, size_t csize, size_t nsize, Vmdisc_t* disc)
{
@@ -364,12 +295,6 @@ static Void_t* getmemory(Vmalloc_t* vm,
return (Void_t*)addr;
}
#endif
-#if _mem_mmap_zero
- if((_Vmassert & VM_zero) && (addr = mmapzeromeminit(vm, caddr, csize, nsize, disc)))
- { GETMEMUSE(mmapzeromem, disc);
- return (Void_t*)addr;
- }
-#endif
#if _mem_sbrk
if((_Vmassert & VM_break) && (addr = sbrkmem(vm, caddr, csize, nsize, disc)))
{ GETMEMUSE(sbrkmem, disc);
@@ -386,6 +311,7 @@ static Void_t* getmemory(Vmalloc_t* vm,
if((_Vmassert & VM_native) && (addr = mallocmem(vm, caddr, csize, nsize, disc)))
{ GETMEMUSE(mallocmem, disc);
return (Void_t*)addr;
+ }
#endif
write(2, "vmalloc: panic: all memory allocation disciplines failed\n", 57);
abort();