Index: head/games/openbor/Makefile =================================================================== --- head/games/openbor/Makefile (revision 429222) +++ head/games/openbor/Makefile (revision 429223) @@ -1,107 +1,107 @@ # $FreeBSD$ PORTNAME= openbor -PORTVERSION= 3.0.r4419 +PORTVERSION= 3.0.r4420 CATEGORIES= games MASTER_SITES= LOCAL/jbeich \ https://svn.code.sf.net/p/${PORTNAME}/engine/engine/:svn MAINTAINER= jbeich@FreeBSD.org COMMENT= Moddable fighting game engine (aka Beats of Rage) LICENSE= BSD3CLAUSE LIB_DEPENDS= libpng.so:graphics/png \ libvpx.so:multimedia/libvpx USES= gmake pkgconfig tar:xz USE_SDL= gfx2 MAKE_ENV= BUILD_LINUX=1 SDKPATH="${LOCALBASE}" \ GCC_TARGET="${CONFIGURE_TARGET:S/amd64/x86_64/}" MAKE_ARGS= CC="${CC}" LIBRARIES="${LOCALBASE}/lib" \ TARGET_ARCH=${ARCH:S/i386/x86/} ARCHFLAGS="" \ TARGET_FINAL='${TARGET}' BUILD_MMX="" CFLAGS+= -fgnu89-inline LDFLAGS+= -Wl,--as-needed # ogg, pthread, zlib PLIST_FILES= bin/${PORTNAME} \ share/pixmaps/${PORTNAME}.png PORTDOCS= README DESKTOP_ENTRIES="OpenBOR" \ "" \ "${PORTNAME}" \ "${PORTNAME}" \ "Game;ArcadeGame;" \ "" OPTIONS_DEFINE= TREMOR OPTIONS_DEFAULT= ${MACHINE_CPU:tu:MSOFTFP:S/SOFTFP/TREMOR/} OPTIONS_DEFINE_i386= MMX OPTIONS_DEFAULT_i386= MMX # runtime detection MMX_BUILD_DEPENDS= yasm:devel/yasm MMX_MAKE_ARGS= BUILD_MMX=1 TREMOR_LIB_DEPENDS= libvorbisidec.so:audio/libtremor TREMOR_MAKE_ARGS= BUILD_TREMOR=1 BUILD_VORBIS="" TREMOR_LIB_DEPENDS_OFF= libvorbisfile.so:audio/libvorbis # # To update snapshot: make makesum BOOTSTRAP= # Specific snapshot: make makesum SVN_FETCH= PORTVERSION=1.0.r1234 # .if defined(BOOTSTRAP) # XXX SED and _MASTER_SITES_svn aren't defined yet SED?= /usr/bin/sed SVN_REV!= ${SETENV} LC_ALL=C svn info \ ${MASTER_SITES:M*\:svn:S/:svn//} | \ ${SED} -n 's/^Last Changed Rev: //p' PORTVERSION:= ${PORTVERSION:R}.r${SVN_REV} .else SVN_REV?= ${PORTVERSION:E:S/r//} .endif .if defined(BOOTSTRAP) || defined(SVN_FETCH) FETCH_DEPENDS+= svn:devel/subversion do-fetch: ${MKDIR} ${WRKDIR} svn export -r${SVN_REV} ${_MASTER_SITES_svn} ${WRKSRC} (cd ${WRKDIR} && ${TAR} cJvf \ ${_DISTDIR}/${DISTNAME}${EXTRACT_SUFX} \ --uid 0 --gid 0 ${DISTNAME}) ${REINPLACE_CMD} -i '' '/^PORTVERSION=/s/r.*/r${SVN_REV}/' \ ${MASTERDIR}/Makefile . if ${USER} == ${MAINTAINER:C/@.*//} -scp ${_DISTDIR}/${DISTNAME}${EXTRACT_SUFX} \ freefall.freebsd.org:public_distfiles/ . endif .endif post-patch: @${REINPLACE_CMD} -e 's/ -O[0-9]//; s/ -g//; s/ -Werror//' \ -e 's/ -fomit-frame-pointer//' \ -e 's/ -freorder-blocks//' \ -e 's/ -Wno-unused-result//' \ -e 's/ -Wl,-rpath,$$(LIBRARIES)//' \ -e '/echo/!s/ @/ /' \ -e 's/$$(LIBS)/$$(LDFLAGS) &/' \ ${WRKSRC}/Makefile @${GREP} -Flr 'malloc.h' ${WRKSRC} | ${XARGS} ${REINPLACE_CMD} \ 's,malloc\.h,stdlib.h,' @${REINPLACE_CMD} -e 's/^function \(.*\) {/\1() {/' \ -e 's/^get_revnum/VERSION_BUILD=${SVN_REV}/' \ ${WRKSRC}/version.sh do-configure: (cd ${WRKSRC} && ${SH} ./version.sh) do-install: ${INSTALL_PROGRAM} ${WRKSRC}/OpenBOR.elf \ ${STAGEDIR}${PREFIX}/bin/${PORTNAME} ${INSTALL_DATA} ${WRKSRC}/resources/OpenBOR_Icon_128x128.png \ ${STAGEDIR}${PREFIX}/share/pixmaps/${PORTNAME}.png (cd ${WRKSRC} && ${COPYTREE_SHARE} \ "${PORTDOCS}" ${STAGEDIR}${DOCSDIR}) .include Index: head/games/openbor/distinfo =================================================================== --- head/games/openbor/distinfo (revision 429222) +++ head/games/openbor/distinfo (revision 429223) @@ -1,3 +1,3 @@ -TIMESTAMP = 1482411722 -SHA256 (openbor-3.0.r4419.tar.xz) = 275c6b269eaaec1817b195287742441c434dbcc3fe4a05443490a6d4be52f611 -SIZE (openbor-3.0.r4419.tar.xz) = 3941412 +TIMESTAMP = 1482422861 +SHA256 (openbor-3.0.r4420.tar.xz) = 3497b60d2ac4eb7300ba74154b4057e216f289fe202660c9e49ba4d6bdec0985 +SIZE (openbor-3.0.r4420.tar.xz) = 3944364 Index: head/games/openbor/files/patch-openbor.c =================================================================== --- head/games/openbor/files/patch-openbor.c (revision 429222) +++ head/games/openbor/files/patch-openbor.c (revision 429223) @@ -1,38 +1,61 @@ ---- openbor.c.orig 2016-12-19 15:29:57 UTC +Fix potential crashes found by ASan/Clang/GCC + +--- openbor.c.orig 2016-12-22 13:02:02 UTC +++ openbor.c @@ -5810,7 +5810,7 @@ s_collision_attack **collision_alloc_att size_t alloc_size; // Get amount of memory we'll need. - alloc_size = sizeof(*result); + alloc_size = max_collisons * sizeof(*result); // Allocate memory and get pointer. result = malloc(alloc_size); @@ -5859,7 +5859,7 @@ s_collision_body **collision_alloc_body_ size_t alloc_size; // Get amount of memory we'll need. - alloc_size = sizeof(*result); + alloc_size = max_collisons * sizeof(*result); // Allocate memory and get pointer. result = malloc(alloc_size); -@@ -20480,7 +20480,7 @@ void common_dot() +@@ -13933,7 +13933,7 @@ void generate_basemap(int map_index, flo + + void load_level(char *filename) + { +- char *buf; ++ char *buf = NULL; + size_t size, len, sblen; + ptrdiff_t pos, oldpos; + char *command; +@@ -15210,6 +15210,11 @@ void bar(int x, int y, int value, int ma + return; + } + ++ if (value < 0) ++ { ++ value = 0; ++ } ++ + if (value > maxvalue) + { + value = maxvalue; +@@ -20471,7 +20476,7 @@ void common_dot() entity *eOpp; //Owner of dot effect. s_collision_attack attack; //Attack struct. - for(iIndex = 0; iIndex <= MAX_DOTS; iIndex++) //Loop through all DOT indexes. -+ for(iIndex = 0; iIndex < MAX_DOTS; iIndex++) //Loop through all DOT indexes. ++ for(iIndex = 0; iIndex < MAX_DOTS; iIndex++) //Loop through all DOT indexes. { iDot_time = self->dot_time[iIndex]; //Get expire time. iDot_cnt = self->dot_cnt[iIndex]; //Get next tick time. -@@ -34617,7 +34617,7 @@ void keyboard_setup(int player) +@@ -34607,7 +34612,7 @@ void keyboard_setup(int player) strncpy(buttonnames[SDID_SPECIAL], "Special", 16); strncpy(buttonnames[SDID_START], "Start", 16); strncpy(buttonnames[SDID_SCREENSHOT], "Screenshot", 16); - strncpy(buttonnames[SDID_ESC], "Exit", 16); -+// strncpy(buttonnames[SDID_ESC], "Exit", 16); ++ //strncpy(buttonnames[SDID_ESC], "Exit", 16); savesettings(); bothnewkeys = 0; Index: head/games/openbor/files/patch-sdl_sdlport.c =================================================================== --- head/games/openbor/files/patch-sdl_sdlport.c (revision 429222) +++ head/games/openbor/files/patch-sdl_sdlport.c (revision 429223) @@ -1,30 +1,32 @@ +Store settings under ~/.openbor instead of current directory + --- sdl/sdlport.c.orig 2013-12-29 14:05:10 UTC +++ sdl/sdlport.c @@ -6,6 +6,11 @@ * Copyright (c) 2004 - 2014 OpenBOR Team */ +#include +#include +#include +#include + #include "sdlport.h" #include "packfile.h" #include "ram.h" @@ -92,6 +97,15 @@ int main(int argc, char *argv[]) #ifdef ANDROID dirExists(rootDir, 1); chdir(rootDir); +#else + { + if (chdir(getenv("HOME")) != 0) + err(1, "cannot cd to $HOME"); + if (mkdir(".openbor", 0755) != 0 && errno != EEXIST) + err(1, "cannot mkdir $HOME/.openbor"); + if (chdir(".openbor") != 0) + err(1, "cannot cd to $HOME/.openbor"); + } #endif dirExists(paksDir, 1); dirExists(savesDir, 1); Index: head/games/openbor/files/patch-source_ramlib_ram.c =================================================================== --- head/games/openbor/files/patch-source_ramlib_ram.c (revision 429222) +++ head/games/openbor/files/patch-source_ramlib_ram.c (revision 429223) @@ -1,188 +1,190 @@ +Implement Linux-like memory stats for BSDs + --- source/ramlib/ram.c.orig 2015-04-18 21:21:56 UTC +++ source/ramlib/ram.c @@ -25,6 +25,21 @@ #include #include #include +#elif defined(__DragonFly__) || defined(__FreeBSD__) || \ + defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) +#include +#include +#include +# if defined(__DragonFly__) +#include // struct kinfo_proc +#include // struct vmstats +# elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) +#include // struct kinfo_proc +# elif defined(__NetBSD__) +#include // struct uvmexp_sysctl +# elif defined(__OpenBSD__) +#include // struct uvmexp +# endif #elif LINUX #include #include @@ -48,7 +63,10 @@ static u64 systemRam = 0x00000000; -#if !(defined(WIN) || defined(LINUX) || defined(DARWIN)) +#if !(defined(WIN) || defined(LINUX) || defined(DARWIN) || \ + defined(__DragonFly__) || defined(__FreeBSD__) || \ + defined(__FreeBSD_kernel__) || defined(__NetBSD__) || \ + defined(__OpenBSD__)) static unsigned long elfOffset = 0x00000000; static unsigned long stackSize = 0x00000000; #endif @@ -56,7 +74,10 @@ static unsigned long stackSize = 0x00000 ///////////////////////////////////////////////////////////////////////////// // Symbols -#if !(defined(WIN) || defined(LINUX) || defined(DARWIN)) +#if !(defined(WIN) || defined(LINUX) || defined(DARWIN) || \ + defined(__DragonFly__) || defined(__FreeBSD__) || \ + defined(__FreeBSD_kernel__) || defined(__NetBSD__) || \ + defined(__OpenBSD__)) #if (__GNUC__ > 3) extern unsigned long _end; extern unsigned long _start; @@ -93,6 +114,49 @@ u64 getFreeRam(int byte_size) return 0; } return (u64)(((vms.inactive_count + vms.free_count) * size) / byte_size); +#elif defined(__DragonFly__) + struct vmstats vms; + size_t sz = sizeof(vms); + if (sysctlbyname("vm.vmstats", &vms, &sz, NULL, 0)) + { + return 0; + } + return (u64)((vms.v_free_count + vms.v_inactive_count + + vms.v_cache_count) * getpagesize()) / byte_size; +#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) + u_int v_free_count, v_inactive_count, v_cache_count; + size_t sz = sizeof(u_int); + v_free_count = v_inactive_count = v_cache_count = 0; + sysctlbyname("vm.stats.vm.v_free_count", + &v_free_count, &sz, NULL, 0); + sysctlbyname("vm.stats.vm.v_inactive_count", + &v_inactive_count, &sz, NULL, 0); + sysctlbyname("vm.stats.vm.v_cache_count", + &v_cache_count, &sz, NULL, 0); + return (u64)((v_free_count + v_inactive_count + v_cache_count) + * getpagesize()) / byte_size; +#elif defined(__NetBSD__) || defined(__OpenBSD__) +# if defined(__NetBSD__) +#undef VM_UVMEXP +#define VM_UVMEXP VM_UVMEXP2 +#define uvmexp uvmexp_sysctl +# else +#define filepages vnodepages +#define execpages vtextpages +# endif + int mib[] = { + CTL_VM, + VM_UVMEXP, + }; + u_int miblen = sizeof(mib) / sizeof(mib[0]); + struct uvmexp uvmexp; + size_t sz = sizeof(uvmexp); + if (sysctl(mib, miblen, &uvmexp, &sz, NULL, 0)) + { + return 0; + } + return (u64)((uvmexp.free + uvmexp.inactive + uvmexp.filepages + + uvmexp.execpages) * uvmexp.pagesize) / byte_size; #elif LINUX struct sysinfo info; sysinfo(&info); @@ -133,11 +197,29 @@ void setSystemRam() stat.dwLength = sizeof(MEMORYSTATUS); GlobalMemoryStatus(&stat); systemRam = stat.dwTotalPhys; -#elif DARWIN - u64 mem; - size_t len = sizeof(mem); - sysctlbyname("hw.memsize", &mem, &len, NULL, 0); - systemRam = mem; +#elif defined(DARWIN) || defined(__DragonFly__) || defined(__FreeBSD__) || \ + defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) +# if defined(HW_MEMSIZE) || defined(HW_PHYSMEM64) + uint64_t physmem; +# else + u_long physmem; +# endif + int mib[] = { + CTL_HW, +# if defined(HW_MEMSIZE) + HW_MEMSIZE, +# elif defined(HW_PHYSMEM64) + HW_PHYSMEM64, +# else + HW_PHYSMEM, +# endif + }; + size_t sz = sizeof(physmem); + if (sysctl(mib, 2, &physmem, &sz, NULL, 0)) + { + physmem = 0; + } + systemRam = physmem; #elif LINUX struct sysinfo info; sysinfo(&info); @@ -180,7 +262,10 @@ void setSystemRam() stackSize = 0x00000000; systemRam = getFreeRam(BYTES); #endif -#if !(defined(WIN) || defined(LINUX) || defined(DARWIN) || defined(SYMBIAN)) +#if !(defined(WIN) || defined(LINUX) || defined(DARWIN) || defined(SYMBIAN) || \ + defined(__DragonFly__) || defined(__FreeBSD__) || \ + defined(__FreeBSD_kernel__) || defined(__NetBSD__) || \ + defined(__OpenBSD__)) stackSize = (int)&_end - (int)&_start + ((int)&_start - elfOffset); #endif getRamStatus(BYTES); @@ -212,6 +297,42 @@ u64 getUsedRam(int byte_size) return 0; } return info.resident_size / byte_size; +#elif defined(__DragonFly__) || defined(__FreeBSD__) || \ + defined(__FreeBSD_kernel__) || defined(__NetBSD__) || defined(__OpenBSD__) +# if defined(__NetBSD__) +#undef KERN_PROC +#define KERN_PROC KERN_PROC2 +#define KINFO_PROC struct kinfo_proc2 +# else +#define KINFO_PROC struct kinfo_proc +# endif +# if defined(__DragonFly__) +#define KP_RSS(kp) (kp.kp_vm_rssize * getpagesize()) +# elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) +#define KP_RSS(kp) (kp.ki_rssize * getpagesize()) +# elif defined(__NetBSD__) +#define KP_RSS(kp) (kp.p_vm_rssize * getpagesize()) +# elif defined(__OpenBSD__) +#define KP_RSS(kp) (kp.p_vm_rssize * getpagesize()) +# endif + int mib[] = { + CTL_KERN, + KERN_PROC, + KERN_PROC_PID, + getpid(), +# if defined(__NetBSD__) || defined(__OpenBSD__) + sizeof(KINFO_PROC), + 1, +# endif + }; + u_int miblen = sizeof(mib) / sizeof(mib[0]); + KINFO_PROC kp; + size_t sz = sizeof(KINFO_PROC); + if (sysctl(mib, miblen, &kp, &sz, NULL, 0)) + { + return 0; + } + return (u64)KP_RSS(kp) / byte_size; #elif LINUX unsigned long vm = 0; FILE *file = fopen("/proc/self/statm", "r");