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 <b...@freebsd.org>
AuthorDate: 2025-08-27 18:36:12 +0000
Commit:     Muhammad Moinur Rahman <b...@freebsd.org>
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 <REF_BRANCH_TO_BE_IMPORTED>
++# $ 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 <REF_BRANCH_TO_BE_IMPORTED>"
++# $ git tag -a vendor/libucl/<REF_BRANCH_TO_BE_IMPORTED> -m "vendor import 
libucl <REF_BRANCH_TO_BE_IMPORTED>"
++# $ git push --follow-tags freebsd vendor/libucl/<REF_BRANCH_TO_BE_IMPORTED>
++#
++# 2. Test
++#
++# $ cd /usr/src
++# $ git checkout vendor/libucl/<REF_BRANCH_TO_BE_IMPORTED>
++# $ ./autogen.sh
++# $ ./configure
++# $ gmake
++# $ gmake check
++# $ gmake clean
++#
++# 3. Merge vendor tree
++#
++# $ git subtree merge -P contrib/libucl 
vendor/libucl/<REF_BRANCH_TO_BE_IMPORTED>
++# $ 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)                                                  
                 \

Reply via email to