Re: license cleanup - Mailing list pgsql-patches
| From | Neil Conway |
|---|---|
| Subject | Re: license cleanup |
| Date | |
| Msg-id | 4160FD31.2070800@samurai.com Whole thread Raw |
| In response to | Re: license cleanup (Tom Lane <tgl@sss.pgh.pa.us>) |
| Responses |
Re: license cleanup
|
| List | pgsql-patches |
Tom Lane wrote:
> I think it is a real bad idea to unilaterally change the copyright text
> in files we got from somewhere else, no matter how benign our intentions.
Agreed.
> Instead, how about adopting the NetBSD version of the functionality?
> If the files did indeed come from UCB originally, then NetBSD should
> have a copy too ...
Attached is a patch that replaces src/port/{strtol.c,strtoul.c} with
versions derived from current NetBSD CVS sources, which has a 3-clause
BSD license. The code is different than the FreeBSD sources in a few
ways (mostly trivial); I've eyeballed the diffs and I couldn't see
anything that would result in a change in behavior, but I may have
missed something. The NetBSD sources are actually better in a few ways
(e.g. they don't use the "register" keyword).
Barring any objections, I intend to apply this patch to HEAD on Tuesday.
There are a few more files whose licenses need updating, but I'll leave
that for later. And of course, there's contrib/ to sort out as well...
-Neil
Index: src/port/strtol.c
===================================================================
RCS file: /Users/neilc/local/cvs/pgsql-server/src/port/strtol.c,v
retrieving revision 1.4
diff -c -r1.4 strtol.c
*** src/port/strtol.c 29 Aug 2004 04:13:12 -0000 1.4
--- src/port/strtol.c 4 Oct 2004 06:20:12 -0000
***************
*** 1,28 ****
! /*
! * Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group
! * Portions Copyright (c) 1990 The Regents of the University of California.
! * All rights reserved.
*
* 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.
! * 3. All advertising materials mentioning features or use of this software
! * must display the following acknowledgement:
! * This product includes software developed by the University of
! * California, Berkeley and its contributors.
! * 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.
*
* 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)
--- 1,25 ----
! /* $NetBSD: strtol.c,v 1.16 2003/08/07 16:43:44 agc Exp $ */
!
! /*-
! * Copyright (c) 1990, 1993
! * The Regents of the University of California. All rights reserved.
*
* 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.
! * 3. 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.
*
* 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)
***************
*** 33,47 ****
*/
#if defined(LIBC_SCCS) && !defined(lint)
! static char sccsid[] = "@(#)strtol.c 5.4 (Berkeley) 2/23/91";
! #endif /* LIBC_SCCS and not lint */
- #include <limits.h>
#include <ctype.h>
#include <errno.h>
#include <stdlib.h>
- #define const
/*
* Convert a string to a long integer.
--- 30,47 ----
*/
#if defined(LIBC_SCCS) && !defined(lint)
! #if 0
! static char sccsid[] = "@(#)strtol.c 8.1 (Berkeley) 6/4/93";
! #else
! __RCSID("$NetBSD: strtol.c,v 1.16 2003/08/07 16:43:44 agc Exp $");
! #endif
! #endif /* LIBC_SCCS and not lint */
#include <ctype.h>
#include <errno.h>
+ #include <limits.h>
#include <stdlib.h>
/*
* Convert a string to a long integer.
***************
*** 51,87 ****
*/
long
strtol(nptr, endptr, base)
! const char *nptr;
! char **endptr;
! int base;
{
! const char *s = nptr;
! unsigned long acc;
! unsigned char c;
! unsigned long cutoff;
! int neg = 0,
! any,
! cutlim;
/*
! * Skip white space and pick up leading +/- sign if any. If base is 0,
! * allow 0x for hex and 0 for octal, else assume decimal; if base is
! * already 16, allow 0x.
*/
! do
! {
! c = *s++;
} while (isspace(c));
! if (c == '-')
! {
neg = 1;
c = *s++;
}
- else if (c == '+')
- c = *s++;
if ((base == 0 || base == 16) &&
! c == '0' && (*s == 'x' || *s == 'X'))
! {
c = s[1];
s += 2;
base = 16;
--- 51,86 ----
*/
long
strtol(nptr, endptr, base)
! const char *nptr;
! char **endptr;
! int base;
{
! const char *s;
! long acc, cutoff;
! int c;
! int neg, any, cutlim;
!
! /* endptr may be NULL */
/*
! * Skip white space and pick up leading +/- sign if any.
! * If base is 0, allow 0x for hex and 0 for octal, else
! * assume decimal; if base is already 16, allow 0x.
*/
! s = nptr;
! do {
! c = (unsigned char) *s++;
} while (isspace(c));
! if (c == '-') {
neg = 1;
c = *s++;
+ } else {
+ neg = 0;
+ if (c == '+')
+ c = *s++;
}
if ((base == 0 || base == 16) &&
! c == '0' && (*s == 'x' || *s == 'X')) {
c = s[1];
s += 2;
base = 16;
***************
*** 90,140 ****
base = c == '0' ? 8 : 10;
/*
! * Compute the cutoff value between legal numbers and illegal numbers.
! * That is the largest legal value, divided by the base. An input
! * number that is greater than this value, if followed by a legal
! * input character, is too big. One that is equal to this value may
! * be valid or not; the limit between valid and invalid numbers is
! * then based on the last digit. For instance, if the range for longs
! * is [-2147483648..2147483647] and the input base is 10, cutoff will
! * be set to 214748364 and cutlim to either 7 (neg==0) or 8 (neg==1),
! * meaning that if we have accumulated a value > 214748364, or equal
! * but the next digit is > 7 (or 8), the number is too big, and we
! * will return a range error.
*
* Set any if any `digits' consumed; make it negative to indicate
* overflow.
*/
! cutoff = neg ? -(unsigned long) LONG_MIN : LONG_MAX;
! cutlim = cutoff % (unsigned long) base;
! cutoff /= (unsigned long) base;
! for (acc = 0, any = 0;; c = *s++)
! {
if (isdigit(c))
c -= '0';
else if (isalpha(c))
c -= isupper(c) ? 'A' - 10 : 'a' - 10;
else
break;
! if ((int) c >= base)
break;
! if (any < 0 || acc > cutoff || acc == cutoff && (int) c > cutlim)
! any = -1;
! else
! {
! any = 1;
! acc *= base;
! acc += c;
}
}
- if (any < 0)
- {
- acc = neg ? LONG_MIN : LONG_MAX;
- errno = ERANGE;
- }
- else if (neg)
- acc = -acc;
if (endptr != 0)
! *endptr = any ? s - 1 : (char *) nptr;
! return acc;
}
--- 89,155 ----
base = c == '0' ? 8 : 10;
/*
! * Compute the cutoff value between legal numbers and illegal
! * numbers. That is the largest legal value, divided by the
! * base. An input number that is greater than this value, if
! * followed by a legal input character, is too big. One that
! * is equal to this value may be valid or not; the limit
! * between valid and invalid numbers is then based on the last
! * digit. For instance, if the range for longs is
! * [-2147483648..2147483647] and the input base is 10,
! * cutoff will be set to 214748364 and cutlim to either
! * 7 (neg==0) or 8 (neg==1), meaning that if we have accumulated
! * a value > 214748364, or equal but the next digit is > 7 (or 8),
! * the number is too big, and we will return a range error.
*
* Set any if any `digits' consumed; make it negative to indicate
* overflow.
*/
! cutoff = neg ? LONG_MIN : LONG_MAX;
! cutlim = (int)(cutoff % base);
! cutoff /= base;
! if (neg) {
! if (cutlim > 0) {
! cutlim -= base;
! cutoff += 1;
! }
! cutlim = -cutlim;
! }
! for (acc = 0, any = 0;; c = (unsigned char) *s++) {
if (isdigit(c))
c -= '0';
else if (isalpha(c))
c -= isupper(c) ? 'A' - 10 : 'a' - 10;
else
break;
! if (c >= base)
break;
! if (any < 0)
! continue;
! if (neg) {
! if (acc < cutoff || (acc == cutoff && c > cutlim)) {
! any = -1;
! acc = LONG_MIN;
! errno = ERANGE;
! } else {
! any = 1;
! acc *= base;
! acc -= c;
! }
! } else {
! if (acc > cutoff || (acc == cutoff && c > cutlim)) {
! any = -1;
! acc = LONG_MAX;
! errno = ERANGE;
! } else {
! any = 1;
! acc *= base;
! acc += c;
! }
}
}
if (endptr != 0)
! /* LINTED interface specification */
! *endptr = (char *)(any ? s - 1 : nptr);
! return (acc);
}
Index: src/port/strtoul.c
===================================================================
RCS file: /Users/neilc/local/cvs/pgsql-server/src/port/strtoul.c,v
retrieving revision 1.1
diff -c -r1.1 strtoul.c
*** src/port/strtoul.c 18 Jul 2002 04:13:59 -0000 1.1
--- src/port/strtoul.c 4 Oct 2004 06:15:42 -0000
***************
*** 1,3 ****
--- 1,5 ----
+ /* $NetBSD: strtoul.c,v 1.16 2003/08/07 16:43:45 agc Exp $ */
+
/*
* Copyright (c) 1990, 1993
* The Regents of the University of California. All rights reserved.
***************
*** 6,27 ****
* 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.
! * 3. All advertising materials mentioning features or use of this software
! * must display the following acknowledgement:
! * This product includes software developed by the University of
! * California, Berkeley and its contributors.
! * 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.
*
* 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)
--- 8,25 ----
* 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.
! * 3. 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.
*
* 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)
***************
*** 32,43 ****
*/
#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)strtoul.c 8.1 (Berkeley) 6/4/93";
! #endif /* LIBC_SCCS and not lint */
- #include <limits.h>
#include <ctype.h>
#include <errno.h>
#include <stdlib.h>
/*
--- 30,45 ----
*/
#if defined(LIBC_SCCS) && !defined(lint)
+ #if 0
static char sccsid[] = "@(#)strtoul.c 8.1 (Berkeley) 6/4/93";
! #else
! __RCSID("$NetBSD: strtoul.c,v 1.16 2003/08/07 16:43:45 agc Exp $");
! #endif
! #endif /* LIBC_SCCS and not lint */
#include <ctype.h>
#include <errno.h>
+ #include <limits.h>
#include <stdlib.h>
/*
***************
*** 48,119 ****
*/
unsigned long
strtoul(nptr, endptr, base)
! const char *nptr;
! char **endptr;
! register int base;
{
! register const char *s = nptr;
! register unsigned long acc;
! register unsigned char c;
! register unsigned long cutoff;
! register int neg = 0,
! any,
! cutlim;
/*
* See strtol for comments as to the logic used.
*/
! do
! {
! c = *s++;
} while (isspace(c));
! if (c == '-')
! {
neg = 1;
c = *s++;
}
- else if (c == '+')
- c = *s++;
if ((base == 0 || base == 16) &&
! c == '0' && (*s == 'x' || *s == 'X'))
! {
c = s[1];
s += 2;
base = 16;
}
if (base == 0)
base = c == '0' ? 8 : 10;
! cutoff = (unsigned long) ULONG_MAX / (unsigned long) base;
! cutlim = (unsigned long) ULONG_MAX % (unsigned long) base;
! for (acc = 0, any = 0;; c = *s++)
! {
! if (!isascii(c))
! break;
if (isdigit(c))
c -= '0';
else if (isalpha(c))
c -= isupper(c) ? 'A' - 10 : 'a' - 10;
else
break;
! if ((int) c >= base)
break;
! if (any < 0 || acc > cutoff || (acc == cutoff && (int) c > cutlim))
any = -1;
! else
! {
any = 1;
! acc *= base;
acc += c;
}
}
! if (any < 0)
! {
! acc = ULONG_MAX;
! errno = ERANGE;
! }
! else if (neg)
acc = -acc;
if (endptr != 0)
! *endptr = (char *) (any ? s - 1 : nptr);
! return acc;
}
--- 50,117 ----
*/
unsigned long
strtoul(nptr, endptr, base)
! const char *nptr;
! char **endptr;
! int base;
{
! const char *s;
! unsigned long acc, cutoff;
! int c;
! int neg, any, cutlim;
!
! /* endptr may be NULL */
/*
* See strtol for comments as to the logic used.
*/
! s = nptr;
! do {
! c = (unsigned char) *s++;
} while (isspace(c));
! if (c == '-') {
neg = 1;
c = *s++;
+ } else {
+ neg = 0;
+ if (c == '+')
+ c = *s++;
}
if ((base == 0 || base == 16) &&
! c == '0' && (*s == 'x' || *s == 'X')) {
c = s[1];
s += 2;
base = 16;
}
if (base == 0)
base = c == '0' ? 8 : 10;
!
! cutoff = ULONG_MAX / (unsigned long)base;
! cutlim = (int)(ULONG_MAX % (unsigned long)base);
! for (acc = 0, any = 0;; c = (unsigned char) *s++) {
if (isdigit(c))
c -= '0';
else if (isalpha(c))
c -= isupper(c) ? 'A' - 10 : 'a' - 10;
else
break;
! if (c >= base)
break;
! if (any < 0)
! continue;
! if (acc > cutoff || (acc == cutoff && c > cutlim)) {
any = -1;
! acc = ULONG_MAX;
! errno = ERANGE;
! } else {
any = 1;
! acc *= (unsigned long)base;
acc += c;
}
}
! if (neg && any > 0)
acc = -acc;
if (endptr != 0)
! /* LINTED interface specification */
! *endptr = (char *)(any ? s - 1 : nptr);
! return (acc);
}
pgsql-patches by date: