From owner-svn-src-projects@freebsd.org Fri Feb 15 21:50:49 2019 Return-Path: Delivered-To: svn-src-projects@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 02EBB14EAFCD for ; Fri, 15 Feb 2019 21:50:49 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A069A87322; Fri, 15 Feb 2019 21:50:48 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 95A142491C; Fri, 15 Feb 2019 21:50:48 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x1FLomrW084043; Fri, 15 Feb 2019 21:50:48 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x1FLokSD084029; Fri, 15 Feb 2019 21:50:46 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201902152150.x1FLokSD084029@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Fri, 15 Feb 2019 21:50:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r344178 - in projects/clang800-import: . bin/sh bin/sh/tests/expansion contrib/libarchive/cpio/test contrib/libarchive/libarchive contrib/libarchive/libarchive/test contrib/libarchive/t... X-SVN-Group: projects X-SVN-Commit-Author: dim X-SVN-Commit-Paths: in projects/clang800-import: . bin/sh bin/sh/tests/expansion contrib/libarchive/cpio/test contrib/libarchive/libarchive contrib/libarchive/libarchive/test contrib/libarchive/test_utils contrib/llvm/li... X-SVN-Commit-Revision: 344178 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: A069A87322 X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.96 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.997,0]; NEURAL_HAM_SHORT(-0.97)[-0.966,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-0.999,0] X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Feb 2019 21:50:49 -0000 Author: dim Date: Fri Feb 15 21:50:45 2019 New Revision: 344178 URL: https://svnweb.freebsd.org/changeset/base/344178 Log: Merge ^/head r343956 through r344177. Added: projects/clang800-import/bin/sh/tests/expansion/arith16.0 - copied unchanged from r344177, head/bin/sh/tests/expansion/arith16.0 projects/clang800-import/bin/sh/tests/expansion/arith17.0 - copied unchanged from r344177, head/bin/sh/tests/expansion/arith17.0 projects/clang800-import/contrib/libarchive/libarchive/archive_ppmd8.c - copied unchanged from r344177, head/contrib/libarchive/libarchive/archive_ppmd8.c projects/clang800-import/contrib/libarchive/libarchive/archive_ppmd8_private.h - copied unchanged from r344177, head/contrib/libarchive/libarchive/archive_ppmd8_private.h projects/clang800-import/contrib/libarchive/libarchive/test/test_read_format_zip_bzip2.zipx.uu - copied unchanged from r344177, head/contrib/libarchive/libarchive/test/test_read_format_zip_bzip2.zipx.uu projects/clang800-import/contrib/libarchive/libarchive/test/test_read_format_zip_bzip2_multi.zipx.uu - copied unchanged from r344177, head/contrib/libarchive/libarchive/test/test_read_format_zip_bzip2_multi.zipx.uu projects/clang800-import/contrib/libarchive/libarchive/test/test_read_format_zip_lzma.zipx.uu - copied unchanged from r344177, head/contrib/libarchive/libarchive/test/test_read_format_zip_lzma.zipx.uu projects/clang800-import/contrib/libarchive/libarchive/test/test_read_format_zip_lzma_multi.zipx.uu - copied unchanged from r344177, head/contrib/libarchive/libarchive/test/test_read_format_zip_lzma_multi.zipx.uu projects/clang800-import/contrib/libarchive/libarchive/test/test_read_format_zip_ppmd8.zipx.uu - copied unchanged from r344177, head/contrib/libarchive/libarchive/test/test_read_format_zip_ppmd8.zipx.uu projects/clang800-import/contrib/libarchive/libarchive/test/test_read_format_zip_ppmd8_multi.zipx.uu - copied unchanged from r344177, head/contrib/libarchive/libarchive/test/test_read_format_zip_ppmd8_multi.zipx.uu projects/clang800-import/contrib/libarchive/libarchive/test/test_read_format_zip_xz_multi.zipx.uu - copied unchanged from r344177, head/contrib/libarchive/libarchive/test/test_read_format_zip_xz_multi.zipx.uu projects/clang800-import/lib/libc/x86/gen/ - copied from r344177, head/lib/libc/x86/gen/ projects/clang800-import/sys/opencrypto/cbc_mac.c - copied unchanged from r344177, head/sys/opencrypto/cbc_mac.c projects/clang800-import/sys/opencrypto/cbc_mac.h - copied unchanged from r344177, head/sys/opencrypto/cbc_mac.h projects/clang800-import/sys/opencrypto/xform_cbc_mac.c - copied unchanged from r344177, head/sys/opencrypto/xform_cbc_mac.c Deleted: projects/clang800-import/contrib/libarchive/libarchive/test/test_compat_pax_libarchive_2x.c projects/clang800-import/contrib/libarchive/libarchive/test/test_compat_pax_libarchive_2x.tar.Z.uu projects/clang800-import/lib/libc/amd64/gen/getcontextx.c projects/clang800-import/lib/libc/i386/gen/getcontextx.c projects/clang800-import/sys/contrib/dev/iwm/iwm-3160-9.fw.uu projects/clang800-import/sys/contrib/dev/iwm/iwm-7260-9.fw.uu projects/clang800-import/sys/contrib/dev/iwm/iwm-7265-9.fw.uu Modified: projects/clang800-import/UPDATING projects/clang800-import/bin/sh/arith_yacc.c projects/clang800-import/bin/sh/arith_yacc.h projects/clang800-import/bin/sh/arith_yylex.c projects/clang800-import/bin/sh/shell.h projects/clang800-import/bin/sh/tests/expansion/Makefile projects/clang800-import/contrib/libarchive/cpio/test/test_option_t.c projects/clang800-import/contrib/libarchive/libarchive/archive_acl.c projects/clang800-import/contrib/libarchive/libarchive/archive_entry.c projects/clang800-import/contrib/libarchive/libarchive/archive_pack_dev.c projects/clang800-import/contrib/libarchive/libarchive/archive_read_disk_posix.c projects/clang800-import/contrib/libarchive/libarchive/archive_read_open_file.c projects/clang800-import/contrib/libarchive/libarchive/archive_read_support_format_7zip.c projects/clang800-import/contrib/libarchive/libarchive/archive_read_support_format_ar.c projects/clang800-import/contrib/libarchive/libarchive/archive_read_support_format_cpio.c projects/clang800-import/contrib/libarchive/libarchive/archive_read_support_format_iso9660.c projects/clang800-import/contrib/libarchive/libarchive/archive_read_support_format_rar5.c projects/clang800-import/contrib/libarchive/libarchive/archive_read_support_format_xar.c projects/clang800-import/contrib/libarchive/libarchive/archive_read_support_format_zip.c projects/clang800-import/contrib/libarchive/libarchive/archive_write_disk_posix.c projects/clang800-import/contrib/libarchive/libarchive/archive_write_disk_set_standard_lookup.c projects/clang800-import/contrib/libarchive/libarchive/archive_write_set_format_ar.c projects/clang800-import/contrib/libarchive/libarchive/archive_write_set_format_cpio.c projects/clang800-import/contrib/libarchive/libarchive/archive_write_set_format_cpio_newc.c projects/clang800-import/contrib/libarchive/libarchive/archive_write_set_format_gnutar.c projects/clang800-import/contrib/libarchive/libarchive/archive_write_set_format_shar.c projects/clang800-import/contrib/libarchive/libarchive/archive_write_set_format_ustar.c projects/clang800-import/contrib/libarchive/libarchive/archive_write_set_format_v7tar.c projects/clang800-import/contrib/libarchive/libarchive/archive_write_set_format_zip.c projects/clang800-import/contrib/libarchive/libarchive/test/test_read_format_zip.c projects/clang800-import/contrib/libarchive/test_utils/test_main.c projects/clang800-import/contrib/llvm/lib/MC/ELFObjectWriter.cpp projects/clang800-import/lib/libarchive/Makefile projects/clang800-import/lib/libarchive/tests/Makefile projects/clang800-import/lib/libbe/be.c projects/clang800-import/lib/libbe/be.h projects/clang800-import/lib/libbe/be_error.c projects/clang800-import/lib/libbe/libbe.3 projects/clang800-import/lib/libc/Makefile projects/clang800-import/lib/libc/amd64/gen/Makefile.inc projects/clang800-import/lib/libc/gen/readpassphrase.3 projects/clang800-import/lib/libc/i386/gen/Makefile.inc projects/clang800-import/lib/libc/net/getaddrinfo.3 projects/clang800-import/lib/libc/x86/sys/__vdso_gettc.c projects/clang800-import/lib/libnv/tests/nvlist_send_recv_test.c projects/clang800-import/lib/libthr/arch/powerpc/include/pthread_md.h projects/clang800-import/sbin/bectl/bectl.8 projects/clang800-import/sbin/bectl/bectl.c projects/clang800-import/sbin/bectl/tests/bectl_test.sh projects/clang800-import/sbin/gbde/gbde.c projects/clang800-import/sbin/ifconfig/ifieee80211.c projects/clang800-import/sbin/mdmfs/mdmfs.c projects/clang800-import/sbin/pfctl/pfctl_altq.c projects/clang800-import/sbin/pfctl/pfctl_parser.c projects/clang800-import/share/man/man4/numa.4 projects/clang800-import/share/man/man7/ports.7 projects/clang800-import/share/man/man8/Makefile projects/clang800-import/share/termcap/termcap projects/clang800-import/stand/common/dev_net.c projects/clang800-import/sys/amd64/amd64/elf_machdep.c projects/clang800-import/sys/arm/allwinner/axp81x.c projects/clang800-import/sys/arm/arm/busdma_machdep-v6.c projects/clang800-import/sys/arm/arm/elf_machdep.c projects/clang800-import/sys/arm/nvidia/tegra_sdhci.c projects/clang800-import/sys/arm64/arm64/elf_machdep.c projects/clang800-import/sys/cam/cam_xpt.c projects/clang800-import/sys/cam/scsi/scsi_xpt.c projects/clang800-import/sys/compat/freebsd32/freebsd32_misc.c projects/clang800-import/sys/compat/ia32/ia32_sysvec.c projects/clang800-import/sys/compat/linuxkpi/common/src/linux_tasklet.c projects/clang800-import/sys/conf/files projects/clang800-import/sys/contrib/libnv/nv_impl.h projects/clang800-import/sys/contrib/libnv/nvlist.c projects/clang800-import/sys/contrib/libnv/nvpair.c projects/clang800-import/sys/dev/beri/virtio/virtio_block.c projects/clang800-import/sys/dev/cxgbe/common/t4_hw.c projects/clang800-import/sys/dev/ena/ena.c projects/clang800-import/sys/dev/ena/ena.h projects/clang800-import/sys/dev/ixl/if_ixl.c projects/clang800-import/sys/dev/ixl/ixl_pf.h projects/clang800-import/sys/dev/malo/if_malo.c projects/clang800-import/sys/dev/mwl/if_mwl.c projects/clang800-import/sys/dev/pci/pci.c projects/clang800-import/sys/dev/usb/quirk/usb_quirk.c projects/clang800-import/sys/dev/usb/usbdevs projects/clang800-import/sys/dev/usb/wlan/if_run.c projects/clang800-import/sys/i386/i386/elf_machdep.c projects/clang800-import/sys/i386/include/cpufunc.h projects/clang800-import/sys/kern/imgact_elf.c projects/clang800-import/sys/kern/kern_exec.c projects/clang800-import/sys/kern/kern_fork.c projects/clang800-import/sys/kern/kern_procctl.c projects/clang800-import/sys/kern/kern_resource.c projects/clang800-import/sys/kern/subr_epoch.c projects/clang800-import/sys/kern/subr_gtaskqueue.c projects/clang800-import/sys/mips/cavium/octe/ethernet-defines.h projects/clang800-import/sys/mips/cavium/octe/ethernet-rx.c projects/clang800-import/sys/mips/cavium/octe/ethernet.c projects/clang800-import/sys/mips/mips/elf_machdep.c projects/clang800-import/sys/modules/crypto/Makefile projects/clang800-import/sys/modules/hwpmc/Makefile projects/clang800-import/sys/net/altq/altq_cbq.c projects/clang800-import/sys/net/altq/altq_codel.c projects/clang800-import/sys/net/altq/altq_fairq.c projects/clang800-import/sys/net/altq/altq_hfsc.c projects/clang800-import/sys/net/altq/altq_hfsc.h projects/clang800-import/sys/net/altq/altq_priq.c projects/clang800-import/sys/net/altq/altq_subr.c projects/clang800-import/sys/net/altq/altq_var.h projects/clang800-import/sys/net/if_lagg.c projects/clang800-import/sys/net/if_vlan.c projects/clang800-import/sys/net/iflib.c projects/clang800-import/sys/net/pfvar.h projects/clang800-import/sys/net80211/ieee80211_adhoc.c projects/clang800-import/sys/net80211/ieee80211_hostap.c projects/clang800-import/sys/net80211/ieee80211_ht.c projects/clang800-import/sys/net80211/ieee80211_mesh.c projects/clang800-import/sys/net80211/ieee80211_output.c projects/clang800-import/sys/net80211/ieee80211_proto.h projects/clang800-import/sys/net80211/ieee80211_sta.c projects/clang800-import/sys/net80211/ieee80211_wds.c projects/clang800-import/sys/netinet/if_ether.c projects/clang800-import/sys/netinet/in_pcb.c projects/clang800-import/sys/netinet/raw_ip.c projects/clang800-import/sys/netinet/sctp_usrreq.c projects/clang800-import/sys/netinet/sctputil.c projects/clang800-import/sys/netinet/tcp_timewait.c projects/clang800-import/sys/netpfil/ipfw/ip_fw_dynamic.c projects/clang800-import/sys/netpfil/pf/pf.c projects/clang800-import/sys/netpfil/pf/pf_ioctl.c projects/clang800-import/sys/opencrypto/cryptodev.c projects/clang800-import/sys/opencrypto/cryptodev.h projects/clang800-import/sys/opencrypto/cryptosoft.c projects/clang800-import/sys/opencrypto/xform_aes_icm.c projects/clang800-import/sys/opencrypto/xform_auth.h projects/clang800-import/sys/opencrypto/xform_enc.h projects/clang800-import/sys/powerpc/aim/mmu_oea64.c projects/clang800-import/sys/powerpc/booke/pmap.c projects/clang800-import/sys/powerpc/conf/MPC85XXSPE projects/clang800-import/sys/powerpc/powerpc/elf32_machdep.c projects/clang800-import/sys/powerpc/powerpc/elf64_machdep.c projects/clang800-import/sys/powerpc/powerpc/exec_machdep.c projects/clang800-import/sys/riscv/include/param.h projects/clang800-import/sys/riscv/include/pcb.h projects/clang800-import/sys/riscv/include/pcpu.h projects/clang800-import/sys/riscv/include/pmap.h projects/clang800-import/sys/riscv/include/pte.h projects/clang800-import/sys/riscv/include/vmparam.h projects/clang800-import/sys/riscv/riscv/elf_machdep.c projects/clang800-import/sys/riscv/riscv/genassym.c projects/clang800-import/sys/riscv/riscv/machdep.c projects/clang800-import/sys/riscv/riscv/mp_machdep.c projects/clang800-import/sys/riscv/riscv/pmap.c projects/clang800-import/sys/riscv/riscv/swtch.S projects/clang800-import/sys/riscv/riscv/vm_machdep.c projects/clang800-import/sys/sparc64/sparc64/elf_machdep.c projects/clang800-import/sys/sys/_task.h projects/clang800-import/sys/sys/gtaskqueue.h projects/clang800-import/sys/sys/imgact.h projects/clang800-import/sys/sys/param.h projects/clang800-import/sys/sys/proc.h projects/clang800-import/sys/sys/procctl.h projects/clang800-import/sys/sys/sysent.h projects/clang800-import/sys/vm/swap_pager.c projects/clang800-import/sys/vm/uma_core.c projects/clang800-import/sys/vm/uma_int.h projects/clang800-import/sys/vm/vm_fault.c projects/clang800-import/sys/vm/vm_map.c projects/clang800-import/sys/vm/vm_map.h projects/clang800-import/tools/tools/crypto/cryptocheck.c projects/clang800-import/usr.bin/proccontrol/proccontrol.c projects/clang800-import/usr.bin/top/Makefile projects/clang800-import/usr.bin/top/display.c projects/clang800-import/usr.bin/top/display.h projects/clang800-import/usr.bin/top/machine.c projects/clang800-import/usr.bin/top/top.c projects/clang800-import/usr.bin/top/username.c projects/clang800-import/usr.bin/top/utils.c projects/clang800-import/usr.bin/top/utils.h projects/clang800-import/usr.sbin/bhyve/block_if.c projects/clang800-import/usr.sbin/bhyve/pci_xhci.c (contents, props changed) projects/clang800-import/usr.sbin/bhyve/uart_emul.c projects/clang800-import/usr.sbin/mountd/exports.5 Directory Properties: projects/clang800-import/ (props changed) projects/clang800-import/contrib/libarchive/ (props changed) projects/clang800-import/contrib/llvm/ (props changed) Modified: projects/clang800-import/UPDATING ============================================================================== --- projects/clang800-import/UPDATING Fri Feb 15 21:44:42 2019 (r344177) +++ projects/clang800-import/UPDATING Fri Feb 15 21:50:45 2019 (r344178) @@ -44,6 +44,12 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW: modules on kernels not having 'device iflib', the iflib.ko module is loaded automatically. +20190125: + The IEEE80211_AMPDU_AGE and AH_SUPPORT_AR5416 kernel configuration + options no longer exist since r343219 and r343427 respectively; + nothing uses them, so they should be just removed from custom + kernel config files. + 20181230: r342635 changes the way efibootmgr(8) works by requiring users to add the -b (bootnum) parameter for commands where the bootnum was previously @@ -237,7 +243,7 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW: 20180719: ARM64 now have efifb support, if you want to have serial console on your arm64 board when an screen is connected and the bootloader - setup a frambuffer for us to use, just add : + setup a framebuffer for us to use, just add : boot_serial=YES boot_multicons=YES in /boot/loader.conf Modified: projects/clang800-import/bin/sh/arith_yacc.c ============================================================================== --- projects/clang800-import/bin/sh/arith_yacc.c Fri Feb 15 21:44:42 2019 (r344177) +++ projects/clang800-import/bin/sh/arith_yacc.c Fri Feb 15 21:50:45 2019 (r344178) @@ -104,7 +104,7 @@ static arith_t arith_lookupvarint(char *varname) if (str == NULL || *str == '\0') str = "0"; errno = 0; - result = strtoarith_t(str, &p, 0); + result = strtoarith_t(str, &p); if (errno != 0 || *p != '\0') yyerror("variable conversion error"); return result; Modified: projects/clang800-import/bin/sh/arith_yacc.h ============================================================================== --- projects/clang800-import/bin/sh/arith_yacc.h Fri Feb 15 21:44:42 2019 (r344177) +++ projects/clang800-import/bin/sh/arith_yacc.h Fri Feb 15 21:50:45 2019 (r344178) @@ -90,4 +90,5 @@ union yystype { extern union yystype yylval; +arith_t strtoarith_t(const char *restrict nptr, char **restrict endptr); int yylex(void); Modified: projects/clang800-import/bin/sh/arith_yylex.c ============================================================================== --- projects/clang800-import/bin/sh/arith_yylex.c Fri Feb 15 21:44:42 2019 (r344177) +++ projects/clang800-import/bin/sh/arith_yylex.c Fri Feb 15 21:50:45 2019 (r344178) @@ -35,6 +35,8 @@ #include __FBSDID("$FreeBSD$"); +#include +#include #include #include #include @@ -50,6 +52,32 @@ __FBSDID("$FreeBSD$"); #error Arithmetic tokens are out of order. #endif +arith_t +strtoarith_t(const char *restrict nptr, char **restrict endptr) +{ + arith_t val; + + while (isspace((unsigned char)*nptr)) + nptr++; + switch (*nptr) { + case '-': + return strtoimax(nptr, endptr, 0); + case '0': + return (arith_t)strtoumax(nptr, endptr, 0); + default: + val = (arith_t)strtoumax(nptr, endptr, 0); + if (val >= 0) + return val; + else if (val == ARITH_MIN) { + errno = ERANGE; + return ARITH_MIN; + } else { + errno = ERANGE; + return ARITH_MAX; + } + } +} + int yylex(void) { @@ -78,7 +106,7 @@ yylex(void) case '7': case '8': case '9': - yylval.val = strtoarith_t(buf, &end, 0); + yylval.val = strtoarith_t(buf, &end); arith_buf = end; return ARITH_NUM; case 'A': Modified: projects/clang800-import/bin/sh/shell.h ============================================================================== --- projects/clang800-import/bin/sh/shell.h Fri Feb 15 21:44:42 2019 (r344177) +++ projects/clang800-import/bin/sh/shell.h Fri Feb 15 21:50:45 2019 (r344178) @@ -59,7 +59,6 @@ */ typedef intmax_t arith_t; #define ARITH_FORMAT_STR "%" PRIdMAX -#define strtoarith_t(nptr, endptr, base) (intmax_t)strtoumax(nptr, endptr, base) #define ARITH_MIN INTMAX_MIN #define ARITH_MAX INTMAX_MAX Modified: projects/clang800-import/bin/sh/tests/expansion/Makefile ============================================================================== --- projects/clang800-import/bin/sh/tests/expansion/Makefile Fri Feb 15 21:44:42 2019 (r344177) +++ projects/clang800-import/bin/sh/tests/expansion/Makefile Fri Feb 15 21:50:45 2019 (r344178) @@ -22,6 +22,8 @@ ${PACKAGE}FILES+= arith12.0 ${PACKAGE}FILES+= arith13.0 ${PACKAGE}FILES+= arith14.0 ${PACKAGE}FILES+= arith15.0 +${PACKAGE}FILES+= arith16.0 +${PACKAGE}FILES+= arith17.0 ${PACKAGE}FILES+= assign1.0 ${PACKAGE}FILES+= cmdsubst1.0 ${PACKAGE}FILES+= cmdsubst2.0 Copied: projects/clang800-import/bin/sh/tests/expansion/arith16.0 (from r344177, head/bin/sh/tests/expansion/arith16.0) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang800-import/bin/sh/tests/expansion/arith16.0 Fri Feb 15 21:50:45 2019 (r344178, copy of r344177, head/bin/sh/tests/expansion/arith16.0) @@ -0,0 +1,26 @@ +# $FreeBSD$ + +failures=0 + +for x in \ + 0x10000000000000000 \ + -0x8000000000000001 \ + 0xfffffffffffffffffffffffffffffffff \ + -0xfffffffffffffffffffffffffffffffff \ + 02000000000000000000000 \ + 9223372036854775808 \ + 9223372036854775809 \ + -9223372036854775809 \ + 9999999999999999999999999 \ + -9999999999999999999999999 +do + msg=$({ + v=$((x)) || : + } 3>&1 >&2 2>&3 3>&-) + r=$? + if [ "$r" = 0 ] || [ -z "$msg" ]; then + printf 'Failed: %s\n' "$x" + : $((failures += 1)) + fi +done +exit $((failures > 0)) Copied: projects/clang800-import/bin/sh/tests/expansion/arith17.0 (from r344177, head/bin/sh/tests/expansion/arith17.0) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang800-import/bin/sh/tests/expansion/arith17.0 Fri Feb 15 21:50:45 2019 (r344178, copy of r344177, head/bin/sh/tests/expansion/arith17.0) @@ -0,0 +1,3 @@ +# $FreeBSD$ + +[ $((9223372036854775809)) -gt 0 ] Modified: projects/clang800-import/contrib/libarchive/cpio/test/test_option_t.c ============================================================================== --- projects/clang800-import/contrib/libarchive/cpio/test/test_option_t.c Fri Feb 15 21:44:42 2019 (r344177) +++ projects/clang800-import/contrib/libarchive/cpio/test/test_option_t.c Fri Feb 15 21:50:45 2019 (r344178) @@ -88,11 +88,11 @@ DEFINE_TEST(test_option_t) setlocale(LC_ALL, ""); #endif #if defined(_WIN32) && !defined(__CYGWIN__) - strftime(date2, sizeof(date), "%b %d %Y", localtime(&mtime)); - _snprintf(date, sizeof(date)-1, "%12s file", date2); + strftime(date2, sizeof(date2)-1, "%b %d %Y", localtime(&mtime)); + _snprintf(date, sizeof(date)-1, "%12.12s file", date2); #else - strftime(date2, sizeof(date), "%b %e %Y", localtime(&mtime)); - snprintf(date, sizeof(date)-1, "%12s file", date2); + strftime(date2, sizeof(date2)-1, "%b %e %Y", localtime(&mtime)); + snprintf(date, sizeof(date)-1, "%12.12s file", date2); #endif assertEqualMem(p + 42, date, strlen(date)); free(p); Modified: projects/clang800-import/contrib/libarchive/libarchive/archive_acl.c ============================================================================== --- projects/clang800-import/contrib/libarchive/libarchive/archive_acl.c Fri Feb 15 21:44:42 2019 (r344177) +++ projects/clang800-import/contrib/libarchive/libarchive/archive_acl.c Fri Feb 15 21:50:45 2019 (r344178) @@ -138,14 +138,10 @@ archive_acl_clear(struct archive_acl *acl) free(acl->acl_head); acl->acl_head = ap; } - if (acl->acl_text_w != NULL) { - free(acl->acl_text_w); - acl->acl_text_w = NULL; - } - if (acl->acl_text != NULL) { - free(acl->acl_text); - acl->acl_text = NULL; - } + free(acl->acl_text_w); + acl->acl_text_w = NULL; + free(acl->acl_text); + acl->acl_text = NULL; acl->acl_p = NULL; acl->acl_types = 0; acl->acl_state = 0; /* Not counting. */ @@ -324,14 +320,10 @@ acl_new_entry(struct archive_acl *acl, return (NULL); } - if (acl->acl_text_w != NULL) { - free(acl->acl_text_w); - acl->acl_text_w = NULL; - } - if (acl->acl_text != NULL) { - free(acl->acl_text); - acl->acl_text = NULL; - } + free(acl->acl_text_w); + acl->acl_text_w = NULL; + free(acl->acl_text); + acl->acl_text = NULL; /* * If there's a matching entry already in the list, overwrite it. Modified: projects/clang800-import/contrib/libarchive/libarchive/archive_entry.c ============================================================================== --- projects/clang800-import/contrib/libarchive/libarchive/archive_entry.c Fri Feb 15 21:44:42 2019 (r344177) +++ projects/clang800-import/contrib/libarchive/libarchive/archive_entry.c Fri Feb 15 21:50:45 2019 (r344178) @@ -1560,10 +1560,8 @@ archive_entry_acl_text_compat(int *flags) const wchar_t * archive_entry_acl_text_w(struct archive_entry *entry, int flags) { - if (entry->acl.acl_text_w != NULL) { - free(entry->acl.acl_text_w); - entry->acl.acl_text_w = NULL; - } + free(entry->acl.acl_text_w); + entry->acl.acl_text_w = NULL; if (archive_entry_acl_text_compat(&flags) == 0) entry->acl.acl_text_w = archive_acl_to_text_w(&entry->acl, NULL, flags, entry->archive); @@ -1574,10 +1572,8 @@ archive_entry_acl_text_w(struct archive_entry *entry, const char * archive_entry_acl_text(struct archive_entry *entry, int flags) { - if (entry->acl.acl_text != NULL) { - free(entry->acl.acl_text); - entry->acl.acl_text = NULL; - } + free(entry->acl.acl_text); + entry->acl.acl_text = NULL; if (archive_entry_acl_text_compat(&flags) == 0) entry->acl.acl_text = archive_acl_to_text_l(&entry->acl, NULL, flags, NULL); @@ -1590,10 +1586,8 @@ int _archive_entry_acl_text_l(struct archive_entry *entry, int flags, const char **acl_text, size_t *len, struct archive_string_conv *sc) { - if (entry->acl.acl_text != NULL) { - free(entry->acl.acl_text); - entry->acl.acl_text = NULL; - } + free(entry->acl.acl_text); + entry->acl.acl_text = NULL; if (archive_entry_acl_text_compat(&flags) == 0) entry->acl.acl_text = archive_acl_to_text_l(&entry->acl, Modified: projects/clang800-import/contrib/libarchive/libarchive/archive_pack_dev.c ============================================================================== --- projects/clang800-import/contrib/libarchive/libarchive/archive_pack_dev.c Fri Feb 15 21:44:42 2019 (r344177) +++ projects/clang800-import/contrib/libarchive/libarchive/archive_pack_dev.c Fri Feb 15 21:50:45 2019 (r344178) @@ -60,6 +60,9 @@ __RCSID("$NetBSD$"); #ifdef HAVE_SYS_SYSMACROS_H #include #endif +#ifdef HAVE_SYS_MKDEV_H +#include +#endif #ifdef HAVE_UNISTD_H #include #endif Copied: projects/clang800-import/contrib/libarchive/libarchive/archive_ppmd8.c (from r344177, head/contrib/libarchive/libarchive/archive_ppmd8.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang800-import/contrib/libarchive/libarchive/archive_ppmd8.c Fri Feb 15 21:50:45 2019 (r344178, copy of r344177, head/contrib/libarchive/libarchive/archive_ppmd8.c) @@ -0,0 +1,1287 @@ +/* Ppmd8.c -- PPMdI codec +2016-05-21 : Igor Pavlov : Public domain +This code is based on PPMd var.I (2002): Dmitry Shkarin : Public domain */ + +#include "archive_platform.h" + +#include + +#include "archive_ppmd8_private.h" + +const Byte PPMD8_kExpEscape[16] = { 25, 14, 9, 7, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2 }; +static const UInt16 kInitBinEsc[] = { 0x3CDD, 0x1F3F, 0x59BF, 0x48F3, 0x64A1, 0x5ABC, 0x6632, 0x6051}; + +#define MAX_FREQ 124 +#define UNIT_SIZE 12 + +#define U2B(nu) ((UInt32)(nu) * UNIT_SIZE) +#define U2I(nu) (p->Units2Indx[(nu) - 1]) +#define I2U(indx) (p->Indx2Units[indx]) + +#ifdef PPMD_32BIT + #define REF(ptr) (ptr) +#else + #define REF(ptr) ((UInt32)((Byte *)(ptr) - (p)->Base)) +#endif + +#define STATS_REF(ptr) ((CPpmd_State_Ref)REF(ptr)) + +#define CTX(ref) ((CPpmd8_Context *)Ppmd8_GetContext(p, ref)) +#define STATS(ctx) Ppmd8_GetStats(p, ctx) +#define ONE_STATE(ctx) Ppmd8Context_OneState(ctx) +#define SUFFIX(ctx) CTX((ctx)->Suffix) + +#define kTop (1 << 24) +#define kBot (1 << 15) + +typedef CPpmd8_Context * CTX_PTR; + +struct CPpmd8_Node_; + +typedef + #ifdef PPMD_32BIT + struct CPpmd8_Node_ * + #else + UInt32 + #endif + CPpmd8_Node_Ref; + +typedef struct CPpmd8_Node_ +{ + UInt32 Stamp; + CPpmd8_Node_Ref Next; + UInt32 NU; +} CPpmd8_Node; + +#ifdef PPMD_32BIT + #define NODE(ptr) (ptr) +#else + #define NODE(offs) ((CPpmd8_Node *)(p->Base + (offs))) +#endif + +#define EMPTY_NODE 0xFFFFFFFF + +void Ppmd8_Construct(CPpmd8 *p) +{ + unsigned i, k, m; + + p->Base = 0; + + for (i = 0, k = 0; i < PPMD_NUM_INDEXES; i++) + { + unsigned step = (i >= 12 ? 4 : (i >> 2) + 1); + do { p->Units2Indx[k++] = (Byte)i; } while (--step); + p->Indx2Units[i] = (Byte)k; + } + + p->NS2BSIndx[0] = (0 << 1); + p->NS2BSIndx[1] = (1 << 1); + memset(p->NS2BSIndx + 2, (2 << 1), 9); + memset(p->NS2BSIndx + 11, (3 << 1), 256 - 11); + + for (i = 0; i < 5; i++) + p->NS2Indx[i] = (Byte)i; + for (m = i, k = 1; i < 260; i++) + { + p->NS2Indx[i] = (Byte)m; + if (--k == 0) + k = (++m) - 4; + } +} + +void Ppmd8_Free(CPpmd8 *p) +{ + free(p->Base); + p->Size = 0; + p->Base = 0; +} + +Bool Ppmd8_Alloc(CPpmd8 *p, UInt32 size) +{ + if (p->Base == 0 || p->Size != size) + { + Ppmd8_Free(p); + p->AlignOffset = + #ifdef PPMD_32BIT + (4 - size) & 3; + #else + 4 - (size & 3); + #endif + if ((p->Base = (Byte *)malloc(p->AlignOffset + size)) == 0) + return False; + p->Size = size; + } + return True; +} + +static void InsertNode(CPpmd8 *p, void *node, unsigned indx) +{ + ((CPpmd8_Node *)node)->Stamp = EMPTY_NODE; + ((CPpmd8_Node *)node)->Next = (CPpmd8_Node_Ref)p->FreeList[indx]; + ((CPpmd8_Node *)node)->NU = I2U(indx); + p->FreeList[indx] = REF(node); + p->Stamps[indx]++; +} + +static void *RemoveNode(CPpmd8 *p, unsigned indx) +{ + CPpmd8_Node *node = NODE((CPpmd8_Node_Ref)p->FreeList[indx]); + p->FreeList[indx] = node->Next; + p->Stamps[indx]--; + return node; +} + +static void SplitBlock(CPpmd8 *p, void *ptr, unsigned oldIndx, unsigned newIndx) +{ + unsigned i, nu = I2U(oldIndx) - I2U(newIndx); + ptr = (Byte *)ptr + U2B(I2U(newIndx)); + if (I2U(i = U2I(nu)) != nu) + { + unsigned k = I2U(--i); + InsertNode(p, ((Byte *)ptr) + U2B(k), nu - k - 1); + } + InsertNode(p, ptr, i); +} + +static void GlueFreeBlocks(CPpmd8 *p) +{ + CPpmd8_Node_Ref head = 0; + CPpmd8_Node_Ref *prev = &head; + unsigned i; + + p->GlueCount = 1 << 13; + memset(p->Stamps, 0, sizeof(p->Stamps)); + + /* Order-0 context is always at top UNIT, so we don't need guard NODE at the end. + All blocks up to p->LoUnit can be free, so we need guard NODE at LoUnit. */ + if (p->LoUnit != p->HiUnit) + ((CPpmd8_Node *)p->LoUnit)->Stamp = 0; + + /* Glue free blocks */ + for (i = 0; i < PPMD_NUM_INDEXES; i++) + { + CPpmd8_Node_Ref next = (CPpmd8_Node_Ref)p->FreeList[i]; + p->FreeList[i] = 0; + while (next != 0) + { + CPpmd8_Node *node = NODE(next); + if (node->NU != 0) + { + CPpmd8_Node *node2; + *prev = next; + prev = &(node->Next); + while ((node2 = node + node->NU)->Stamp == EMPTY_NODE) + { + node->NU += node2->NU; + node2->NU = 0; + } + } + next = node->Next; + } + } + *prev = 0; + + /* Fill lists of free blocks */ + while (head != 0) + { + CPpmd8_Node *node = NODE(head); + unsigned nu; + head = node->Next; + nu = node->NU; + if (nu == 0) + continue; + for (; nu > 128; nu -= 128, node += 128) + InsertNode(p, node, PPMD_NUM_INDEXES - 1); + if (I2U(i = U2I(nu)) != nu) + { + unsigned k = I2U(--i); + InsertNode(p, node + k, nu - k - 1); + } + InsertNode(p, node, i); + } +} + +static void *AllocUnitsRare(CPpmd8 *p, unsigned indx) +{ + unsigned i; + void *retVal; + if (p->GlueCount == 0) + { + GlueFreeBlocks(p); + if (p->FreeList[indx] != 0) + return RemoveNode(p, indx); + } + i = indx; + do + { + if (++i == PPMD_NUM_INDEXES) + { + UInt32 numBytes = U2B(I2U(indx)); + p->GlueCount--; + return ((UInt32)(p->UnitsStart - p->Text) > numBytes) ? (p->UnitsStart -= numBytes) : (NULL); + } + } + while (p->FreeList[i] == 0); + retVal = RemoveNode(p, i); + SplitBlock(p, retVal, i, indx); + return retVal; +} + +static void *AllocUnits(CPpmd8 *p, unsigned indx) +{ + UInt32 numBytes; + if (p->FreeList[indx] != 0) + return RemoveNode(p, indx); + numBytes = U2B(I2U(indx)); + if (numBytes <= (UInt32)(p->HiUnit - p->LoUnit)) + { + void *retVal = p->LoUnit; + p->LoUnit += numBytes; + return retVal; + } + return AllocUnitsRare(p, indx); +} + +#define MyMem12Cpy(dest, src, num) \ + { UInt32 *d = (UInt32 *)dest; const UInt32 *z = (const UInt32 *)src; UInt32 n = num; \ + do { d[0] = z[0]; d[1] = z[1]; d[2] = z[2]; z += 3; d += 3; } while (--n); } + +static void *ShrinkUnits(CPpmd8 *p, void *oldPtr, unsigned oldNU, unsigned newNU) +{ + unsigned i0 = U2I(oldNU); + unsigned i1 = U2I(newNU); + if (i0 == i1) + return oldPtr; + if (p->FreeList[i1] != 0) + { + void *ptr = RemoveNode(p, i1); + MyMem12Cpy(ptr, oldPtr, newNU); + InsertNode(p, oldPtr, i0); + return ptr; + } + SplitBlock(p, oldPtr, i0, i1); + return oldPtr; +} + +static void FreeUnits(CPpmd8 *p, void *ptr, unsigned nu) +{ + InsertNode(p, ptr, U2I(nu)); +} + +static void SpecialFreeUnit(CPpmd8 *p, void *ptr) +{ + if ((Byte *)ptr != p->UnitsStart) + InsertNode(p, ptr, 0); + else + { + #ifdef PPMD8_FREEZE_SUPPORT + *(UInt32 *)ptr = EMPTY_NODE; /* it's used for (Flags == 0xFF) check in RemoveBinContexts */ + #endif + p->UnitsStart += UNIT_SIZE; + } +} + +static void *MoveUnitsUp(CPpmd8 *p, void *oldPtr, unsigned nu) +{ + unsigned indx = U2I(nu); + void *ptr; + if ((Byte *)oldPtr > p->UnitsStart + 16 * 1024 || REF(oldPtr) > p->FreeList[indx]) + return oldPtr; + ptr = RemoveNode(p, indx); + MyMem12Cpy(ptr, oldPtr, nu); + if ((Byte*)oldPtr != p->UnitsStart) + InsertNode(p, oldPtr, indx); + else + p->UnitsStart += U2B(I2U(indx)); + return ptr; +} + +static void ExpandTextArea(CPpmd8 *p) +{ + UInt32 count[PPMD_NUM_INDEXES]; + unsigned i; + memset(count, 0, sizeof(count)); + if (p->LoUnit != p->HiUnit) + ((CPpmd8_Node *)p->LoUnit)->Stamp = 0; + + { + CPpmd8_Node *node = (CPpmd8_Node *)p->UnitsStart; + for (; node->Stamp == EMPTY_NODE; node += node->NU) + { + node->Stamp = 0; + count[U2I(node->NU)]++; + } + p->UnitsStart = (Byte *)node; + } + + for (i = 0; i < PPMD_NUM_INDEXES; i++) + { + CPpmd8_Node_Ref *next = (CPpmd8_Node_Ref *)&p->FreeList[i]; + while (count[i] != 0) + { + CPpmd8_Node *node = NODE(*next); + while (node->Stamp == 0) + { + *next = node->Next; + node = NODE(*next); + p->Stamps[i]--; + if (--count[i] == 0) + break; + } + next = &node->Next; + } + } +} + +#define SUCCESSOR(p) ((CPpmd_Void_Ref)((p)->SuccessorLow | ((UInt32)(p)->SuccessorHigh << 16))) + +static void SetSuccessor(CPpmd_State *p, CPpmd_Void_Ref v) +{ + (p)->SuccessorLow = (UInt16)((UInt32)(v) & 0xFFFF); + (p)->SuccessorHigh = (UInt16)(((UInt32)(v) >> 16) & 0xFFFF); +} + +#define RESET_TEXT(offs) { p->Text = p->Base + p->AlignOffset + (offs); } + +static void RestartModel(CPpmd8 *p) +{ + unsigned i, k, m, r; + + memset(p->FreeList, 0, sizeof(p->FreeList)); + memset(p->Stamps, 0, sizeof(p->Stamps)); + RESET_TEXT(0); + p->HiUnit = p->Text + p->Size; + p->LoUnit = p->UnitsStart = p->HiUnit - p->Size / 8 / UNIT_SIZE * 7 * UNIT_SIZE; + p->GlueCount = 0; + + p->OrderFall = p->MaxOrder; + p->RunLength = p->InitRL = -(Int32)((p->MaxOrder < 12) ? p->MaxOrder : 12) - 1; + p->PrevSuccess = 0; + + p->MinContext = p->MaxContext = (CTX_PTR)(p->HiUnit -= UNIT_SIZE); /* AllocContext(p); */ + p->MinContext->Suffix = 0; + p->MinContext->NumStats = 255; + p->MinContext->Flags = 0; + p->MinContext->SummFreq = 256 + 1; + p->FoundState = (CPpmd_State *)p->LoUnit; /* AllocUnits(p, PPMD_NUM_INDEXES - 1); */ + p->LoUnit += U2B(256 / 2); + p->MinContext->Stats = REF(p->FoundState); + for (i = 0; i < 256; i++) + { + CPpmd_State *s = &p->FoundState[i]; + s->Symbol = (Byte)i; + s->Freq = 1; + SetSuccessor(s, 0); + } + + for (i = m = 0; m < 25; m++) + { + while (p->NS2Indx[i] == m) + i++; + for (k = 0; k < 8; k++) + { + UInt16 val = (UInt16)(PPMD_BIN_SCALE - kInitBinEsc[k] / (i + 1)); + UInt16 *dest = p->BinSumm[m] + k; + for (r = 0; r < 64; r += 8) + dest[r] = val; + } + } + + for (i = m = 0; m < 24; m++) + { + while (p->NS2Indx[i + 3] == m + 3) + i++; + for (k = 0; k < 32; k++) + { + CPpmd_See *s = &p->See[m][k]; + s->Summ = (UInt16)((2 * i + 5) << (s->Shift = PPMD_PERIOD_BITS - 4)); + s->Count = 7; + } + } +} + +void Ppmd8_Init(CPpmd8 *p, unsigned maxOrder, unsigned restoreMethod) +{ + p->MaxOrder = maxOrder; + p->RestoreMethod = restoreMethod; + RestartModel(p); + p->DummySee.Shift = PPMD_PERIOD_BITS; + p->DummySee.Summ = 0; /* unused */ + p->DummySee.Count = 64; /* unused */ +} + +static void Refresh(CPpmd8 *p, CTX_PTR ctx, unsigned oldNU, unsigned scale) +{ + unsigned i = ctx->NumStats, escFreq, sumFreq, flags; + CPpmd_State *s = (CPpmd_State *)ShrinkUnits(p, STATS(ctx), oldNU, (i + 2) >> 1); + ctx->Stats = REF(s); + #ifdef PPMD8_FREEZE_SUPPORT + /* fixed over Shkarin's code. Fixed code is not compatible with original code for some files in FREEZE mode. */ + scale |= (ctx->SummFreq >= ((UInt32)1 << 15)); + #endif + flags = (ctx->Flags & (0x10 + 0x04 * scale)) + 0x08 * (s->Symbol >= 0x40); + escFreq = ctx->SummFreq - s->Freq; + sumFreq = (s->Freq = (Byte)((s->Freq + scale) >> scale)); + do + { + escFreq -= (++s)->Freq; + sumFreq += (s->Freq = (Byte)((s->Freq + scale) >> scale)); + flags |= 0x08 * (s->Symbol >= 0x40); + } + while (--i); + ctx->SummFreq = (UInt16)(sumFreq + ((escFreq + scale) >> scale)); + ctx->Flags = (Byte)flags; +} + +static void SwapStates(CPpmd_State *t1, CPpmd_State *t2) +{ + CPpmd_State tmp = *t1; + *t1 = *t2; + *t2 = tmp; +} + +static CPpmd_Void_Ref CutOff(CPpmd8 *p, CTX_PTR ctx, unsigned order) +{ + int i; + unsigned tmp; + CPpmd_State *s; + + if (!ctx->NumStats) + { + s = ONE_STATE(ctx); + if ((Byte *)Ppmd8_GetPtr(p, SUCCESSOR(s)) >= p->UnitsStart) + { + if (order < p->MaxOrder) + SetSuccessor(s, CutOff(p, CTX(SUCCESSOR(s)), order + 1)); + else + SetSuccessor(s, 0); + if (SUCCESSOR(s) || order <= 9) /* O_BOUND */ + return REF(ctx); + } + SpecialFreeUnit(p, ctx); + return 0; + } + + ctx->Stats = STATS_REF(MoveUnitsUp(p, STATS(ctx), tmp = ((unsigned)ctx->NumStats + 2) >> 1)); + + for (s = STATS(ctx) + (i = ctx->NumStats); s >= STATS(ctx); s--) + if ((Byte *)Ppmd8_GetPtr(p, SUCCESSOR(s)) < p->UnitsStart) + { + CPpmd_State *s2 = STATS(ctx) + (i--); + SetSuccessor(s, 0); + SwapStates(s, s2); + } + else if (order < p->MaxOrder) + SetSuccessor(s, CutOff(p, CTX(SUCCESSOR(s)), order + 1)); + else + SetSuccessor(s, 0); + + if (i != ctx->NumStats && order) + { + ctx->NumStats = (Byte)i; + s = STATS(ctx); + if (i < 0) + { + FreeUnits(p, s, tmp); + SpecialFreeUnit(p, ctx); + return 0; + } + if (i == 0) + { + ctx->Flags = (Byte)((ctx->Flags & 0x10) + 0x08 * (s->Symbol >= 0x40)); + *ONE_STATE(ctx) = *s; + FreeUnits(p, s, tmp); + /* 9.31: the code was fixed. It's was not BUG, if Freq <= MAX_FREQ = 124 */ + ONE_STATE(ctx)->Freq = (Byte)(((unsigned)ONE_STATE(ctx)->Freq + 11) >> 3); + } + else + Refresh(p, ctx, tmp, ctx->SummFreq > 16 * i); + } + return REF(ctx); +} + +#ifdef PPMD8_FREEZE_SUPPORT +static CPpmd_Void_Ref RemoveBinContexts(CPpmd8 *p, CTX_PTR ctx, unsigned order) +{ + CPpmd_State *s; + if (!ctx->NumStats) + { + s = ONE_STATE(ctx); + if ((Byte *)Ppmd8_GetPtr(p, SUCCESSOR(s)) >= p->UnitsStart && order < p->MaxOrder) + SetSuccessor(s, RemoveBinContexts(p, CTX(SUCCESSOR(s)), order + 1)); + else + SetSuccessor(s, 0); + /* Suffix context can be removed already, since different (high-order) + Successors may refer to same context. So we check Flags == 0xFF (Stamp == EMPTY_NODE) */ + if (!SUCCESSOR(s) && (!SUFFIX(ctx)->NumStats || SUFFIX(ctx)->Flags == 0xFF)) + { + FreeUnits(p, ctx, 1); + return 0; + } + else + return REF(ctx); + } + + for (s = STATS(ctx) + ctx->NumStats; s >= STATS(ctx); s--) + if ((Byte *)Ppmd8_GetPtr(p, SUCCESSOR(s)) >= p->UnitsStart && order < p->MaxOrder) + SetSuccessor(s, RemoveBinContexts(p, CTX(SUCCESSOR(s)), order + 1)); + else + SetSuccessor(s, 0); + + return REF(ctx); +} +#endif + +static UInt32 GetUsedMemory(const CPpmd8 *p) +{ + UInt32 v = 0; + unsigned i; + for (i = 0; i < PPMD_NUM_INDEXES; i++) + v += p->Stamps[i] * I2U(i); + return p->Size - (UInt32)(p->HiUnit - p->LoUnit) - (UInt32)(p->UnitsStart - p->Text) - U2B(v); +} + +#ifdef PPMD8_FREEZE_SUPPORT + #define RESTORE_MODEL(c1, fSuccessor) RestoreModel(p, c1, fSuccessor) +#else + #define RESTORE_MODEL(c1, fSuccessor) RestoreModel(p, c1) +#endif + +static void RestoreModel(CPpmd8 *p, CTX_PTR c1 + #ifdef PPMD8_FREEZE_SUPPORT + , CTX_PTR fSuccessor + #endif + ) +{ + CTX_PTR c; + CPpmd_State *s; + RESET_TEXT(0); + for (c = p->MaxContext; c != c1; c = SUFFIX(c)) + if (--(c->NumStats) == 0) + { + s = STATS(c); + c->Flags = (Byte)((c->Flags & 0x10) + 0x08 * (s->Symbol >= 0x40)); + *ONE_STATE(c) = *s; + SpecialFreeUnit(p, s); + ONE_STATE(c)->Freq = (Byte)(((unsigned)ONE_STATE(c)->Freq + 11) >> 3); + } + else + Refresh(p, c, (c->NumStats+3) >> 1, 0); + + for (; c != p->MinContext; c = SUFFIX(c)) + if (!c->NumStats) + ONE_STATE(c)->Freq = (Byte)(ONE_STATE(c)->Freq - (ONE_STATE(c)->Freq >> 1)); + else if ((c->SummFreq += 4) > 128 + 4 * c->NumStats) + Refresh(p, c, (c->NumStats + 2) >> 1, 1); + + #ifdef PPMD8_FREEZE_SUPPORT + if (p->RestoreMethod > PPMD8_RESTORE_METHOD_FREEZE) + { + p->MaxContext = fSuccessor; + p->GlueCount += !(p->Stamps[1] & 1); + } + else if (p->RestoreMethod == PPMD8_RESTORE_METHOD_FREEZE) + { + while (p->MaxContext->Suffix) + p->MaxContext = SUFFIX(p->MaxContext); + RemoveBinContexts(p, p->MaxContext, 0); + p->RestoreMethod++; + p->GlueCount = 0; + p->OrderFall = p->MaxOrder; + } + else + #endif + if (p->RestoreMethod == PPMD8_RESTORE_METHOD_RESTART || GetUsedMemory(p) < (p->Size >> 1)) + RestartModel(p); + else + { + while (p->MaxContext->Suffix) + p->MaxContext = SUFFIX(p->MaxContext); + do + { + CutOff(p, p->MaxContext, 0); + ExpandTextArea(p); + } + while (GetUsedMemory(p) > 3 * (p->Size >> 2)); + p->GlueCount = 0; + p->OrderFall = p->MaxOrder; + } +} + +static CTX_PTR CreateSuccessors(CPpmd8 *p, Bool skip, CPpmd_State *s1, CTX_PTR c) +{ + CPpmd_State upState; + Byte flags; + CPpmd_Byte_Ref upBranch = (CPpmd_Byte_Ref)SUCCESSOR(p->FoundState); + /* fixed over Shkarin's code. Maybe it could work without + 1 too. */ + CPpmd_State *ps[PPMD8_MAX_ORDER + 1]; + unsigned numPs = 0; + + if (!skip) + ps[numPs++] = p->FoundState; + + while (c->Suffix) + { + CPpmd_Void_Ref successor; + CPpmd_State *s; + c = SUFFIX(c); + if (s1) + { + s = s1; + s1 = NULL; + } + else if (c->NumStats != 0) + { + for (s = STATS(c); s->Symbol != p->FoundState->Symbol; s++); + if (s->Freq < MAX_FREQ - 9) + { + s->Freq++; + c->SummFreq++; + } + } + else + { + s = ONE_STATE(c); + s->Freq = (Byte)(s->Freq + (!SUFFIX(c)->NumStats & (s->Freq < 24))); + } + successor = SUCCESSOR(s); + if (successor != upBranch) + { + c = CTX(successor); + if (numPs == 0) + return c; + break; + } + ps[numPs++] = s; + } + + upState.Symbol = *(const Byte *)Ppmd8_GetPtr(p, upBranch); + SetSuccessor(&upState, upBranch + 1); + flags = (Byte)(0x10 * (p->FoundState->Symbol >= 0x40) + 0x08 * (upState.Symbol >= 0x40)); + + if (c->NumStats == 0) + upState.Freq = ONE_STATE(c)->Freq; + else + { + UInt32 cf, s0; + CPpmd_State *s; + for (s = STATS(c); s->Symbol != upState.Symbol; s++); + cf = s->Freq - 1; + s0 = c->SummFreq - c->NumStats - cf; + upState.Freq = (Byte)(1 + ((2 * cf <= s0) ? (5 * cf > s0) : ((cf + 2 * s0 - 3) / s0))); + } + + do + { + /* Create Child */ + CTX_PTR c1; /* = AllocContext(p); */ + if (p->HiUnit != p->LoUnit) + c1 = (CTX_PTR)(p->HiUnit -= UNIT_SIZE); + else if (p->FreeList[0] != 0) + c1 = (CTX_PTR)RemoveNode(p, 0); + else + { + c1 = (CTX_PTR)AllocUnitsRare(p, 0); + if (!c1) + return NULL; + } + c1->NumStats = 0; + c1->Flags = flags; + *ONE_STATE(c1) = upState; + c1->Suffix = REF(c); + SetSuccessor(ps[--numPs], REF(c1)); + c = c1; + } + while (numPs != 0); + + return c; +} + +static CTX_PTR ReduceOrder(CPpmd8 *p, CPpmd_State *s1, CTX_PTR c) +{ + CPpmd_State *s = NULL; + CTX_PTR c1 = c; + CPpmd_Void_Ref upBranch = REF(p->Text); + + #ifdef PPMD8_FREEZE_SUPPORT + /* The BUG in Shkarin's code was fixed: ps could overflow in CUT_OFF mode. */ + CPpmd_State *ps[PPMD8_MAX_ORDER + 1]; + unsigned numPs = 0; + ps[numPs++] = p->FoundState; + #endif + + SetSuccessor(p->FoundState, upBranch); + p->OrderFall++; + + for (;;) + { + if (s1) + { + c = SUFFIX(c); + s = s1; + s1 = NULL; + } + else + { + if (!c->Suffix) + { + #ifdef PPMD8_FREEZE_SUPPORT + if (p->RestoreMethod > PPMD8_RESTORE_METHOD_FREEZE) + { + do { SetSuccessor(ps[--numPs], REF(c)); } while (numPs); + RESET_TEXT(1); + p->OrderFall = 1; + } *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***