From nobody Wed Aug 27 18:37:27 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4cBtYh1yBmz65Rg7; Wed, 27 Aug 2025 18:37:28 +0000 (UTC) (envelope-from git@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) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R12" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4cBtYh08QGz3wMc; Wed, 27 Aug 2025 18:37:28 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1756319848; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=27cAmi3m/4+qm/ox2HktdTLJVhD/PP8jOVSIFLCzOtE=; b=j32mWWpoxxUhzCDIDzL6u9tSjmNjZanJo3sr5gATOWPTsSJqb95qt2LALlc/pQn9KWqcdz pb4xS29kCQGXalnmK+9cWZFe7Lg50IOYZFk7BdprFXdq59gmFJnp+143Vu/If1PbzHFX3A 7rH5GI4J6MFl7fzR6RKqNZh2yALd6ZqULUqCjrZW12krbXyBTZDQNAlgl+D1v7YXTBVzWy hXX4n/no7mvsSZiA6PqH7KxpTk2jiDvshbsFKVLzLYAEv5PZCKGuKI0Spv3CvFRcBCCJX0 0JBnEeQXa6SArFEXhhufZfraeEsRFQ2XT52491A3fNwGQ76sNxvmz+PMBg97Ug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1756319848; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=27cAmi3m/4+qm/ox2HktdTLJVhD/PP8jOVSIFLCzOtE=; b=nAak8spoyVeBEXy8Gicdgs8U2D07UJ6IabnjX6ejK2MPtxX9sJcBzDpoGkbiwYrLKuHgQU h1MZIxiIFr5aSw+ON2ccMJIsdAg3UdGuFu+rQJ4REkOzARgW3CzE2CAnZIN6j3Hmhmsi37 Fea7iNiWpgqXoK96C94BDNvZ8HaKMWz2IBeawOFq08VfpKVeaZK6mWgMV28SNv04p+67IQ KtTOhXdJm8PqytVXNA4Q3VEeP1KXPNuu2dTm4hayZgL8cDj/CjQoIUlMXsSf7FBFe+1wgt NBAX+47HzvTou0uKh75RYkB1T6RAsyWsoJ0wn5WsnUrqQ5ZP+Js+lQUCS2q9Kw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1756319848; a=rsa-sha256; cv=none; b=E2N4k3uBCIsDZvWkVZMRn0cJrYT5Qb92cJtMk9XUKeUCbtfwI5+N6yplh4K/g9Wq9mwkUm KjIyXZhyDRKvBS1zxHDbpf2bfqVgCHw0Xdx+U2Ny7LDkJ6JoyiuzD4raS0Te2HIo8gTvjP A9aDFdC5yE3hEvLVWTIZlG84+4Ge7dIpt+3vggR+y+QrzWEiqGU9v1q2QKR/GEeRqbUJY/ rBd4TSMyqAl/wjJixJoBk2p/TKzbMnA41G1PUVCWjlwcSb2PDGbt+bnfbLYNNdA99qxlXo iEPOn7u0tLHtUNgZ7SY1nGwfhuayY/1eKkZZCB+U8Y6N9ov6VEeAx0qnntWj0g== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4cBtYg6pVxzbNc; Wed, 27 Aug 2025 18:37:27 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 57RIbRwQ048824; Wed, 27 Aug 2025 18:37:27 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 57RIbRxs048820; Wed, 27 Aug 2025 18:37:27 GMT (envelope-from git) Date: Wed, 27 Aug 2025 18:37:27 GMT Message-Id: <202508271837.57RIbRxs048820@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Muhammad Moinur Rahman Subject: git: 2326db40a1d2 - main - MFV: libucl: Update to 0.9.2 List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bofh X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 2326db40a1d2dd98631d70aae200ca52575139fb Auto-Submitted: auto-generated The branch main has been updated by bofh: URL: https://cgit.FreeBSD.org/src/commit/?id=2326db40a1d2dd98631d70aae200ca52575139fb commit 2326db40a1d2dd98631d70aae200ca52575139fb Merge: e0bc44b5898a 1e2f270469c6 Author: Muhammad Moinur Rahman AuthorDate: 2025-08-27 18:36:12 +0000 Commit: Muhammad Moinur Rahman CommitDate: 2025-08-27 18:36:57 +0000 MFV: libucl: Update to 0.9.2 - Add FREEBSD-upgrade instructions - Add FREEBSD-Xlist file - Remove all unnecessary files which are not required for in-tree build Approved by: bapt Differential Revision: https://reviews.freebsd.org/D50472 Event: Oslo Hackathon 202508 Sponsored by: The FreeBSD Foundation contrib/libucl/CMakeLists.txt | 314 ----------- contrib/libucl/ChangeLog.md | 103 ---- contrib/libucl/FREEBSD-Xlist | 40 ++ contrib/libucl/FREEBSD-upgrade | 39 ++ contrib/libucl/Makefile.am | 81 --- contrib/libucl/Makefile.unix | 89 --- contrib/libucl/Makefile.w32 | 92 --- contrib/libucl/README.md | 418 -------------- contrib/libucl/autogen.sh | 2 - contrib/libucl/configure.ac | 188 ------- contrib/libucl/doc/Makefile.am | 9 - contrib/libucl/doc/api.md | 506 ----------------- contrib/libucl/doc/lua_api.md | 196 ------- contrib/libucl/doc/pandoc.template | 12 - contrib/libucl/examples/ucl_cpp.cc | 26 - contrib/libucl/haskell/hucl.hs | 123 ---- contrib/libucl/include/ucl.h | 4 +- contrib/libucl/libucl.pc | 11 - contrib/libucl/libucl.pc.in | 11 - contrib/libucl/lua/Makefile.am | 26 - contrib/libucl/lua/libucl.rockspec.in | 26 - contrib/libucl/lua/lua_ucl.c | 83 ++- contrib/libucl/m4/ax_lua.m4 | 664 ---------------------- contrib/libucl/m4/gcov.m4 | 89 --- contrib/libucl/python/MANIFEST.in | 5 - contrib/libucl/python/setup.py | 75 --- contrib/libucl/python/src/uclmodule.c | 335 ----------- contrib/libucl/python/tests/__init__.py | 0 contrib/libucl/python/tests/compat.py | 8 - contrib/libucl/python/tests/test_dump.py | 66 --- contrib/libucl/python/tests/test_example.py | 59 -- contrib/libucl/python/tests/test_load.py | 122 ---- contrib/libucl/python/tests/test_validation.py | 50 -- contrib/libucl/python/ucl.pyi | 15 - contrib/libucl/src/Makefile.am | 30 - contrib/libucl/src/mum.h | 2 - contrib/libucl/src/ucl_emitter.c | 80 ++- contrib/libucl/src/ucl_emitter_streamline.c | 9 +- contrib/libucl/src/ucl_hash.c | 146 +++-- contrib/libucl/src/ucl_msgpack.c | 4 +- contrib/libucl/src/ucl_parser.c | 214 +++++-- contrib/libucl/src/ucl_schema.c | 1 + contrib/libucl/src/ucl_util.c | 87 +-- contrib/libucl/stamp-h.in | 1 - contrib/libucl/tests/.gitignore | 10 + contrib/libucl/tests/Makefile.am | 45 -- contrib/libucl/tests/schema/definitions.json | 32 -- contrib/libucl/tests/schema/ref.json | 16 - contrib/libucl/tests/schema/refRemote.json | 76 --- contrib/libucl/tests/test_speed.c | 2 +- contrib/libucl/tests/test_streamline.c | 43 +- contrib/libucl/uthash/utlist.h | 749 ++++++++++++++++++------- contrib/libucl/utils/CMakeLists.txt | 12 - contrib/libucl/utils/Makefile.am | 23 - contrib/libucl/utils/chargen.c | 128 ----- contrib/libucl/utils/objdump.c | 185 ------ contrib/libucl/utils/ucl-tool.c | 170 ------ 57 files changed, 1072 insertions(+), 4880 deletions(-) diff --cc contrib/libucl/FREEBSD-Xlist index 000000000000,000000000000..6d8cb4ff8f5b new file mode 100644 --- /dev/null +++ b/contrib/libucl/FREEBSD-Xlist @@@ -1,0 -1,0 +1,40 @@@ ++.github ++.gitignore ++CMakeLists.txt ++ChangeLog.md ++Makefile.am ++Makefile.unix ++Makefile.w32 ++README.md ++autogen.sh ++configure.ac ++doc/Makefile.am ++doc/api.md ++doc/lua_api.md ++doc/pandoc.template ++examples/ucl_cpp.cc ++haskell/hucl.hs ++libucl.pc.in ++lua/Makefile.am ++lua/libucl.rockspec.in ++m4/.gitignore ++m4/ax_lua.m4 ++m4/gcov.m4 ++python/MANIFEST.in ++python/setup.py ++python/src/uclmodule.c ++python/tests/__init__.py ++python/tests/compat.py ++python/tests/test_dump.py ++python/tests/test_example.py ++python/tests/test_load.py ++python/tests/test_validation.py ++python/ucl.pyi ++src/Makefile.am ++stamp-h.in ++tests/Makefile.am ++utils/CMakeLists.txt ++utils/Makefile.am ++utils/chargen.c ++utils/objdump.c ++utils/ucl-tool.c diff --cc contrib/libucl/FREEBSD-upgrade index 000000000000,000000000000..b80736d7877b new file mode 100644 --- /dev/null +++ b/contrib/libucl/FREEBSD-upgrade @@@ -1,0 -1,0 +1,39 @@@ ++# FreeBSD libucl import instruction ++# ++# At least the following ports are required when importing libucl: ++# - devel/autoconf ++# - devel/automake ++# - devel/git ++# - devel/gmake ++# - devel/libtool ++# ++# 1. Vendor import ++# ++# $ git clone https://github.com/vstakhov/libucl.git /tmp/libucl ++# $ cd /tmp/libucl ++# $ git checkout ++# $ cd /usr/src ++# $ git checkout vendor/libucl ++# $ rsync -va --delete --exclude=.git /tmp/libucl/ /usr/src/contrib/libucl/ ++# $ git add . ++# $ git commit -m "vendor import libucl " ++# $ git tag -a vendor/libucl/ -m "vendor import libucl " ++# $ git push --follow-tags freebsd vendor/libucl/ ++# ++# 2. Test ++# ++# $ cd /usr/src ++# $ git checkout vendor/libucl/ ++# $ ./autogen.sh ++# $ ./configure ++# $ gmake ++# $ gmake check ++# $ gmake clean ++# ++# 3. Merge vendor tree ++# ++# $ git subtree merge -P contrib/libucl vendor/libucl/ ++# $ sh -c 'for F in `cat FREEBSD-Xlist | grep -v FreeBSD`; do rm -rf ./$F ; done' ++# ++# Recheck if there were any new files were added which are not necessary in the ++# contrib tree. If so, remove them and also add them to the FREEBSD-Xlist file. diff --cc contrib/libucl/src/ucl_msgpack.c index 08e690a4728a,3335e39cd9e7..628ed2be993d --- a/contrib/libucl/src/ucl_msgpack.c +++ b/contrib/libucl/src/ucl_msgpack.c @@@ -1246,8 -1246,8 +1246,8 @@@ ucl_msgpack_consume (struct ucl_parser /* Empty container at the end */ if (len != 0) { ucl_create_err (&parser->err, -- "invalid non-empty container at the end; len=%zu", - (size_t)len); ++ "invalid non-empty container at the end; len=%ju", + (uintmax_t)len); return false; } diff --cc contrib/libucl/tests/.gitignore index 000000000000,464482434f22..464482434f22 mode 000000,100644..100644 --- a/contrib/libucl/tests/.gitignore +++ b/contrib/libucl/tests/.gitignore diff --cc contrib/libucl/uthash/utlist.h index c82dd916e2ed,08fc59ae6bef..7cda1ca0ecac --- a/contrib/libucl/uthash/utlist.h +++ b/contrib/libucl/uthash/utlist.h @@@ -126,35 -132,35 +132,35 @@@ do _ls_psize = 0; \ for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \ _ls_psize++; \ - _SV(_ls_q,list); _ls_q = _NEXT(_ls_q,list,next); _RS(list); \ - UTLIST_SV(_ls_q,list); _ls_q = UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); \ ++ UTLIST_SV(_ls_q,list); _ls_q = UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); \ if (!_ls_q) break; \ } \ _ls_qsize = _ls_insize; \ while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \ if (_ls_psize == 0) { \ - _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \ - _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \ - _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \ - UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \ ++ _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \ ++ UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \ } else if (_ls_qsize == 0 || !_ls_q) { \ - _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \ - _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \ - _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \ - UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \ ++ _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \ ++ UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \ } else if (cmp(_ls_p,_ls_q) <= 0) { \ - _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \ - _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \ - _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \ - UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \ ++ _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \ ++ UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \ } else { \ - _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \ - _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \ - _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \ - UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \ ++ _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \ ++ UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \ } \ if (_ls_tail) { \ - _SV(_ls_tail,list); _NEXTASGN(_ls_tail,list,_ls_e,next); _RS(list); \ - UTLIST_SV(_ls_tail,list); UTLIST_NEXTASGN(_ls_tail,list,_ls_e,next); UTLIST_RS(list); \ ++ UTLIST_SV(_ls_tail,list); UTLIST_NEXTASGN(_ls_tail,list,_ls_e,next); UTLIST_RS(list); \ } else { \ - _CASTASGN(list,_ls_e); \ - UTLIST_CASTASGN(list,_ls_e); \ ++ UTLIST_CASTASGN(list,_ls_e); \ } \ _ls_tail = _ls_e; \ } \ _ls_p = _ls_q; \ } \ if (_ls_tail) { \ - _SV(_ls_tail,list); _NEXTASGN(_ls_tail,list,NULL,next); _RS(list); \ - UTLIST_SV(_ls_tail,list); UTLIST_NEXTASGN(_ls_tail,list,NULL,next); UTLIST_RS(list); \ ++ UTLIST_SV(_ls_tail,list); UTLIST_NEXTASGN(_ls_tail,list,NULL,next); UTLIST_RS(list); \ } \ if (_ls_nmerges <= 1) { \ _ls_looping=0; \ @@@ -189,30 -196,30 +196,30 @@@ do _ls_psize = 0; \ for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \ _ls_psize++; \ - _SV(_ls_q,list); _ls_q = _NEXT(_ls_q,list,next); _RS(list); \ - UTLIST_SV(_ls_q,list); _ls_q = UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); \ ++ UTLIST_SV(_ls_q,list); _ls_q = UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); \ if (!_ls_q) break; \ } \ _ls_qsize = _ls_insize; \ - while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \ - while ((_ls_psize > 0) || ((_ls_qsize > 0) && _ls_q)) { \ ++ while ((_ls_psize > 0) || ((_ls_qsize > 0) && _ls_q)) { \ if (_ls_psize == 0) { \ - _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \ - _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \ - } else if (_ls_qsize == 0 || !_ls_q) { \ - _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \ - _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \ - _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \ - UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \ - } else if ((_ls_qsize == 0) || (!_ls_q)) { \ - _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \ - UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \ ++ _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \ ++ UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \ ++ } else if ((_ls_qsize == 0) || (!_ls_q)) { \ ++ _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \ ++ UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \ } else if (cmp(_ls_p,_ls_q) <= 0) { \ - _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \ - _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \ - _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \ - UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \ ++ _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \ ++ UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \ } else { \ - _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \ - _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \ - _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \ - UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \ ++ _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \ ++ UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \ } \ if (_ls_tail) { \ - _SV(_ls_tail,list); _NEXTASGN(_ls_tail,list,_ls_e,next); _RS(list); \ - UTLIST_SV(_ls_tail,list); UTLIST_NEXTASGN(_ls_tail,list,_ls_e,next); UTLIST_RS(list); \ ++ UTLIST_SV(_ls_tail,list); UTLIST_NEXTASGN(_ls_tail,list,_ls_e,next); UTLIST_RS(list); \ } else { \ - _CASTASGN(list,_ls_e); \ - UTLIST_CASTASGN(list,_ls_e); \ ++ UTLIST_CASTASGN(list,_ls_e); \ } \ - _SV(_ls_e,list); _PREVASGN(_ls_e,list,_ls_tail,prev); _RS(list); \ - UTLIST_SV(_ls_e,list); UTLIST_PREVASGN(_ls_e,list,_ls_tail,prev); UTLIST_RS(list); \ ++ UTLIST_SV(_ls_e,list); UTLIST_PREVASGN(_ls_e,list,_ls_tail,prev); UTLIST_RS(list); \ _ls_tail = _ls_e; \ } \ _ls_p = _ls_q; \ @@@ -254,40 -261,40 +261,40 @@@ do _ls_psize = 0; \ for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \ _ls_psize++; \ - _SV(_ls_q,list); \ - if (_NEXT(_ls_q,list,next) == _ls_oldhead) { \ - UTLIST_SV(_ls_q,list); \ - if (UTLIST_NEXT(_ls_q,list,next) == _ls_oldhead) { \ ++ UTLIST_SV(_ls_q,list); \ ++ if (UTLIST_NEXT(_ls_q,list,next) == _ls_oldhead) { \ _ls_q = NULL; \ } else { \ - _ls_q = _NEXT(_ls_q,list,next); \ - _ls_q = UTLIST_NEXT(_ls_q,list,next); \ ++ _ls_q = UTLIST_NEXT(_ls_q,list,next); \ } \ - _RS(list); \ - UTLIST_RS(list); \ ++ UTLIST_RS(list); \ if (!_ls_q) break; \ } \ _ls_qsize = _ls_insize; \ while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \ if (_ls_psize == 0) { \ - _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \ - _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \ - _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \ - UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \ ++ _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \ ++ UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \ if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \ } else if (_ls_qsize == 0 || !_ls_q) { \ - _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \ - _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \ - _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \ - UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \ ++ _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \ ++ UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \ if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \ } else if (cmp(_ls_p,_ls_q) <= 0) { \ - _ls_e = _ls_p; _SV(_ls_p,list); _ls_p = \ - _NEXT(_ls_p,list,next); _RS(list); _ls_psize--; \ - _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \ - UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \ ++ _ls_e = _ls_p; UTLIST_SV(_ls_p,list); _ls_p = \ ++ UTLIST_NEXT(_ls_p,list,next); UTLIST_RS(list); _ls_psize--; \ if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \ } else { \ - _ls_e = _ls_q; _SV(_ls_q,list); _ls_q = \ - _NEXT(_ls_q,list,next); _RS(list); _ls_qsize--; \ - _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \ - UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \ ++ _ls_e = _ls_q; UTLIST_SV(_ls_q,list); _ls_q = \ ++ UTLIST_NEXT(_ls_q,list,next); UTLIST_RS(list); _ls_qsize--; \ if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \ } \ if (_ls_tail) { \ - _SV(_ls_tail,list); _NEXTASGN(_ls_tail,list,_ls_e,next); _RS(list); \ - UTLIST_SV(_ls_tail,list); UTLIST_NEXTASGN(_ls_tail,list,_ls_e,next); UTLIST_RS(list); \ ++ UTLIST_SV(_ls_tail,list); UTLIST_NEXTASGN(_ls_tail,list,_ls_e,next); UTLIST_RS(list); \ } else { \ - _CASTASGN(list,_ls_e); \ - UTLIST_CASTASGN(list,_ls_e); \ ++ UTLIST_CASTASGN(list,_ls_e); \ } \ - _SV(_ls_e,list); _PREVASGN(_ls_e,list,_ls_tail,prev); _RS(list); \ - UTLIST_SV(_ls_e,list); UTLIST_PREVASGN(_ls_e,list,_ls_tail,prev); UTLIST_RS(list); \ ++ UTLIST_SV(_ls_e,list); UTLIST_PREVASGN(_ls_e,list,_ls_tail,prev); UTLIST_RS(list); \ _ls_tail = _ls_e; \ } \ _ls_p = _ls_q; \ @@@ -365,27 -368,28 +368,28 @@@ do } \ } while (0) - /* Here are VS2008 replacements for LL_APPEND and LL_DELETE */ - #define LL_APPEND_VS2008(head,add) \ - LL_APPEND2_VS2008(head,add,next) + #define LL_LOWER_BOUND(head,elt,like,cmp) \ + LL_LOWER_BOUND2(head,elt,like,cmp,next) - #define LL_APPEND2_VS2008(head,add,next) \ - do { \ - if (head) { \ - (add)->next = head; /* use add->next as a temp variable */ \ - while ((add)->next->next) { (add)->next = (add)->next->next; } \ - (add)->next->next=(add); \ - } else { \ - (head)=(add); \ - } \ - (add)->next=NULL; \ - } while (0) + #define LL_LOWER_BOUND2(head,elt,like,cmp,next) \ + do { \ + if ((head) == NULL || (cmp(head, like)) >= 0) { \ + (elt) = NULL; \ + } else { \ + for ((elt) = (head); (elt)->next != NULL; (elt) = (elt)->next) { \ - if (cmp((elt)->next, like) >= 0) { \ - break; \ - } \ ++ if (cmp((elt)->next, like) >= 0) { \ ++ break; \ ++ } \ + } \ + } \ + } while (0) - #define LL_DELETE_VS2008(head,del) \ - LL_DELETE2_VS2008(head,del,next) + #define LL_DELETE(head,del) \ + LL_DELETE2(head,del,next) - #define LL_DELETE2_VS2008(head,del,next) \ + #define LL_DELETE2(head,del,next) \ do { \ + LDECLTYPE(head) _tmp; \ if ((head) == (del)) { \ (head)=(head)->next; \ } else { \ @@@ -477,26 -464,158 +464,158 @@@ do } \ } while (0) + #define LL_REPLACE_ELEM(head, el, add) \ + LL_REPLACE_ELEM2(head, el, add, next) + + #define LL_PREPEND_ELEM2(head, el, add, next) \ + do { \ + if (el) { \ + LDECLTYPE(head) _tmp; \ + assert((head) != NULL); \ + assert((add) != NULL); \ + (add)->next = (el); \ + if ((head) == (el)) { \ + (head) = (add); \ + } else { \ + _tmp = (head); \ + while (_tmp->next && (_tmp->next != (el))) { \ + _tmp = _tmp->next; \ + } \ + if (_tmp->next) { \ + _tmp->next = (add); \ + } \ + } \ + } else { \ + LL_APPEND2(head, add, next); \ + } \ + } while (0) \ + #define LL_PREPEND_ELEM(head, el, add) \ + LL_PREPEND_ELEM2(head, el, add, next) + + #define LL_APPEND_ELEM2(head, el, add, next) \ do { \ - LDECLTYPE(head) _tmp; \ - assert(head != NULL); \ - assert(el != NULL); \ - assert(add != NULL); \ - (add)->next = (el); \ - if ((head) == (el)) { \ - (head) = (add); \ + if (el) { \ + assert((head) != NULL); \ + assert((add) != NULL); \ + (add)->next = (el)->next; \ + (el)->next = (add); \ } else { \ - _tmp = head; \ - while (_tmp->next && (_tmp->next != (el))) { \ - _tmp = _tmp->next; \ + LL_PREPEND2(head, add, next); \ + } \ + } while (0) \ + + #define LL_APPEND_ELEM(head, el, add) \ + LL_APPEND_ELEM2(head, el, add, next) + + #ifdef NO_DECLTYPE + /* Here are VS2008 / NO_DECLTYPE replacements for a few functions */ + + #undef LL_CONCAT2 + #define LL_CONCAT2(head1,head2,next) \ + do { \ + char *_tmp; \ + if (head1) { \ + _tmp = (char*)(head1); \ + while ((head1)->next) { (head1) = (head1)->next; } \ + (head1)->next = (head2); \ + UTLIST_RS(head1); \ + } else { \ + (head1)=(head2); \ } \ - if (_tmp->next) { \ - _tmp->next = (add); \ + } while (0) + + #undef LL_APPEND2 + #define LL_APPEND2(head,add,next) \ + do { \ + if (head) { \ + (add)->next = head; /* use add->next as a temp variable */ \ + while ((add)->next->next) { (add)->next = (add)->next->next; } \ + (add)->next->next=(add); \ + } else { \ + (head)=(add); \ + } \ + (add)->next=NULL; \ + } while (0) + + #undef LL_INSERT_INORDER2 + #define LL_INSERT_INORDER2(head,add,cmp,next) \ + do { \ + if ((head) == NULL || (cmp(head, add)) >= 0) { \ + (add)->next = (head); \ + (head) = (add); \ + } else { \ + char *_tmp = (char*)(head); \ + while ((head)->next != NULL && (cmp((head)->next, add)) < 0) { \ + (head) = (head)->next; \ + } \ + (add)->next = (head)->next; \ + (head)->next = (add); \ + UTLIST_RS(head); \ + } \ + } while (0) + + #undef LL_DELETE2 + #define LL_DELETE2(head,del,next) \ + do { \ + if ((head) == (del)) { \ + (head)=(head)->next; \ + } else { \ + char *_tmp = (char*)(head); \ + while ((head)->next && ((head)->next != (del))) { \ + (head) = (head)->next; \ + } \ + if ((head)->next) { \ + (head)->next = ((del)->next); \ + } \ + UTLIST_RS(head); \ + } \ + } while (0) + + #undef LL_REPLACE_ELEM2 + #define LL_REPLACE_ELEM2(head, el, add, next) \ + do { \ + assert((head) != NULL); \ + assert((el) != NULL); \ + assert((add) != NULL); \ + if ((head) == (el)) { \ + (head) = (add); \ + } else { \ + (add)->next = head; \ + while ((add)->next->next && ((add)->next->next != (el))) { \ + (add)->next = (add)->next->next; \ + } \ + if ((add)->next->next) { \ + (add)->next->next = (add); \ + } \ + } \ + (add)->next = (el)->next; \ + } while (0) + + #undef LL_PREPEND_ELEM2 + #define LL_PREPEND_ELEM2(head, el, add, next) \ + do { \ + if (el) { \ + assert((head) != NULL); \ + assert((add) != NULL); \ + if ((head) == (el)) { \ + (head) = (add); \ + } else { \ + (add)->next = (head); \ + while ((add)->next->next && ((add)->next->next != (el))) { \ - (add)->next = (add)->next->next; \ ++ (add)->next = (add)->next->next; \ + } \ + if ((add)->next->next) { \ - (add)->next->next = (add); \ ++ (add)->next->next = (add); \ + } \ + } \ + (add)->next = (el); \ + } else { \ + LL_APPEND2(head, add, next); \ } \ - } \ } while (0) \ + #endif /* NO_DECLTYPE */ /****************************************************************************** * doubly linked list macros (non-circular) * @@@ -531,7 -650,39 +650,39 @@@ do (head)->prev = (head); \ (head)->next = NULL; \ } \ - } while (0) + } while (0) + + #define DL_INSERT_INORDER(head,add,cmp) \ + DL_INSERT_INORDER2(head,add,cmp,prev,next) + + #define DL_INSERT_INORDER2(head,add,cmp,prev,next) \ + do { \ + LDECLTYPE(head) _tmp; \ + if (head) { \ + DL_LOWER_BOUND2(head, _tmp, add, cmp, next); \ + DL_APPEND_ELEM2(head, _tmp, add, prev, next); \ + } else { \ + (head) = (add); \ + (head)->prev = (head); \ + (head)->next = NULL; \ + } \ + } while (0) + + #define DL_LOWER_BOUND(head,elt,like,cmp) \ + DL_LOWER_BOUND2(head,elt,like,cmp,next) + + #define DL_LOWER_BOUND2(head,elt,like,cmp,next) \ + do { \ + if ((head) == NULL || (cmp(head, like)) >= 0) { \ + (elt) = NULL; \ + } else { \ + for ((elt) = (head); (elt)->next != NULL; (elt) = (elt)->next) { \ + if ((cmp((elt)->next, like)) >= 0) { \ - break; \ ++ break; \ + } \ + } \ + } \ + } while (0) #define DL_CONCAT(head1,head2) \ DL_CONCAT2(head1,head2,prev,next) @@@ -541,10 -692,10 +692,10 @@@ do LDECLTYPE(head1) _tmp; \ if (head2) { \ if (head1) { \ - _tmp = (head2)->prev; \ - UTLIST_CASTASGN(_tmp, (head2)->prev); \ ++ UTLIST_CASTASGN(_tmp, (head2)->prev); \ (head2)->prev = (head1)->prev; \ (head1)->prev->next = (head2); \ - (head1)->prev = _tmp; \ - UTLIST_CASTASGN((head1)->prev, _tmp); \ ++ UTLIST_CASTASGN((head1)->prev, _tmp); \ } else { \ (head1)=(head2); \ } \ @@@ -659,7 -891,39 +891,39 @@@ do (add)->prev = (add); \ (add)->next = (add); \ } \ - (head)=(add); \ + (head) = (add); \ + } while (0) + + #define CDL_INSERT_INORDER(head,add,cmp) \ + CDL_INSERT_INORDER2(head,add,cmp,prev,next) + + #define CDL_INSERT_INORDER2(head,add,cmp,prev,next) \ + do { \ + LDECLTYPE(head) _tmp; \ + if (head) { \ + CDL_LOWER_BOUND2(head, _tmp, add, cmp, next); \ + CDL_APPEND_ELEM2(head, _tmp, add, prev, next); \ + } else { \ + (head) = (add); \ + (head)->next = (head); \ + (head)->prev = (head); \ + } \ + } while (0) + + #define CDL_LOWER_BOUND(head,elt,like,cmp) \ + CDL_LOWER_BOUND2(head,elt,like,cmp,next) + + #define CDL_LOWER_BOUND2(head,elt,like,cmp,next) \ + do { \ + if ((head) == NULL || (cmp(head, like)) >= 0) { \ + (elt) = NULL; \ + } else { \ + for ((elt) = (head); (elt)->next != (head); (elt) = (elt)->next) { \ + if ((cmp((elt)->next, like)) >= 0) { \ - break; \ ++ break; \ + } \ + } \ + } \ } while (0) #define CDL_DELETE(head,del) \