INN commit: trunk/lib (7 files)
INN Commit
rra at isc.org
Tue Nov 5 20:57:58 UTC 2013
Date: Tuesday, November 5, 2013 @ 12:57:58
Author: iulius
Revision: 9558
sync with rra-c-util
Modified:
trunk/lib/inet_aton.c
trunk/lib/inet_ntoa.c
trunk/lib/mkstemp.c
trunk/lib/setenv.c
trunk/lib/seteuid.c
trunk/lib/strlcat.c
trunk/lib/strlcpy.c
-------------+
inet_aton.c | 187 ++++++++++++++++++++++++++++++++++------------------------
inet_ntoa.c | 43 ++++++++-----
mkstemp.c | 59 ++++++++++++------
setenv.c | 67 +++++++++++++-------
seteuid.c | 46 ++++++++------
strlcat.c | 46 ++++++++------
strlcpy.c | 44 ++++++++-----
7 files changed, 304 insertions(+), 188 deletions(-)
Modified: inet_aton.c
===================================================================
--- inet_aton.c 2013-11-05 20:11:17 UTC (rev 9557)
+++ inet_aton.c 2013-11-05 20:57:58 UTC (rev 9558)
@@ -1,21 +1,33 @@
-/* $Id$
-**
-** Replacement for a missing inet_aton.
-**
-** Written by Russ Allbery <rra at stanford.edu>
-** This work is hereby placed in the public domain by its author.
-**
-** Provides the same functionality as the standard library routine
-** inet_aton for those platforms that don't have it. inet_aton is
-** thread-safe.
-*/
+/* $Id$
+ *
+ * Replacement for a missing inet_aton.
+ *
+ * Provides the same functionality as the standard library routine
+ * inet_aton for those platforms that don't have it. inet_aton is
+ * thread-safe.
+ *
+ * The canonical version of this file is maintained in the rra-c-util package,
+ * which can be found at <http://www.eyrie.org/~eagle/software/rra-c-util/>.
+ *
+ * Written by Russ Allbery <rra at stanford.edu>
+ *
+ * The authors hereby relinquish any claim to any copyright that they may have
+ * in this work, whether granted under contract or by operation of law or
+ * international treaty, and hereby commit to the public, at large, that they
+ * shall not, at any time in the future, seek to enforce any copyright in this
+ * work against any person or entity, or prevent any person or entity from
+ * copying, publishing, distributing or creating derivative works of this
+ * work.
+ */
#include "config.h"
#include "clibrary.h"
-#include <netinet/in.h>
+#include "portable/socket.h"
-/* If we're running the test suite, rename inet_ntoa to avoid conflicts with
- the system version. */
+/*
+ * If we're running the test suite, rename inet_ntoa to avoid conflicts with
+ * the system version.
+ */
#if TESTING
# define inet_aton test_inet_aton
int test_inet_aton(const char *, struct in_addr *);
@@ -29,16 +41,22 @@
int base, i;
int part = 0;
- if (s == NULL) return 0;
+ if (s == NULL)
+ return 0;
- /* Step through each period-separated part of the address. If we see
- more than four parts, the address is invalid. */
+ /*
+ * Step through each period-separated part of the address. If we see
+ * more than four parts, the address is invalid.
+ */
for (p = s; *p != 0; part++) {
- if (part > 3) return 0;
+ if (part > 3)
+ return 0;
- /* Determine the base of the section we're looking at. Numbers are
- represented the same as in C; octal starts with 0, hex starts
- with 0x, and anything else is decimal. */
+ /*
+ * Determine the base of the section we're looking at. Numbers are
+ * represented the same as in C; octal starts with 0, hex starts
+ * with 0x, and anything else is decimal.
+ */
if (*p == '0') {
p++;
if (*p == 'x') {
@@ -51,80 +69,97 @@
base = 10;
}
- /* Make sure there's actually a number. (A section of just "0"
- would set base to 8 and leave us pointing at a period; allow
- that.) */
- if (*p == '.' && base != 8) return 0;
+ /*
+ * Make sure there's actually a number. (A section of just "0"
+ * would set base to 8 and leave us pointing at a period; allow
+ * that.)
+ */
+ if (*p == '.' && base != 8)
+ return 0;
octet[part] = 0;
- /* Now, parse this segment of the address. For each digit, multiply
- the result so far by the base and then add the value of the
- digit. Be careful of arithmetic overflow in cases where an
- unsigned long is 32 bits; we need to detect it *before* we
- multiply by the base since otherwise we could overflow and wrap
- and then not detect the error. */
+ /*
+ * Now, parse this segment of the address. For each digit, multiply
+ * the result so far by the base and then add the value of the digit.
+ * Be careful of arithmetic overflow in cases where an unsigned long
+ * is 32 bits; we need to detect it *before* we multiply by the base
+ * since otherwise we could overflow and wrap and then not detect the
+ * error.
+ */
for (; *p != 0 && *p != '.'; p++) {
- if (octet[part] > 0xffffffffUL / base) return 0;
+ if (octet[part] > 0xffffffffUL / base)
+ return 0;
- /* Use a switch statement to parse each digit rather than
- assuming ASCII. Probably pointless portability.... */
+ /*
+ * Use a switch statement to parse each digit rather than assuming
+ * ASCII. Probably pointless portability.
+ */
switch (*p) {
- case '0': i = 0; break;
- case '1': i = 1; break;
- case '2': i = 2; break;
- case '3': i = 3; break;
- case '4': i = 4; break;
- case '5': i = 5; break;
- case '6': i = 6; break;
- case '7': i = 7; break;
- case '8': i = 8; break;
- case '9': i = 9; break;
- case 'A': case 'a': i = 10; break;
- case 'B': case 'b': i = 11; break;
- case 'C': case 'c': i = 12; break;
- case 'D': case 'd': i = 13; break;
- case 'E': case 'e': i = 14; break;
- case 'F': case 'f': i = 15; break;
- default: return 0;
+ case '0': i = 0; break;
+ case '1': i = 1; break;
+ case '2': i = 2; break;
+ case '3': i = 3; break;
+ case '4': i = 4; break;
+ case '5': i = 5; break;
+ case '6': i = 6; break;
+ case '7': i = 7; break;
+ case '8': i = 8; break;
+ case '9': i = 9; break;
+ case 'A': case 'a': i = 10; break;
+ case 'B': case 'b': i = 11; break;
+ case 'C': case 'c': i = 12; break;
+ case 'D': case 'd': i = 13; break;
+ case 'E': case 'e': i = 14; break;
+ case 'F': case 'f': i = 15; break;
+ default: return 0;
}
- if (i >= base) return 0;
+ if (i >= base)
+ return 0;
octet[part] = (octet[part] * base) + i;
}
- /* Advance over periods; the top of the loop will increment the
- count of parts we've seen. We need a check here to detect an
- illegal trailing period. */
+ /*
+ * Advance over periods; the top of the loop will increment the count
+ * of parts we've seen. We need a check here to detect an illegal
+ * trailing period.
+ */
if (*p == '.') {
p++;
- if (*p == 0) return 0;
+ if (*p == 0)
+ return 0;
}
}
- if (part == 0) return 0;
+ if (part == 0)
+ return 0;
/* IPv4 allows three types of address specification:
-
- a.b
- a.b.c
- a.b.c.d
-
- If there are fewer than four segments, the final segment accounts for
- all of the remaining portion of the address. For example, in the a.b
- form, b is the final 24 bits of the address. We also allow a simple
- number, which is interpreted as the 32-bit number corresponding to
- the full IPv4 address.
-
- The first for loop below ensures that any initial segments represent
- only 8 bits of the address and builds the upper portion of the IPv4
- address. Then, the remaining segment is checked to make sure it's no
- bigger than the remaining space in the address and then is added into
- the result. */
+ *
+ * a.b
+ * a.b.c
+ * a.b.c.d
+ *
+ * If there are fewer than four segments, the final segment accounts for
+ * all of the remaining portion of the address. For example, in the a.b
+ * form, b is the final 24 bits of the address. We also allow a simple
+ * number, which is interpreted as the 32-bit number corresponding to the
+ * full IPv4 address.
+ *
+ * The first for loop below ensures that any initial segments represent
+ * only 8 bits of the address and builds the upper portion of the IPv4
+ * address. Then, the remaining segment is checked to make sure it's no
+ * bigger than the remaining space in the address and then is added into
+ * the result.
+ */
address = 0;
for (i = 0; i < part - 1; i++) {
- if (octet[i] > 0xff) return 0;
+ if (octet[i] > 0xff)
+ return 0;
address |= octet[i] << (8 * (3 - i));
}
- if (octet[i] > (0xffffffffUL >> (i * 8))) return 0;
+ if (octet[i] > (0xffffffffUL >> (i * 8)))
+ return 0;
address |= octet[i];
- if (addr != NULL) addr->s_addr = htonl(address);
+ if (addr != NULL)
+ addr->s_addr = htonl(address);
return 1;
}
Modified: inet_ntoa.c
===================================================================
--- inet_ntoa.c 2013-11-05 20:11:17 UTC (rev 9557)
+++ inet_ntoa.c 2013-11-05 20:57:58 UTC (rev 9558)
@@ -1,23 +1,34 @@
-/* $Id$
-**
-** Replacement for a missing or broken inet_ntoa.
-**
-** Written by Russ Allbery <rra at stanford.edu>
-** This work is hereby placed in the public domain by its author.
-**
-** Provides the same functionality as the standard library routine
-** inet_ntoa for those platforms that don't have it or where it doesn't
-** work right (such as on IRIX when using gcc to compile). inet_ntoa is
-** not thread-safe since it uses static storage (inet_ntop should be used
-** instead when available).
-*/
+/* $Id$
+ *
+ * Replacement for a missing or broken inet_ntoa.
+ *
+ * Provides the same functionality as the standard library routine inet_ntoa
+ * for those platforms that don't have it or where it doesn't work right (such
+ * as on IRIX when using gcc to compile). inet_ntoa is not thread-safe since
+ * it uses static storage (inet_ntop should be used instead when available).
+ *
+ * The canonical version of this file is maintained in the rra-c-util package,
+ * which can be found at <http://www.eyrie.org/~eagle/software/rra-c-util/>.
+ *
+ * Written by Russ Allbery <rra at stanford.edu>
+ *
+ * The authors hereby relinquish any claim to any copyright that they may have
+ * in this work, whether granted under contract or by operation of law or
+ * international treaty, and hereby commit to the public, at large, that they
+ * shall not, at any time in the future, seek to enforce any copyright in this
+ * work against any person or entity, or prevent any person or entity from
+ * copying, publishing, distributing or creating derivative works of this
+ * work.
+ */
#include "config.h"
#include "clibrary.h"
-#include <netinet/in.h>
+#include "portable/socket.h"
-/* If we're running the test suite, rename inet_ntoa to avoid conflicts with
- the system version. */
+/*
+ * If we're running the test suite, rename inet_ntoa to avoid conflicts with
+ * the system version.
+ */
#if TESTING
# define inet_ntoa test_inet_ntoa
const char *test_inet_ntoa(const struct in_addr);
Modified: mkstemp.c
===================================================================
--- mkstemp.c 2013-11-05 20:11:17 UTC (rev 9557)
+++ mkstemp.c 2013-11-05 20:57:58 UTC (rev 9558)
@@ -1,23 +1,36 @@
-/* $Id$
-**
-** Replacement for a missing mkstemp.
-**
-** Written by Russ Allbery <rra at stanford.edu>
-** This work is hereby placed in the public domain by its author.
-**
-** Provides the same functionality as the library function mkstemp for those
-** systems that don't have it.
-*/
+/* $Id$
+ *
+ * Replacement for a missing mkstemp.
+ *
+ * Provides the same functionality as the library function mkstemp for those
+ * systems that don't have it.
+ *
+ * The canonical version of this file is maintained in the rra-c-util package,
+ * which can be found at <http://www.eyrie.org/~eagle/software/rra-c-util/>.
+ *
+ * Written by Russ Allbery <rra at stanford.edu>
+ *
+ * The authors hereby relinquish any claim to any copyright that they may have
+ * in this work, whether granted under contract or by operation of law or
+ * international treaty, and hereby commit to the public, at large, that they
+ * shall not, at any time in the future, seek to enforce any copyright in this
+ * work against any person or entity, or prevent any person or entity from
+ * copying, publishing, distributing or creating derivative works of this
+ * work.
+ */
#include "config.h"
#include "clibrary.h"
-#include "portable/time.h"
+
#include <errno.h>
#include <fcntl.h>
+#include "portable/time.h"
-/* If we're running the test suite, rename mkstemp to avoid conflicts with the
- system version. #undef it first because some systems may define it to
- another name. */
+/*
+ * If we're running the test suite, rename mkstemp to avoid conflicts with the
+ * system version. #undef it first because some systems may define it to
+ * another name.
+ */
#if TESTING
# undef mkstemp
# define mkstemp test_mkstemp
@@ -42,8 +55,10 @@
long_int_type randnum, working;
int i, tries, fd;
- /* Make sure we have a valid template and initialize p to point at the
- beginning of the template portion of the string. */
+ /*
+ * Make sure we have a valid template and initialize p to point at the
+ * beginning of the template portion of the string.
+ */
length = strlen(template);
if (length < 6) {
errno = EINVAL;
@@ -59,8 +74,10 @@
gettimeofday(&tv, NULL);
randnum = ((long_int_type) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid();
- /* Now, try to find a working file name. We try no more than TMP_MAX file
- names. */
+ /*
+ * Now, try to find a working file name. We try no more than TMP_MAX file
+ * names.
+ */
for (tries = 0; tries < TMP_MAX; tries++) {
for (working = randnum, i = 0; i < 6; i++) {
XXXXXX[i] = letters[working % 62];
@@ -70,8 +87,10 @@
if (fd >= 0 || (errno != EEXIST && errno != EISDIR))
return fd;
- /* This is a relatively random increment. Cut off the tail end of
- tv_usec since it's often predictable. */
+ /*
+ * This is a relatively random increment. Cut off the tail end of
+ * tv_usec since it's often predictable.
+ */
randnum += (tv.tv_usec >> 10) & 0xfff;
}
errno = EEXIST;
Modified: setenv.c
===================================================================
--- setenv.c 2013-11-05 20:11:17 UTC (rev 9557)
+++ setenv.c 2013-11-05 20:57:58 UTC (rev 9558)
@@ -1,19 +1,31 @@
-/* $Id$
-**
-** Replacement for a missing setenv.
-**
-** Written by Russ Allbery <rra at stanford.edu>
-** This work is hereby placed in the public domain by its author.
-**
-** Provides the same functionality as the standard library routine setenv
-** for those platforms that don't have it.
-*/
+/* $Id$
+ *
+ * Replacement for a missing setenv.
+ *
+ * Provides the same functionality as the standard library routine setenv for
+ * those platforms that don't have it.
+ *
+ * The canonical version of this file is maintained in the rra-c-util package,
+ * which can be found at <http://www.eyrie.org/~eagle/software/rra-c-util/>.
+ *
+ * Written by Russ Allbery <rra at stanford.edu>
+ *
+ * The authors hereby relinquish any claim to any copyright that they may have
+ * in this work, whether granted under contract or by operation of law or
+ * international treaty, and hereby commit to the public, at large, that they
+ * shall not, at any time in the future, seek to enforce any copyright in this
+ * work against any person or entity, or prevent any person or entity from
+ * copying, publishing, distributing or creating derivative works of this
+ * work.
+ */
#include "config.h"
#include "clibrary.h"
-/* If we're running the test suite, rename setenv to avoid conflicts with
- the system version. */
+/*
+ * If we're running the test suite, rename setenv to avoid conflicts with
+ * the system version.
+ */
#if TESTING
# define setenv test_setenv
int test_setenv(const char *, const char *, int);
@@ -28,27 +40,32 @@
if (!overwrite && getenv(name) != NULL)
return 0;
- /* Allocate memory for the environment string. We intentionally don't
- use concat here, or the xmalloc family of allocation routines, since
- the intention is to provide a replacement for the standard library
- function which sets errno and returns in the event of a memory
- allocation failure. */
+ /*
+ * Allocate memory for the environment string. We intentionally don't use
+ * the xmalloc family of allocation routines here, since the intention is
+ * to provide a replacement for the standard library function that sets
+ * errno and returns in the event of a memory allocation failure.
+ */
size = strlen(name) + 1 + strlen(value) + 1;
envstring = malloc(size);
if (envstring == NULL)
return -1;
- /* Build the environment string and add it to the environment using
- putenv. Systems without putenv lose, but XPG4 requires it. */
+ /*
+ * Build the environment string and add it to the environment using
+ * putenv. Systems without putenv lose, but XPG4 requires it.
+ */
strlcpy(envstring, name, size);
strlcat(envstring, "=", size);
strlcat(envstring, value, size);
return putenv(envstring);
- /* Note that the memory allocated is not freed. This is intentional;
- many implementations of putenv assume that the string passed to
- putenv will never be freed and don't make a copy of it. Repeated use
- of this function will therefore leak memory, since most
- implementations of putenv also don't free strings removed from the
- environment (due to being overwritten). */
+ /*
+ * Note that the memory allocated is not freed. This is intentional; many
+ * implementations of putenv assume that the string passed to putenv will
+ * never be freed and don't make a copy of it. Repeated use of this
+ * function will therefore leak memory, since most implementations of
+ * putenv also don't free strings removed from the environment (due to
+ * being overwritten).
+ */
}
Modified: seteuid.c
===================================================================
--- seteuid.c 2013-11-05 20:11:17 UTC (rev 9557)
+++ seteuid.c 2013-11-05 20:57:58 UTC (rev 9558)
@@ -1,21 +1,31 @@
-/* $Id$
-**
-** Replacement for a missing seteuid.
-**
-** Written by Russ Allbery <rra at stanford.edu>
-** This work is hereby placed in the public domain by its author.
-**
-** Some systems don't have seteuid but do have setreuid. setreuid with
-** -1 given for the real UID is equivalent to seteuid on systems with
-** POSIX saved UIDs. On systems without POSIX saved UIDs, we'd lose our
-** ability to regain privileges if we just set the effective UID, so
-** instead fake a saved UID by setting the real UID to the current
-** effective UID, using the real UID as the saved UID.
-**
-** Note that swapping UIDs doesn't work on AIX, but AIX has saved UIDs.
-** Note also that systems without setreuid lose, and that we assume that
-** any system with seteuid has saved UIDs.
-*/
+/* $Id$
+ *
+ * Replacement for a missing seteuid.
+ *
+ * Some systems don't have seteuid but do have setreuid. setreuid with -1
+ * given for the real UID is equivalent to seteuid on systems with POSIX saved
+ * UIDs. On systems without POSIX saved UIDs, we'd lose our ability to regain
+ * privileges if we just set the effective UID, so instead fake a saved UID by
+ * setting the real UID to the current effective UID, using the real UID as
+ * the saved UID.
+ *
+ * Note that swapping UIDs doesn't work on AIX, but AIX has saved UIDs. Note
+ * also that systems without setreuid lose, and that we assume that any system
+ * with seteuid has saved UIDs.
+ *
+ * The canonical version of this file is maintained in the rra-c-util package,
+ * which can be found at <http://www.eyrie.org/~eagle/software/rra-c-util/>.
+ *
+ * Written by Russ Allbery <rra at stanford.edu>
+ *
+ * The authors hereby relinquish any claim to any copyright that they may have
+ * in this work, whether granted under contract or by operation of law or
+ * international treaty, and hereby commit to the public, at large, that they
+ * shall not, at any time in the future, seek to enforce any copyright in this
+ * work against any person or entity, or prevent any person or entity from
+ * copying, publishing, distributing or creating derivative works of this
+ * work.
+ */
#include "config.h"
#include "clibrary.h"
Modified: strlcat.c
===================================================================
--- strlcat.c 2013-11-05 20:11:17 UTC (rev 9557)
+++ strlcat.c 2013-11-05 20:57:58 UTC (rev 9558)
@@ -1,24 +1,36 @@
-/* $Id$
-**
-** Replacement for a missing strlcat.
-**
-** Written by Russ Allbery <rra at stanford.edu>
-** This work is hereby placed in the public domain by its author.
-**
-** Provides the same functionality as the *BSD function strlcat, originally
-** developed by Todd Miller and Theo de Raadt. strlcat works similarly to
-** strncat, except simpler. The result is always nul-terminated even if the
-** source string is longer than the space remaining in the destination
-** string, and the total space required is returned. The third argument is
-** the total space available in the destination buffer, not just the amount
-** of space remaining.
-*/
+/* $Id$
+ *
+ * Replacement for a missing strlcat.
+ *
+ * Provides the same functionality as the *BSD function strlcat, originally
+ * developed by Todd Miller and Theo de Raadt. strlcat works similarly to
+ * strncat, except simpler. The result is always nul-terminated even if the
+ * source string is longer than the space remaining in the destination string,
+ * and the total space required is returned. The third argument is the total
+ * space available in the destination buffer, not just the amount of space
+ * remaining.
+ *
+ * The canonical version of this file is maintained in the rra-c-util package,
+ * which can be found at <http://www.eyrie.org/~eagle/software/rra-c-util/>.
+ *
+ * Written by Russ Allbery <rra at stanford.edu>
+ *
+ * The authors hereby relinquish any claim to any copyright that they may have
+ * in this work, whether granted under contract or by operation of law or
+ * international treaty, and hereby commit to the public, at large, that they
+ * shall not, at any time in the future, seek to enforce any copyright in this
+ * work against any person or entity, or prevent any person or entity from
+ * copying, publishing, distributing or creating derivative works of this
+ * work.
+ */
#include "config.h"
#include "clibrary.h"
-/* If we're running the test suite, rename strlcat to avoid conflicts with
- the system version. */
+/*
+ * If we're running the test suite, rename strlcat to avoid conflicts with
+ * the system version.
+ */
#if TESTING
# define strlcat test_strlcat
size_t test_strlcat(char *, const char *, size_t);
Modified: strlcpy.c
===================================================================
--- strlcpy.c 2013-11-05 20:11:17 UTC (rev 9557)
+++ strlcpy.c 2013-11-05 20:57:58 UTC (rev 9558)
@@ -1,23 +1,35 @@
-/* $Id$
-**
-** Replacement for a missing strlcpy.
-**
-** Written by Russ Allbery <rra at stanford.edu>
-** This work is hereby placed in the public domain by its author.
-**
-** Provides the same functionality as the *BSD function strlcpy, originally
-** developed by Todd Miller and Theo de Raadt. strlcpy works similarly to
-** strncpy, except saner and simpler. The result is always nul-terminated
-** even if the source string is longer than the destination string, and the
-** total space required is returned. The destination string is not
-** nul-filled like strncpy does, just nul-terminated.
-*/
+/* $Id$
+ *
+ * Replacement for a missing strlcpy.
+ *
+ * Provides the same functionality as the *BSD function strlcpy, originally
+ * developed by Todd Miller and Theo de Raadt. strlcpy works similarly to
+ * strncpy, except saner and simpler. The result is always nul-terminated
+ * even if the source string is longer than the destination string, and the
+ * total space required is returned. The destination string is not nul-filled
+ * like strncpy does, just nul-terminated.
+ *
+ * The canonical version of this file is maintained in the rra-c-util package,
+ * which can be found at <http://www.eyrie.org/~eagle/software/rra-c-util/>.
+ *
+ * Written by Russ Allbery <rra at stanford.edu>
+ *
+ * The authors hereby relinquish any claim to any copyright that they may have
+ * in this work, whether granted under contract or by operation of law or
+ * international treaty, and hereby commit to the public, at large, that they
+ * shall not, at any time in the future, seek to enforce any copyright in this
+ * work against any person or entity, or prevent any person or entity from
+ * copying, publishing, distributing or creating derivative works of this
+ * work.
+ */
#include "config.h"
#include "clibrary.h"
-/* If we're running the test suite, rename strlcpy to avoid conflicts with
- the system version. */
+/*
+ * If we're running the test suite, rename strlcpy to avoid conflicts with
+ * the system version.
+ */
#if TESTING
# define strlcpy test_strlcpy
size_t test_strlcpy(char *, const char *, size_t);
More information about the inn-committers
mailing list