This is an automated email from the ASF dual-hosted git repository. tuhaihe pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/cloudberry.git
commit 23769dceb723b31c7fdf0c141ce3e2cc5af7da2b Author: Dianjin Wang <[email protected]> AuthorDate: Wed Sep 30 11:01:11 2026 +0800 Replace pg_cron's bitstring.h with the BSD-3 version pg_cron's bitstring.h carries the pre-4.4BSD form of the University of California license, which asks that documentation and advertising materials acknowledge UC Berkeley. Replace it with FreeBSD's sys/sys/bitstring.h from stable/10, the same Berkeley code after UC Berkeley deleted the advertising clause (FreeBSD commit 82c6e8799148). That leaves it under the plain 3-clause BSD license, which RAT recognizes, so drop its exclude. The macros pg_cron uses (bit_decl, bit_set, bit_test, bit_nset and bit_nclear) behave the same; the multi-statement ones are now wrapped in do { } while (0). Assisted-by: Claude Code --- pom.xml | 1 - src/include/task/bitstring.h | 154 +++++++++++++++++++++++++------------------ 2 files changed, 89 insertions(+), 66 deletions(-) diff --git a/pom.xml b/pom.xml index f5d0fb99fd9..24c454747ac 100644 --- a/pom.xml +++ b/pom.xml @@ -1441,7 +1441,6 @@ code or new licensing patterns. <!-- The following files are from pg_cron under PostgreSQL license, introduced by Cloudberry. --> - <exclude>src/include/task/bitstring.h</exclude> <exclude>src/include/task/cron.h</exclude> <exclude>src/include/task/pg_cron.h</exclude> <exclude>src/include/task/task_states.h</exclude> diff --git a/src/include/task/bitstring.h b/src/include/task/bitstring.h index 8a700662baa..125ef51d889 100644 --- a/src/include/task/bitstring.h +++ b/src/include/task/bitstring.h @@ -1,66 +1,80 @@ -/* - * Copyright (c) 1989 The Regents of the University of California. - * All rights reserved. +/*- + * Copyright (c) 1989, 1993 + * The Regents of the University of California. All rights reserved. * * This code is derived from software contributed to Berkeley by * Paul Vixie. * - * Redistribution and use in source and binary forms are permitted - * provided that the above copyright notice and this paragraph are - * duplicated in all such forms and that any documentation, - * advertising materials, and other materials related to such - * distribution and use acknowledge that the software was developed - * by the University of California, Berkeley. The name of the - * University may not be used to endorse or promote products derived - * from this software without specific prior written permission. - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. * - * @(#)bitstring.h 5.2 (Berkeley) 4/4/90 + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ */ +#ifndef _SYS_BITSTRING_H_ +#define _SYS_BITSTRING_H_ + typedef unsigned char bitstr_t; /* internal macros */ -/* byte of the bitstring bit is in */ + /* byte of the bitstring bit is in */ #define _bit_byte(bit) \ ((bit) >> 3) -/* mask for the bit within its byte */ + /* mask for the bit within its byte */ #define _bit_mask(bit) \ (1 << ((bit)&0x7)) /* external macros */ -/* bytes in a bitstring of nbits bits */ + /* bytes in a bitstring of nbits bits */ #define bitstr_size(nbits) \ - ((((nbits) - 1) >> 3) + 1) + (((nbits) + 7) >> 3) -/* allocate a bitstring */ + /* allocate a bitstring */ #define bit_alloc(nbits) \ - (bitstr_t *)malloc(1, \ - (unsigned int)bitstr_size(nbits) * sizeof(bitstr_t)) + (bitstr_t *)calloc((size_t)bitstr_size(nbits), sizeof(bitstr_t)) -/* allocate a bitstring on the stack */ + /* allocate a bitstring on the stack */ #define bit_decl(name, nbits) \ - (name)[bitstr_size(nbits)] + ((name)[bitstr_size(nbits)]) -/* is bit N of bitstring name set? */ + /* is bit N of bitstring name set? */ #define bit_test(name, bit) \ ((name)[_bit_byte(bit)] & _bit_mask(bit)) -/* set bit N of bitstring name */ + /* set bit N of bitstring name */ #define bit_set(name, bit) \ - (name)[_bit_byte(bit)] |= _bit_mask(bit) + ((name)[_bit_byte(bit)] |= _bit_mask(bit)) -/* clear bit N of bitstring name */ + /* clear bit N of bitstring name */ #define bit_clear(name, bit) \ - (name)[_bit_byte(bit)] &= ~_bit_mask(bit) + ((name)[_bit_byte(bit)] &= ~_bit_mask(bit)) -/* clear bits start ... stop in bitstring */ -#define bit_nclear(name, start, stop) { \ - register bitstr_t *_name = name; \ - register int _start = start, _stop = stop; \ + /* clear bits start ... stop in bitstring */ +#define bit_nclear(name, start, stop) do { \ + register bitstr_t *_name = (name); \ + register int _start = (start), _stop = (stop); \ register int _startbyte = _bit_byte(_start); \ register int _stopbyte = _bit_byte(_stop); \ if (_startbyte == _stopbyte) { \ @@ -72,12 +86,12 @@ typedef unsigned char bitstr_t; _name[_startbyte] = 0; \ _name[_stopbyte] &= 0xff << ((_stop&0x7) + 1); \ } \ -} +} while (0) -/* set bits start ... stop in bitstring */ -#define bit_nset(name, start, stop) { \ - register bitstr_t *_name = name; \ - register int _start = start, _stop = stop; \ + /* set bits start ... stop in bitstring */ +#define bit_nset(name, start, stop) do { \ + register bitstr_t *_name = (name); \ + register int _start = (start), _stop = (stop); \ register int _startbyte = _bit_byte(_start); \ register int _stopbyte = _bit_byte(_stop); \ if (_startbyte == _stopbyte) { \ @@ -89,34 +103,44 @@ typedef unsigned char bitstr_t; _name[_startbyte] = 0xff; \ _name[_stopbyte] |= 0xff >> (7 - (_stop&0x7)); \ } \ -} +} while (0) -/* find first bit clear in name */ -#define bit_ffc(name, nbits, value) { \ - register bitstr_t *_name = name; \ - register int _byte, _nbits = nbits; \ - register int _stopbyte = _bit_byte(_nbits), _value = -1; \ - for (_byte = 0; _byte <= _stopbyte; ++_byte) \ - if (_name[_byte] != 0xff) { \ - _value = _byte << 3; \ - for (_stopbyte = _name[_byte]; (_stopbyte&0x1); \ - ++_value, _stopbyte >>= 1); \ - break; \ - } \ + /* find first bit clear in name */ +#define bit_ffc(name, nbits, value) do { \ + register bitstr_t *_name = (name); \ + register int _byte, _nbits = (nbits); \ + register int _stopbyte = _bit_byte(_nbits - 1), _value = -1; \ + if (_nbits > 0) \ + for (_byte = 0; _byte <= _stopbyte; ++_byte) \ + if (_name[_byte] != 0xff) { \ + bitstr_t _lb; \ + _value = _byte << 3; \ + for (_lb = _name[_byte]; (_lb&0x1); \ + ++_value, _lb >>= 1); \ + break; \ + } \ + if (_value >= nbits) \ + _value = -1; \ *(value) = _value; \ -} +} while (0) -/* find first bit set in name */ -#define bit_ffs(name, nbits, value) { \ - register bitstr_t *_name = name; \ - register int _byte, _nbits = nbits; \ - register int _stopbyte = _bit_byte(_nbits), _value = -1; \ - for (_byte = 0; _byte <= _stopbyte; ++_byte) \ - if (_name[_byte]) { \ - _value = _byte << 3; \ - for (_stopbyte = _name[_byte]; !(_stopbyte&0x1); \ - ++_value, _stopbyte >>= 1); \ - break; \ - } \ + /* find first bit set in name */ +#define bit_ffs(name, nbits, value) do { \ + register bitstr_t *_name = (name); \ + register int _byte, _nbits = (nbits); \ + register int _stopbyte = _bit_byte(_nbits - 1), _value = -1; \ + if (_nbits > 0) \ + for (_byte = 0; _byte <= _stopbyte; ++_byte) \ + if (_name[_byte]) { \ + bitstr_t _lb; \ + _value = _byte << 3; \ + for (_lb = _name[_byte]; !(_lb&0x1); \ + ++_value, _lb >>= 1); \ + break; \ + } \ + if (_value >= nbits) \ + _value = -1; \ *(value) = _value; \ -} +} while (0) + +#endif /* !_SYS_BITSTRING_H_ */ --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
