diff options
Diffstat (limited to 'openbsd-compat')
43 files changed, 1161 insertions, 767 deletions
diff --git a/openbsd-compat/Makefile.in b/openbsd-compat/Makefile.in index 6f5ee2845..3a8703bc1 100644 --- a/openbsd-compat/Makefile.in +++ b/openbsd-compat/Makefile.in | |||
@@ -1,4 +1,4 @@ | |||
1 | # $Id: Makefile.in,v 1.35 2005/08/26 20:15:20 tim Exp $ | 1 | # $Id: Makefile.in,v 1.37 2005/12/31 05:33:37 djm Exp $ |
2 | 2 | ||
3 | sysconfdir=@sysconfdir@ | 3 | sysconfdir=@sysconfdir@ |
4 | piddir=@piddir@ | 4 | piddir=@piddir@ |
@@ -18,9 +18,9 @@ LDFLAGS=-L. @LDFLAGS@ | |||
18 | 18 | ||
19 | OPENBSD=base64.o basename.o bindresvport.o daemon.o dirname.o getcwd.o getgrouplist.o getopt.o getrrsetbyname.o glob.o inet_aton.o inet_ntoa.o inet_ntop.o mktemp.o readpassphrase.o realpath.o rresvport.o setenv.o setproctitle.o sigact.o strlcat.o strlcpy.o strmode.o strsep.o strtonum.o strtoll.o strtoul.o vis.o | 19 | OPENBSD=base64.o basename.o bindresvport.o daemon.o dirname.o getcwd.o getgrouplist.o getopt.o getrrsetbyname.o glob.o inet_aton.o inet_ntoa.o inet_ntop.o mktemp.o readpassphrase.o realpath.o rresvport.o setenv.o setproctitle.o sigact.o strlcat.o strlcpy.o strmode.o strsep.o strtonum.o strtoll.o strtoul.o vis.o |
20 | 20 | ||
21 | COMPAT=bsd-arc4random.o bsd-closefrom.o bsd-cray.o bsd-cygwin_util.o bsd-getpeereid.o bsd-misc.o bsd-nextstep.o bsd-openpty.o bsd-snprintf.o bsd-waitpid.o fake-rfc2553.o openssl-compat.o xmmap.o xcrypt.o | 21 | COMPAT=bsd-arc4random.o bsd-asprintf.o bsd-closefrom.o bsd-cray.o bsd-cygwin_util.o bsd-getpeereid.o bsd-misc.o bsd-nextstep.o bsd-openpty.o bsd-snprintf.o bsd-waitpid.o fake-rfc2553.o openssl-compat.o xmmap.o xcrypt.o |
22 | 22 | ||
23 | PORTS=port-irix.o port-aix.o port-uw.o | 23 | PORTS=port-irix.o port-aix.o port-uw.o port-tun.o |
24 | 24 | ||
25 | .c.o: | 25 | .c.o: |
26 | $(CC) $(CFLAGS) $(CPPFLAGS) -c $< | 26 | $(CC) $(CFLAGS) $(CPPFLAGS) -c $< |
diff --git a/openbsd-compat/base64.c b/openbsd-compat/base64.c index dcaa03e5d..9a60f583b 100644 --- a/openbsd-compat/base64.c +++ b/openbsd-compat/base64.c | |||
@@ -1,5 +1,3 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/net/base64.c */ | ||
2 | |||
3 | /* $OpenBSD: base64.c,v 1.4 2002/01/02 23:00:10 deraadt Exp $ */ | 1 | /* $OpenBSD: base64.c,v 1.4 2002/01/02 23:00:10 deraadt Exp $ */ |
4 | 2 | ||
5 | /* | 3 | /* |
@@ -44,6 +42,8 @@ | |||
44 | * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES. | 42 | * IF IBM IS APPRISED OF THE POSSIBILITY OF SUCH DAMAGES. |
45 | */ | 43 | */ |
46 | 44 | ||
45 | /* OPENBSD ORIGINAL: lib/libc/net/base64.c */ | ||
46 | |||
47 | #include "includes.h" | 47 | #include "includes.h" |
48 | 48 | ||
49 | #if (!defined(HAVE_B64_NTOP) && !defined(HAVE___B64_NTOP)) || (!defined(HAVE_B64_PTON) && !defined(HAVE___B64_PTON)) | 49 | #if (!defined(HAVE_B64_NTOP) && !defined(HAVE___B64_NTOP)) || (!defined(HAVE_B64_PTON) && !defined(HAVE___B64_PTON)) |
@@ -139,7 +139,7 @@ b64_ntop(u_char const *src, size_t srclength, char *target, size_t targsize) | |||
139 | size_t datalength = 0; | 139 | size_t datalength = 0; |
140 | u_char input[3]; | 140 | u_char input[3]; |
141 | u_char output[4]; | 141 | u_char output[4]; |
142 | int i; | 142 | u_int i; |
143 | 143 | ||
144 | while (2 < srclength) { | 144 | while (2 < srclength) { |
145 | input[0] = *src++; | 145 | input[0] = *src++; |
@@ -206,7 +206,8 @@ b64_ntop(u_char const *src, size_t srclength, char *target, size_t targsize) | |||
206 | int | 206 | int |
207 | b64_pton(char const *src, u_char *target, size_t targsize) | 207 | b64_pton(char const *src, u_char *target, size_t targsize) |
208 | { | 208 | { |
209 | int tarindex, state, ch; | 209 | u_int tarindex, state; |
210 | int ch; | ||
210 | char *pos; | 211 | char *pos; |
211 | 212 | ||
212 | state = 0; | 213 | state = 0; |
diff --git a/openbsd-compat/basename.c b/openbsd-compat/basename.c index 552dc1e1c..ad040e139 100644 --- a/openbsd-compat/basename.c +++ b/openbsd-compat/basename.c | |||
@@ -1,9 +1,7 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/gen/basename.c */ | 1 | /* $OpenBSD: basename.c,v 1.14 2005/08/08 08:05:33 espie Exp $ */ |
2 | |||
3 | /* $OpenBSD: basename.c,v 1.11 2003/06/17 21:56:23 millert Exp $ */ | ||
4 | 2 | ||
5 | /* | 3 | /* |
6 | * Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com> | 4 | * Copyright (c) 1997, 2004 Todd C. Miller <Todd.Miller@courtesan.com> |
7 | * | 5 | * |
8 | * Permission to use, copy, modify, and distribute this software for any | 6 | * Permission to use, copy, modify, and distribute this software for any |
9 | * purpose with or without fee is hereby granted, provided that the above | 7 | * purpose with or without fee is hereby granted, provided that the above |
@@ -18,34 +16,35 @@ | |||
18 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
19 | */ | 17 | */ |
20 | 18 | ||
19 | /* OPENBSD ORIGINAL: lib/libc/gen/basename.c */ | ||
20 | |||
21 | #include "includes.h" | 21 | #include "includes.h" |
22 | #ifndef HAVE_BASENAME | 22 | #ifndef HAVE_BASENAME |
23 | 23 | ||
24 | #ifndef lint | ||
25 | static char rcsid[] = "$OpenBSD: basename.c,v 1.11 2003/06/17 21:56:23 millert Exp $"; | ||
26 | #endif /* not lint */ | ||
27 | |||
28 | char * | 24 | char * |
29 | basename(const char *path) | 25 | basename(const char *path) |
30 | { | 26 | { |
31 | static char bname[MAXPATHLEN]; | 27 | static char bname[MAXPATHLEN]; |
32 | register const char *endp, *startp; | 28 | size_t len; |
29 | const char *endp, *startp; | ||
33 | 30 | ||
34 | /* Empty or NULL string gets treated as "." */ | 31 | /* Empty or NULL string gets treated as "." */ |
35 | if (path == NULL || *path == '\0') { | 32 | if (path == NULL || *path == '\0') { |
36 | (void)strlcpy(bname, ".", sizeof bname); | 33 | bname[0] = '.'; |
37 | return(bname); | 34 | bname[1] = '\0'; |
35 | return (bname); | ||
38 | } | 36 | } |
39 | 37 | ||
40 | /* Strip trailing slashes */ | 38 | /* Strip any trailing slashes */ |
41 | endp = path + strlen(path) - 1; | 39 | endp = path + strlen(path) - 1; |
42 | while (endp > path && *endp == '/') | 40 | while (endp > path && *endp == '/') |
43 | endp--; | 41 | endp--; |
44 | 42 | ||
45 | /* All slashes become "/" */ | 43 | /* All slashes becomes "/" */ |
46 | if (endp == path && *endp == '/') { | 44 | if (endp == path && *endp == '/') { |
47 | (void)strlcpy(bname, "/", sizeof bname); | 45 | bname[0] = '/'; |
48 | return(bname); | 46 | bname[1] = '\0'; |
47 | return (bname); | ||
49 | } | 48 | } |
50 | 49 | ||
51 | /* Find the start of the base */ | 50 | /* Find the start of the base */ |
@@ -53,12 +52,14 @@ basename(const char *path) | |||
53 | while (startp > path && *(startp - 1) != '/') | 52 | while (startp > path && *(startp - 1) != '/') |
54 | startp--; | 53 | startp--; |
55 | 54 | ||
56 | if (endp - startp + 2 > sizeof(bname)) { | 55 | len = endp - startp + 1; |
56 | if (len >= sizeof(bname)) { | ||
57 | errno = ENAMETOOLONG; | 57 | errno = ENAMETOOLONG; |
58 | return(NULL); | 58 | return (NULL); |
59 | } | 59 | } |
60 | strlcpy(bname, startp, endp - startp + 2); | 60 | memcpy(bname, startp, len); |
61 | return(bname); | 61 | bname[len] = '\0'; |
62 | return (bname); | ||
62 | } | 63 | } |
63 | 64 | ||
64 | #endif /* !defined(HAVE_BASENAME) */ | 65 | #endif /* !defined(HAVE_BASENAME) */ |
diff --git a/openbsd-compat/bindresvport.c b/openbsd-compat/bindresvport.c index 8a273f9b5..7f48fd03a 100644 --- a/openbsd-compat/bindresvport.c +++ b/openbsd-compat/bindresvport.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* This file has be substantially modified from the original OpenBSD source */ | 1 | /* This file has be substantially modified from the original OpenBSD source */ |
2 | 2 | ||
3 | /* $OpenBSD: bindresvport.c,v 1.15 2003/05/20 22:42:35 deraadt Exp $ */ | 3 | /* $OpenBSD: bindresvport.c,v 1.16 2005/04/01 07:44:03 otto Exp $ */ |
4 | 4 | ||
5 | /* | 5 | /* |
6 | * Copyright 1996, Jason Downs. All rights reserved. | 6 | * Copyright 1996, Jason Downs. All rights reserved. |
@@ -28,6 +28,8 @@ | |||
28 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 | */ | 29 | */ |
30 | 30 | ||
31 | /* OPENBSD ORIGINAL: lib/libc/rpc/bindresvport.c */ | ||
32 | |||
31 | #include "includes.h" | 33 | #include "includes.h" |
32 | 34 | ||
33 | #ifndef HAVE_BINDRESVPORT_SA | 35 | #ifndef HAVE_BINDRESVPORT_SA |
@@ -42,9 +44,7 @@ | |||
42 | * Bind a socket to a privileged IP port | 44 | * Bind a socket to a privileged IP port |
43 | */ | 45 | */ |
44 | int | 46 | int |
45 | bindresvport_sa(sd, sa) | 47 | bindresvport_sa(int sd, struct sockaddr *sa) |
46 | int sd; | ||
47 | struct sockaddr *sa; | ||
48 | { | 48 | { |
49 | int error, af; | 49 | int error, af; |
50 | struct sockaddr_storage myaddr; | 50 | struct sockaddr_storage myaddr; |
diff --git a/openbsd-compat/bsd-asprintf.c b/openbsd-compat/bsd-asprintf.c new file mode 100644 index 000000000..5ca01f80f --- /dev/null +++ b/openbsd-compat/bsd-asprintf.c | |||
@@ -0,0 +1,95 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2004 Darren Tucker. | ||
3 | * | ||
4 | * Based originally on asprintf.c from OpenBSD: | ||
5 | * Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com> | ||
6 | * | ||
7 | * Permission to use, copy, modify, and distribute this software for any | ||
8 | * purpose with or without fee is hereby granted, provided that the above | ||
9 | * copyright notice and this permission notice appear in all copies. | ||
10 | * | ||
11 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
12 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
13 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
14 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
15 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
16 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
17 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
18 | */ | ||
19 | |||
20 | #include "includes.h" | ||
21 | |||
22 | #ifndef HAVE_VASPRINTF | ||
23 | |||
24 | #ifndef VA_COPY | ||
25 | # ifdef HAVE_VA_COPY | ||
26 | # define VA_COPY(dest, src) va_copy(dest, src) | ||
27 | # else | ||
28 | # ifdef HAVE___VA_COPY | ||
29 | # define VA_COPY(dest, src) __va_copy(dest, src) | ||
30 | # else | ||
31 | # define VA_COPY(dest, src) (dest) = (src) | ||
32 | # endif | ||
33 | # endif | ||
34 | #endif | ||
35 | |||
36 | #define INIT_SZ 128 | ||
37 | |||
38 | int vasprintf(char **str, const char *fmt, va_list ap) | ||
39 | { | ||
40 | int ret = -1; | ||
41 | va_list ap2; | ||
42 | char *string, *newstr; | ||
43 | size_t len; | ||
44 | |||
45 | VA_COPY(ap2, ap); | ||
46 | if ((string = malloc(INIT_SZ)) == NULL) | ||
47 | goto fail; | ||
48 | |||
49 | ret = vsnprintf(string, INIT_SZ, fmt, ap2); | ||
50 | if (ret >= 0 && ret < INIT_SZ) { /* succeeded with initial alloc */ | ||
51 | *str = string; | ||
52 | } else if (ret == INT_MAX) { /* shouldn't happen */ | ||
53 | goto fail; | ||
54 | } else { /* bigger than initial, realloc allowing for nul */ | ||
55 | len = (size_t)ret + 1; | ||
56 | if ((newstr = realloc(string, len)) == NULL) { | ||
57 | free(string); | ||
58 | goto fail; | ||
59 | } else { | ||
60 | va_end(ap2); | ||
61 | VA_COPY(ap2, ap); | ||
62 | ret = vsnprintf(newstr, len, fmt, ap2); | ||
63 | if (ret >= 0 && (size_t)ret < len) { | ||
64 | *str = newstr; | ||
65 | } else { /* failed with realloc'ed string, give up */ | ||
66 | free(newstr); | ||
67 | goto fail; | ||
68 | } | ||
69 | } | ||
70 | } | ||
71 | va_end(ap2); | ||
72 | return (ret); | ||
73 | |||
74 | fail: | ||
75 | *str = NULL; | ||
76 | errno = ENOMEM; | ||
77 | va_end(ap2); | ||
78 | return (-1); | ||
79 | } | ||
80 | #endif | ||
81 | |||
82 | #ifndef HAVE_ASPRINTF | ||
83 | int asprintf(char **str, const char *fmt, ...) | ||
84 | { | ||
85 | va_list ap; | ||
86 | int ret; | ||
87 | |||
88 | *str = NULL; | ||
89 | va_start(ap, fmt); | ||
90 | ret = vasprintf(str, fmt, ap); | ||
91 | va_end(ap); | ||
92 | |||
93 | return ret; | ||
94 | } | ||
95 | #endif | ||
diff --git a/openbsd-compat/bsd-closefrom.c b/openbsd-compat/bsd-closefrom.c index 61a9fa391..5b7b94ae4 100644 --- a/openbsd-compat/bsd-closefrom.c +++ b/openbsd-compat/bsd-closefrom.c | |||
@@ -46,7 +46,7 @@ | |||
46 | # define OPEN_MAX 256 | 46 | # define OPEN_MAX 256 |
47 | #endif | 47 | #endif |
48 | 48 | ||
49 | RCSID("$Id: bsd-closefrom.c,v 1.1 2004/08/15 08:41:00 djm Exp $"); | 49 | RCSID("$Id: bsd-closefrom.c,v 1.2 2005/11/10 08:29:13 dtucker Exp $"); |
50 | 50 | ||
51 | #ifndef lint | 51 | #ifndef lint |
52 | static const char sudorcsid[] = "$Sudo: closefrom.c,v 1.6 2004/06/01 20:51:56 millert Exp $"; | 52 | static const char sudorcsid[] = "$Sudo: closefrom.c,v 1.6 2004/06/01 20:51:56 millert Exp $"; |
@@ -67,7 +67,7 @@ closefrom(int lowfd) | |||
67 | 67 | ||
68 | /* Check for a /proc/$$/fd directory. */ | 68 | /* Check for a /proc/$$/fd directory. */ |
69 | len = snprintf(fdpath, sizeof(fdpath), "/proc/%ld/fd", (long)getpid()); | 69 | len = snprintf(fdpath, sizeof(fdpath), "/proc/%ld/fd", (long)getpid()); |
70 | if (len != -1 && len <= sizeof(fdpath) && (dirp = opendir(fdpath))) { | 70 | if (len >= 0 && (u_int)len <= sizeof(fdpath) && (dirp = opendir(fdpath))) { |
71 | while ((dent = readdir(dirp)) != NULL) { | 71 | while ((dent = readdir(dirp)) != NULL) { |
72 | fd = strtol(dent->d_name, &endp, 10); | 72 | fd = strtol(dent->d_name, &endp, 10); |
73 | if (dent->d_name != endp && *endp == '\0' && | 73 | if (dent->d_name != endp && *endp == '\0' && |
diff --git a/openbsd-compat/bsd-misc.c b/openbsd-compat/bsd-misc.c index 6ba9bd986..d32b054d7 100644 --- a/openbsd-compat/bsd-misc.c +++ b/openbsd-compat/bsd-misc.c | |||
@@ -18,7 +18,7 @@ | |||
18 | #include "includes.h" | 18 | #include "includes.h" |
19 | #include "xmalloc.h" | 19 | #include "xmalloc.h" |
20 | 20 | ||
21 | RCSID("$Id: bsd-misc.c,v 1.27 2005/05/27 11:13:41 dtucker Exp $"); | 21 | RCSID("$Id: bsd-misc.c,v 1.28 2005/11/01 22:07:31 dtucker Exp $"); |
22 | 22 | ||
23 | #ifndef HAVE___PROGNAME | 23 | #ifndef HAVE___PROGNAME |
24 | char *__progname; | 24 | char *__progname; |
@@ -223,10 +223,7 @@ strdup(const char *str) | |||
223 | len = strlen(str) + 1; | 223 | len = strlen(str) + 1; |
224 | cp = malloc(len); | 224 | cp = malloc(len); |
225 | if (cp != NULL) | 225 | if (cp != NULL) |
226 | if (strlcpy(cp, str, len) != len) { | 226 | return(memcpy(cp, str, len)); |
227 | free(cp); | 227 | return NULL; |
228 | return NULL; | ||
229 | } | ||
230 | return cp; | ||
231 | } | 228 | } |
232 | #endif | 229 | #endif |
diff --git a/openbsd-compat/bsd-snprintf.c b/openbsd-compat/bsd-snprintf.c index b5a7ef7a0..e4ba154fd 100644 --- a/openbsd-compat/bsd-snprintf.c +++ b/openbsd-compat/bsd-snprintf.c | |||
@@ -45,45 +45,82 @@ | |||
45 | * missing. Some systems only have snprintf() but not vsnprintf(), so | 45 | * missing. Some systems only have snprintf() but not vsnprintf(), so |
46 | * the code is now broken down under HAVE_SNPRINTF and HAVE_VSNPRINTF. | 46 | * the code is now broken down under HAVE_SNPRINTF and HAVE_VSNPRINTF. |
47 | * | 47 | * |
48 | * Ben Lindstrom <mouring@eviladmin.org> 09/27/00 for OpenSSH | 48 | * Andrew Tridgell (tridge@samba.org) Oct 1998 |
49 | * Welcome to the world of %lld and %qd support. With other | 49 | * fixed handling of %.0f |
50 | * long long support. This is needed for sftp-server to work | 50 | * added test for HAVE_LONG_DOUBLE |
51 | * right. | ||
52 | * | 51 | * |
53 | * Ben Lindstrom <mouring@eviladmin.org> 02/12/01 for OpenSSH | 52 | * tridge@samba.org, idra@samba.org, April 2001 |
54 | * Removed all hint of VARARGS stuff and banished it to the void, | 53 | * got rid of fcvt code (twas buggy and made testing harder) |
55 | * and did a bit of KNF style work to make things a bit more | 54 | * added C99 semantics |
56 | * acceptable. Consider stealing from mutt or enlightenment. | 55 | * |
56 | * date: 2002/12/19 19:56:31; author: herb; state: Exp; lines: +2 -0 | ||
57 | * actually print args for %g and %e | ||
58 | * | ||
59 | * date: 2002/06/03 13:37:52; author: jmcd; state: Exp; lines: +8 -0 | ||
60 | * Since includes.h isn't included here, VA_COPY has to be defined here. I don't | ||
61 | * see any include file that is guaranteed to be here, so I'm defining it | ||
62 | * locally. Fixes AIX and Solaris builds. | ||
63 | * | ||
64 | * date: 2002/06/03 03:07:24; author: tridge; state: Exp; lines: +5 -13 | ||
65 | * put the ifdef for HAVE_VA_COPY in one place rather than in lots of | ||
66 | * functions | ||
67 | * | ||
68 | * date: 2002/05/17 14:51:22; author: jmcd; state: Exp; lines: +21 -4 | ||
69 | * Fix usage of va_list passed as an arg. Use __va_copy before using it | ||
70 | * when it exists. | ||
71 | * | ||
72 | * date: 2002/04/16 22:38:04; author: idra; state: Exp; lines: +20 -14 | ||
73 | * Fix incorrect zpadlen handling in fmtfp. | ||
74 | * Thanks to Ollie Oldham <ollie.oldham@metro-optix.com> for spotting it. | ||
75 | * few mods to make it easier to compile the tests. | ||
76 | * addedd the "Ollie" test to the floating point ones. | ||
77 | * | ||
78 | * Martin Pool (mbp@samba.org) April 2003 | ||
79 | * Remove NO_CONFIG_H so that the test case can be built within a source | ||
80 | * tree with less trouble. | ||
81 | * Remove unnecessary SAFE_FREE() definition. | ||
82 | * | ||
83 | * Martin Pool (mbp@samba.org) May 2003 | ||
84 | * Put in a prototype for dummy_snprintf() to quiet compiler warnings. | ||
85 | * | ||
86 | * Move #endif to make sure VA_COPY, LDOUBLE, etc are defined even | ||
87 | * if the C library has some snprintf functions already. | ||
57 | **************************************************************/ | 88 | **************************************************************/ |
58 | 89 | ||
59 | #include "includes.h" | 90 | #include "includes.h" |
60 | 91 | ||
61 | RCSID("$Id: bsd-snprintf.c,v 1.9 2004/09/23 11:35:09 dtucker Exp $"); | 92 | RCSID("$Id: bsd-snprintf.c,v 1.11 2005/12/17 11:32:04 dtucker Exp $"); |
62 | 93 | ||
63 | #if defined(BROKEN_SNPRINTF) /* For those with broken snprintf() */ | 94 | #if defined(BROKEN_SNPRINTF) /* For those with broken snprintf() */ |
64 | # undef HAVE_SNPRINTF | 95 | # undef HAVE_SNPRINTF |
65 | # undef HAVE_VSNPRINTF | 96 | # undef HAVE_VSNPRINTF |
66 | #endif | 97 | #endif |
67 | 98 | ||
68 | #if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) | 99 | #ifndef VA_COPY |
69 | 100 | # ifdef HAVE_VA_COPY | |
70 | static void | 101 | # define VA_COPY(dest, src) va_copy(dest, src) |
71 | dopr(char *buffer, size_t maxlen, const char *format, va_list args); | 102 | # else |
72 | 103 | # ifdef HAVE___VA_COPY | |
73 | static void | 104 | # define VA_COPY(dest, src) __va_copy(dest, src) |
74 | fmtstr(char *buffer, size_t *currlen, size_t maxlen, char *value, int flags, | 105 | # else |
75 | int min, int max); | 106 | # define VA_COPY(dest, src) (dest) = (src) |
107 | # endif | ||
108 | # endif | ||
109 | #endif | ||
76 | 110 | ||
77 | static void | 111 | #if !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) |
78 | fmtint(char *buffer, size_t *currlen, size_t maxlen, long value, int base, | ||
79 | int min, int max, int flags); | ||
80 | 112 | ||
81 | static void | 113 | #ifdef HAVE_LONG_DOUBLE |
82 | fmtfp(char *buffer, size_t *currlen, size_t maxlen, long double fvalue, | 114 | # define LDOUBLE long double |
83 | int min, int max, int flags); | 115 | #else |
116 | # define LDOUBLE double | ||
117 | #endif | ||
84 | 118 | ||
85 | static void | 119 | #ifdef HAVE_LONG_LONG |
86 | dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c); | 120 | # define LLONG long long |
121 | #else | ||
122 | # define LLONG long | ||
123 | #endif | ||
87 | 124 | ||
88 | /* | 125 | /* |
89 | * dopr(): poor man's version of doprintf | 126 | * dopr(): poor man's version of doprintf |
@@ -109,28 +146,49 @@ dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c); | |||
109 | #define DP_F_UNSIGNED (1 << 6) | 146 | #define DP_F_UNSIGNED (1 << 6) |
110 | 147 | ||
111 | /* Conversion Flags */ | 148 | /* Conversion Flags */ |
112 | #define DP_C_SHORT 1 | 149 | #define DP_C_SHORT 1 |
113 | #define DP_C_LONG 2 | 150 | #define DP_C_LONG 2 |
114 | #define DP_C_LDOUBLE 3 | 151 | #define DP_C_LDOUBLE 3 |
115 | #define DP_C_LONG_LONG 4 | 152 | #define DP_C_LLONG 4 |
116 | 153 | ||
117 | #define char_to_int(p) (p - '0') | 154 | #define char_to_int(p) ((p)- '0') |
118 | #define abs_val(p) (p < 0 ? -p : p) | 155 | #ifndef MAX |
119 | 156 | # define MAX(p,q) (((p) >= (q)) ? (p) : (q)) | |
157 | #endif | ||
120 | 158 | ||
121 | static void | 159 | static size_t dopr(char *buffer, size_t maxlen, const char *format, |
122 | dopr(char *buffer, size_t maxlen, const char *format, va_list args) | 160 | va_list args_in); |
161 | static void fmtstr(char *buffer, size_t *currlen, size_t maxlen, | ||
162 | char *value, int flags, int min, int max); | ||
163 | static void fmtint(char *buffer, size_t *currlen, size_t maxlen, | ||
164 | long value, int base, int min, int max, int flags); | ||
165 | static void fmtfp(char *buffer, size_t *currlen, size_t maxlen, | ||
166 | LDOUBLE fvalue, int min, int max, int flags); | ||
167 | static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c); | ||
168 | |||
169 | static size_t dopr(char *buffer, size_t maxlen, const char *format, va_list args_in) | ||
123 | { | 170 | { |
124 | char *strvalue, ch; | 171 | char ch; |
125 | long value; | 172 | LLONG value; |
126 | long double fvalue; | 173 | LDOUBLE fvalue; |
127 | int min = 0, max = -1, state = DP_S_DEFAULT, flags = 0, cflags = 0; | 174 | char *strvalue; |
128 | size_t currlen = 0; | 175 | int min; |
129 | 176 | int max; | |
177 | int state; | ||
178 | int flags; | ||
179 | int cflags; | ||
180 | size_t currlen; | ||
181 | va_list args; | ||
182 | |||
183 | VA_COPY(args, args_in); | ||
184 | |||
185 | state = DP_S_DEFAULT; | ||
186 | currlen = flags = cflags = min = 0; | ||
187 | max = -1; | ||
130 | ch = *format++; | 188 | ch = *format++; |
131 | 189 | ||
132 | while (state != DP_S_DONE) { | 190 | while (state != DP_S_DONE) { |
133 | if ((ch == '\0') || (currlen >= maxlen)) | 191 | if (ch == '\0') |
134 | state = DP_S_DONE; | 192 | state = DP_S_DONE; |
135 | 193 | ||
136 | switch(state) { | 194 | switch(state) { |
@@ -138,7 +196,7 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args) | |||
138 | if (ch == '%') | 196 | if (ch == '%') |
139 | state = DP_S_FLAGS; | 197 | state = DP_S_FLAGS; |
140 | else | 198 | else |
141 | dopr_outch(buffer, &currlen, maxlen, ch); | 199 | dopr_outch (buffer, &currlen, maxlen, ch); |
142 | ch = *format++; | 200 | ch = *format++; |
143 | break; | 201 | break; |
144 | case DP_S_FLAGS: | 202 | case DP_S_FLAGS: |
@@ -170,34 +228,37 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args) | |||
170 | break; | 228 | break; |
171 | case DP_S_MIN: | 229 | case DP_S_MIN: |
172 | if (isdigit((unsigned char)ch)) { | 230 | if (isdigit((unsigned char)ch)) { |
173 | min = 10 * min + char_to_int (ch); | 231 | min = 10*min + char_to_int (ch); |
174 | ch = *format++; | 232 | ch = *format++; |
175 | } else if (ch == '*') { | 233 | } else if (ch == '*') { |
176 | min = va_arg (args, int); | 234 | min = va_arg (args, int); |
177 | ch = *format++; | 235 | ch = *format++; |
178 | state = DP_S_DOT; | 236 | state = DP_S_DOT; |
179 | } else | 237 | } else { |
180 | state = DP_S_DOT; | 238 | state = DP_S_DOT; |
239 | } | ||
181 | break; | 240 | break; |
182 | case DP_S_DOT: | 241 | case DP_S_DOT: |
183 | if (ch == '.') { | 242 | if (ch == '.') { |
184 | state = DP_S_MAX; | 243 | state = DP_S_MAX; |
185 | ch = *format++; | 244 | ch = *format++; |
186 | } else | 245 | } else { |
187 | state = DP_S_MOD; | 246 | state = DP_S_MOD; |
247 | } | ||
188 | break; | 248 | break; |
189 | case DP_S_MAX: | 249 | case DP_S_MAX: |
190 | if (isdigit((unsigned char)ch)) { | 250 | if (isdigit((unsigned char)ch)) { |
191 | if (max < 0) | 251 | if (max < 0) |
192 | max = 0; | 252 | max = 0; |
193 | max = 10 * max + char_to_int(ch); | 253 | max = 10*max + char_to_int (ch); |
194 | ch = *format++; | 254 | ch = *format++; |
195 | } else if (ch == '*') { | 255 | } else if (ch == '*') { |
196 | max = va_arg (args, int); | 256 | max = va_arg (args, int); |
197 | ch = *format++; | 257 | ch = *format++; |
198 | state = DP_S_MOD; | 258 | state = DP_S_MOD; |
199 | } else | 259 | } else { |
200 | state = DP_S_MOD; | 260 | state = DP_S_MOD; |
261 | } | ||
201 | break; | 262 | break; |
202 | case DP_S_MOD: | 263 | case DP_S_MOD: |
203 | switch (ch) { | 264 | switch (ch) { |
@@ -208,15 +269,11 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args) | |||
208 | case 'l': | 269 | case 'l': |
209 | cflags = DP_C_LONG; | 270 | cflags = DP_C_LONG; |
210 | ch = *format++; | 271 | ch = *format++; |
211 | if (ch == 'l') { | 272 | if (ch == 'l') { /* It's a long long */ |
212 | cflags = DP_C_LONG_LONG; | 273 | cflags = DP_C_LLONG; |
213 | ch = *format++; | 274 | ch = *format++; |
214 | } | 275 | } |
215 | break; | 276 | break; |
216 | case 'q': | ||
217 | cflags = DP_C_LONG_LONG; | ||
218 | ch = *format++; | ||
219 | break; | ||
220 | case 'L': | 277 | case 'L': |
221 | cflags = DP_C_LDOUBLE; | 278 | cflags = DP_C_LDOUBLE; |
222 | ch = *format++; | 279 | ch = *format++; |
@@ -231,37 +288,37 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args) | |||
231 | case 'd': | 288 | case 'd': |
232 | case 'i': | 289 | case 'i': |
233 | if (cflags == DP_C_SHORT) | 290 | if (cflags == DP_C_SHORT) |
234 | value = va_arg(args, int); | 291 | value = va_arg (args, int); |
235 | else if (cflags == DP_C_LONG) | 292 | else if (cflags == DP_C_LONG) |
236 | value = va_arg(args, long int); | 293 | value = va_arg (args, long int); |
237 | else if (cflags == DP_C_LONG_LONG) | 294 | else if (cflags == DP_C_LLONG) |
238 | value = va_arg (args, long long); | 295 | value = va_arg (args, LLONG); |
239 | else | 296 | else |
240 | value = va_arg (args, int); | 297 | value = va_arg (args, int); |
241 | fmtint(buffer, &currlen, maxlen, value, 10, min, max, flags); | 298 | fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags); |
242 | break; | 299 | break; |
243 | case 'o': | 300 | case 'o': |
244 | flags |= DP_F_UNSIGNED; | 301 | flags |= DP_F_UNSIGNED; |
245 | if (cflags == DP_C_SHORT) | 302 | if (cflags == DP_C_SHORT) |
246 | value = va_arg(args, unsigned int); | 303 | value = va_arg (args, unsigned int); |
247 | else if (cflags == DP_C_LONG) | 304 | else if (cflags == DP_C_LONG) |
248 | value = va_arg(args, unsigned long int); | 305 | value = (long)va_arg (args, unsigned long int); |
249 | else if (cflags == DP_C_LONG_LONG) | 306 | else if (cflags == DP_C_LLONG) |
250 | value = va_arg(args, unsigned long long); | 307 | value = (long)va_arg (args, unsigned LLONG); |
251 | else | 308 | else |
252 | value = va_arg(args, unsigned int); | 309 | value = (long)va_arg (args, unsigned int); |
253 | fmtint(buffer, &currlen, maxlen, value, 8, min, max, flags); | 310 | fmtint (buffer, &currlen, maxlen, value, 8, min, max, flags); |
254 | break; | 311 | break; |
255 | case 'u': | 312 | case 'u': |
256 | flags |= DP_F_UNSIGNED; | 313 | flags |= DP_F_UNSIGNED; |
257 | if (cflags == DP_C_SHORT) | 314 | if (cflags == DP_C_SHORT) |
258 | value = va_arg(args, unsigned int); | 315 | value = va_arg (args, unsigned int); |
259 | else if (cflags == DP_C_LONG) | 316 | else if (cflags == DP_C_LONG) |
260 | value = va_arg(args, unsigned long int); | 317 | value = (long)va_arg (args, unsigned long int); |
261 | else if (cflags == DP_C_LONG_LONG) | 318 | else if (cflags == DP_C_LLONG) |
262 | value = va_arg(args, unsigned long long); | 319 | value = (LLONG)va_arg (args, unsigned LLONG); |
263 | else | 320 | else |
264 | value = va_arg(args, unsigned int); | 321 | value = (long)va_arg (args, unsigned int); |
265 | fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags); | 322 | fmtint (buffer, &currlen, maxlen, value, 10, min, max, flags); |
266 | break; | 323 | break; |
267 | case 'X': | 324 | case 'X': |
@@ -269,79 +326,86 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args) | |||
269 | case 'x': | 326 | case 'x': |
270 | flags |= DP_F_UNSIGNED; | 327 | flags |= DP_F_UNSIGNED; |
271 | if (cflags == DP_C_SHORT) | 328 | if (cflags == DP_C_SHORT) |
272 | value = va_arg(args, unsigned int); | 329 | value = va_arg (args, unsigned int); |
273 | else if (cflags == DP_C_LONG) | 330 | else if (cflags == DP_C_LONG) |
274 | value = va_arg(args, unsigned long int); | 331 | value = (long)va_arg (args, unsigned long int); |
275 | else if (cflags == DP_C_LONG_LONG) | 332 | else if (cflags == DP_C_LLONG) |
276 | value = va_arg(args, unsigned long long); | 333 | value = (LLONG)va_arg (args, unsigned LLONG); |
277 | else | 334 | else |
278 | value = va_arg(args, unsigned int); | 335 | value = (long)va_arg (args, unsigned int); |
279 | fmtint(buffer, &currlen, maxlen, value, 16, min, max, flags); | 336 | fmtint (buffer, &currlen, maxlen, value, 16, min, max, flags); |
280 | break; | 337 | break; |
281 | case 'f': | 338 | case 'f': |
282 | if (cflags == DP_C_LDOUBLE) | 339 | if (cflags == DP_C_LDOUBLE) |
283 | fvalue = va_arg(args, long double); | 340 | fvalue = va_arg (args, LDOUBLE); |
284 | else | 341 | else |
285 | fvalue = va_arg(args, double); | 342 | fvalue = va_arg (args, double); |
286 | /* um, floating point? */ | 343 | /* um, floating point? */ |
287 | fmtfp(buffer, &currlen, maxlen, fvalue, min, max, flags); | 344 | fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags); |
288 | break; | 345 | break; |
289 | case 'E': | 346 | case 'E': |
290 | flags |= DP_F_UP; | 347 | flags |= DP_F_UP; |
291 | case 'e': | 348 | case 'e': |
292 | if (cflags == DP_C_LDOUBLE) | 349 | if (cflags == DP_C_LDOUBLE) |
293 | fvalue = va_arg(args, long double); | 350 | fvalue = va_arg (args, LDOUBLE); |
294 | else | 351 | else |
295 | fvalue = va_arg(args, double); | 352 | fvalue = va_arg (args, double); |
353 | fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags); | ||
296 | break; | 354 | break; |
297 | case 'G': | 355 | case 'G': |
298 | flags |= DP_F_UP; | 356 | flags |= DP_F_UP; |
299 | case 'g': | 357 | case 'g': |
300 | if (cflags == DP_C_LDOUBLE) | 358 | if (cflags == DP_C_LDOUBLE) |
301 | fvalue = va_arg(args, long double); | 359 | fvalue = va_arg (args, LDOUBLE); |
302 | else | 360 | else |
303 | fvalue = va_arg(args, double); | 361 | fvalue = va_arg (args, double); |
362 | fmtfp (buffer, &currlen, maxlen, fvalue, min, max, flags); | ||
304 | break; | 363 | break; |
305 | case 'c': | 364 | case 'c': |
306 | dopr_outch(buffer, &currlen, maxlen, va_arg(args, int)); | 365 | dopr_outch (buffer, &currlen, maxlen, va_arg (args, int)); |
307 | break; | 366 | break; |
308 | case 's': | 367 | case 's': |
309 | strvalue = va_arg(args, char *); | 368 | strvalue = va_arg (args, char *); |
310 | if (max < 0) | 369 | if (!strvalue) strvalue = "(NULL)"; |
311 | max = maxlen; /* ie, no max */ | 370 | if (max == -1) { |
312 | fmtstr(buffer, &currlen, maxlen, strvalue, flags, min, max); | 371 | max = strlen(strvalue); |
372 | } | ||
373 | if (min > 0 && max >= 0 && min > max) max = min; | ||
374 | fmtstr (buffer, &currlen, maxlen, strvalue, flags, min, max); | ||
313 | break; | 375 | break; |
314 | case 'p': | 376 | case 'p': |
315 | strvalue = va_arg(args, void *); | 377 | strvalue = va_arg (args, void *); |
316 | fmtint(buffer, &currlen, maxlen, (long) strvalue, 16, min, max, flags); | 378 | fmtint (buffer, &currlen, maxlen, (long) strvalue, 16, min, max, flags); |
317 | break; | 379 | break; |
318 | case 'n': | 380 | case 'n': |
319 | if (cflags == DP_C_SHORT) { | 381 | if (cflags == DP_C_SHORT) { |
320 | short int *num; | 382 | short int *num; |
321 | num = va_arg(args, short int *); | 383 | num = va_arg (args, short int *); |
322 | *num = currlen; | 384 | *num = currlen; |
323 | } else if (cflags == DP_C_LONG) { | 385 | } else if (cflags == DP_C_LONG) { |
324 | long int *num; | 386 | long int *num; |
325 | num = va_arg(args, long int *); | 387 | num = va_arg (args, long int *); |
326 | *num = currlen; | 388 | *num = (long int)currlen; |
327 | } else if (cflags == DP_C_LONG_LONG) { | 389 | } else if (cflags == DP_C_LLONG) { |
328 | long long *num; | 390 | LLONG *num; |
329 | num = va_arg(args, long long *); | 391 | num = va_arg (args, LLONG *); |
330 | *num = currlen; | 392 | *num = (LLONG)currlen; |
331 | } else { | 393 | } else { |
332 | int *num; | 394 | int *num; |
333 | num = va_arg(args, int *); | 395 | num = va_arg (args, int *); |
334 | *num = currlen; | 396 | *num = currlen; |
335 | } | 397 | } |
336 | break; | 398 | break; |
337 | case '%': | 399 | case '%': |
338 | dopr_outch(buffer, &currlen, maxlen, ch); | 400 | dopr_outch (buffer, &currlen, maxlen, ch); |
339 | break; | 401 | break; |
340 | case 'w': /* not supported yet, treat as next char */ | 402 | case 'w': |
403 | /* not supported yet, treat as next char */ | ||
341 | ch = *format++; | 404 | ch = *format++; |
342 | break; | 405 | break; |
343 | default: /* Unknown, skip */ | 406 | default: |
344 | break; | 407 | /* Unknown, skip */ |
408 | break; | ||
345 | } | 409 | } |
346 | ch = *format++; | 410 | ch = *format++; |
347 | state = DP_S_DEFAULT; | 411 | state = DP_S_DEFAULT; |
@@ -350,24 +414,33 @@ dopr(char *buffer, size_t maxlen, const char *format, va_list args) | |||
350 | break; | 414 | break; |
351 | case DP_S_DONE: | 415 | case DP_S_DONE: |
352 | break; | 416 | break; |
353 | default: /* hmm? */ | 417 | default: |
418 | /* hmm? */ | ||
354 | break; /* some picky compilers need this */ | 419 | break; /* some picky compilers need this */ |
355 | } | 420 | } |
356 | } | 421 | } |
357 | if (currlen < maxlen - 1) | 422 | if (maxlen != 0) { |
358 | buffer[currlen] = '\0'; | 423 | if (currlen < maxlen - 1) |
359 | else | 424 | buffer[currlen] = '\0'; |
360 | buffer[maxlen - 1] = '\0'; | 425 | else if (maxlen > 0) |
426 | buffer[maxlen - 1] = '\0'; | ||
427 | } | ||
428 | |||
429 | return currlen; | ||
361 | } | 430 | } |
362 | 431 | ||
363 | static void | 432 | static void fmtstr(char *buffer, size_t *currlen, size_t maxlen, |
364 | fmtstr(char *buffer, size_t *currlen, size_t maxlen, | 433 | char *value, int flags, int min, int max) |
365 | char *value, int flags, int min, int max) | ||
366 | { | 434 | { |
367 | int cnt = 0, padlen, strln; /* amount to pad */ | 435 | int padlen, strln; /* amount to pad */ |
368 | 436 | int cnt = 0; | |
369 | if (value == 0) | 437 | |
438 | #ifdef DEBUG_SNPRINTF | ||
439 | printf("fmtstr min=%d max=%d s=[%s]\n", min, max, value); | ||
440 | #endif | ||
441 | if (value == 0) { | ||
370 | value = "<NULL>"; | 442 | value = "<NULL>"; |
443 | } | ||
371 | 444 | ||
372 | for (strln = 0; strln < max && value[strln]; ++strln); /* strlen */ | 445 | for (strln = 0; strln < max && value[strln]; ++strln); /* strlen */ |
373 | padlen = min - strln; | 446 | padlen = min - strln; |
@@ -375,18 +448,18 @@ fmtstr(char *buffer, size_t *currlen, size_t maxlen, | |||
375 | padlen = 0; | 448 | padlen = 0; |
376 | if (flags & DP_F_MINUS) | 449 | if (flags & DP_F_MINUS) |
377 | padlen = -padlen; /* Left Justify */ | 450 | padlen = -padlen; /* Left Justify */ |
378 | 451 | ||
379 | while ((padlen > 0) && (cnt < max)) { | 452 | while ((padlen > 0) && (cnt < max)) { |
380 | dopr_outch(buffer, currlen, maxlen, ' '); | 453 | dopr_outch (buffer, currlen, maxlen, ' '); |
381 | --padlen; | 454 | --padlen; |
382 | ++cnt; | 455 | ++cnt; |
383 | } | 456 | } |
384 | while (*value && (cnt < max)) { | 457 | while (*value && (cnt < max)) { |
385 | dopr_outch(buffer, currlen, maxlen, *value++); | 458 | dopr_outch (buffer, currlen, maxlen, *value++); |
386 | ++cnt; | 459 | ++cnt; |
387 | } | 460 | } |
388 | while ((padlen < 0) && (cnt < max)) { | 461 | while ((padlen < 0) && (cnt < max)) { |
389 | dopr_outch(buffer, currlen, maxlen, ' '); | 462 | dopr_outch (buffer, currlen, maxlen, ' '); |
390 | ++padlen; | 463 | ++padlen; |
391 | ++cnt; | 464 | ++cnt; |
392 | } | 465 | } |
@@ -394,49 +467,49 @@ fmtstr(char *buffer, size_t *currlen, size_t maxlen, | |||
394 | 467 | ||
395 | /* Have to handle DP_F_NUM (ie 0x and 0 alternates) */ | 468 | /* Have to handle DP_F_NUM (ie 0x and 0 alternates) */ |
396 | 469 | ||
397 | static void | 470 | static void fmtint(char *buffer, size_t *currlen, size_t maxlen, |
398 | fmtint(char *buffer, size_t *currlen, size_t maxlen, | 471 | long value, int base, int min, int max, int flags) |
399 | long value, int base, int min, int max, int flags) | ||
400 | { | 472 | { |
473 | int signvalue = 0; | ||
401 | unsigned long uvalue; | 474 | unsigned long uvalue; |
402 | char convert[20]; | 475 | char convert[20]; |
403 | int signvalue = 0, place = 0, caps = 0; | 476 | int place = 0; |
404 | int spadlen = 0; /* amount to space pad */ | 477 | int spadlen = 0; /* amount to space pad */ |
405 | int zpadlen = 0; /* amount to zero pad */ | 478 | int zpadlen = 0; /* amount to zero pad */ |
406 | 479 | int caps = 0; | |
480 | |||
407 | if (max < 0) | 481 | if (max < 0) |
408 | max = 0; | 482 | max = 0; |
409 | 483 | ||
410 | uvalue = value; | 484 | uvalue = value; |
411 | 485 | ||
412 | if (!(flags & DP_F_UNSIGNED)) { | 486 | if(!(flags & DP_F_UNSIGNED)) { |
413 | if (value < 0) { | 487 | if( value < 0 ) { |
414 | signvalue = '-'; | 488 | signvalue = '-'; |
415 | uvalue = -value; | 489 | uvalue = -value; |
416 | } else if (flags & DP_F_PLUS) /* Do a sign (+/i) */ | 490 | } else { |
417 | signvalue = '+'; | 491 | if (flags & DP_F_PLUS) /* Do a sign (+/i) */ |
418 | else if (flags & DP_F_SPACE) | 492 | signvalue = '+'; |
419 | signvalue = ' '; | 493 | else if (flags & DP_F_SPACE) |
494 | signvalue = ' '; | ||
495 | } | ||
420 | } | 496 | } |
421 | 497 | ||
422 | if (flags & DP_F_UP) | 498 | if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */ |
423 | caps = 1; /* Should characters be upper case? */ | 499 | |
424 | do { | 500 | do { |
425 | convert[place++] = | 501 | convert[place++] = |
426 | (caps ? "0123456789ABCDEF" : "0123456789abcdef") | 502 | (caps? "0123456789ABCDEF":"0123456789abcdef") |
427 | [uvalue % (unsigned)base]; | 503 | [uvalue % (unsigned)base ]; |
428 | uvalue = (uvalue / (unsigned)base ); | 504 | uvalue = (uvalue / (unsigned)base ); |
429 | } while (uvalue && (place < 20)); | 505 | } while(uvalue && (place < 20)); |
430 | if (place == 20) | 506 | if (place == 20) place--; |
431 | place--; | ||
432 | convert[place] = 0; | 507 | convert[place] = 0; |
433 | 508 | ||
434 | zpadlen = max - place; | 509 | zpadlen = max - place; |
435 | spadlen = min - MAX (max, place) - (signvalue ? 1 : 0); | 510 | spadlen = min - MAX (max, place) - (signvalue ? 1 : 0); |
436 | if (zpadlen < 0) | 511 | if (zpadlen < 0) zpadlen = 0; |
437 | zpadlen = 0; | 512 | if (spadlen < 0) spadlen = 0; |
438 | if (spadlen < 0) | ||
439 | spadlen = 0; | ||
440 | if (flags & DP_F_ZERO) { | 513 | if (flags & DP_F_ZERO) { |
441 | zpadlen = MAX(zpadlen, spadlen); | 514 | zpadlen = MAX(zpadlen, spadlen); |
442 | spadlen = 0; | 515 | spadlen = 0; |
@@ -444,27 +517,32 @@ fmtint(char *buffer, size_t *currlen, size_t maxlen, | |||
444 | if (flags & DP_F_MINUS) | 517 | if (flags & DP_F_MINUS) |
445 | spadlen = -spadlen; /* Left Justifty */ | 518 | spadlen = -spadlen; /* Left Justifty */ |
446 | 519 | ||
520 | #ifdef DEBUG_SNPRINTF | ||
521 | printf("zpad: %d, spad: %d, min: %d, max: %d, place: %d\n", | ||
522 | zpadlen, spadlen, min, max, place); | ||
523 | #endif | ||
524 | |||
447 | /* Spaces */ | 525 | /* Spaces */ |
448 | while (spadlen > 0) { | 526 | while (spadlen > 0) { |
449 | dopr_outch(buffer, currlen, maxlen, ' '); | 527 | dopr_outch (buffer, currlen, maxlen, ' '); |
450 | --spadlen; | 528 | --spadlen; |
451 | } | 529 | } |
452 | 530 | ||
453 | /* Sign */ | 531 | /* Sign */ |
454 | if (signvalue) | 532 | if (signvalue) |
455 | dopr_outch(buffer, currlen, maxlen, signvalue); | 533 | dopr_outch (buffer, currlen, maxlen, signvalue); |
456 | 534 | ||
457 | /* Zeros */ | 535 | /* Zeros */ |
458 | if (zpadlen > 0) { | 536 | if (zpadlen > 0) { |
459 | while (zpadlen > 0) { | 537 | while (zpadlen > 0) { |
460 | dopr_outch(buffer, currlen, maxlen, '0'); | 538 | dopr_outch (buffer, currlen, maxlen, '0'); |
461 | --zpadlen; | 539 | --zpadlen; |
462 | } | 540 | } |
463 | } | 541 | } |
464 | 542 | ||
465 | /* Digits */ | 543 | /* Digits */ |
466 | while (place > 0) | 544 | while (place > 0) |
467 | dopr_outch(buffer, currlen, maxlen, convert[--place]); | 545 | dopr_outch (buffer, currlen, maxlen, convert[--place]); |
468 | 546 | ||
469 | /* Left Justified spaces */ | 547 | /* Left Justified spaces */ |
470 | while (spadlen < 0) { | 548 | while (spadlen < 0) { |
@@ -473,11 +551,20 @@ fmtint(char *buffer, size_t *currlen, size_t maxlen, | |||
473 | } | 551 | } |
474 | } | 552 | } |
475 | 553 | ||
476 | static long double | 554 | static LDOUBLE abs_val(LDOUBLE value) |
477 | pow10(int exp) | ||
478 | { | 555 | { |
479 | long double result = 1; | 556 | LDOUBLE result = value; |
557 | |||
558 | if (value < 0) | ||
559 | result = -value; | ||
560 | |||
561 | return result; | ||
562 | } | ||
480 | 563 | ||
564 | static LDOUBLE POW10(int exp) | ||
565 | { | ||
566 | LDOUBLE result = 1; | ||
567 | |||
481 | while (exp) { | 568 | while (exp) { |
482 | result *= 10; | 569 | result *= 10; |
483 | exp--; | 570 | exp--; |
@@ -486,28 +573,69 @@ pow10(int exp) | |||
486 | return result; | 573 | return result; |
487 | } | 574 | } |
488 | 575 | ||
489 | static long | 576 | static LLONG ROUND(LDOUBLE value) |
490 | round(long double value) | ||
491 | { | 577 | { |
492 | long intpart = value; | 578 | LLONG intpart; |
493 | |||
494 | value -= intpart; | ||
495 | if (value >= 0.5) | ||
496 | intpart++; | ||
497 | 579 | ||
580 | intpart = (LLONG)value; | ||
581 | value = value - intpart; | ||
582 | if (value >= 0.5) intpart++; | ||
583 | |||
498 | return intpart; | 584 | return intpart; |
499 | } | 585 | } |
500 | 586 | ||
501 | static void | 587 | /* a replacement for modf that doesn't need the math library. Should |
502 | fmtfp(char *buffer, size_t *currlen, size_t maxlen, long double fvalue, | 588 | be portable, but slow */ |
503 | int min, int max, int flags) | 589 | static double my_modf(double x0, double *iptr) |
504 | { | 590 | { |
505 | char iconvert[20], fconvert[20]; | 591 | int i; |
506 | int signvalue = 0, iplace = 0, fplace = 0; | 592 | long l; |
593 | double x = x0; | ||
594 | double f = 1.0; | ||
595 | |||
596 | for (i=0;i<100;i++) { | ||
597 | l = (long)x; | ||
598 | if (l <= (x+1) && l >= (x-1)) break; | ||
599 | x *= 0.1; | ||
600 | f *= 10.0; | ||
601 | } | ||
602 | |||
603 | if (i == 100) { | ||
604 | /* yikes! the number is beyond what we can handle. What do we do? */ | ||
605 | (*iptr) = 0; | ||
606 | return 0; | ||
607 | } | ||
608 | |||
609 | if (i != 0) { | ||
610 | double i2; | ||
611 | double ret; | ||
612 | |||
613 | ret = my_modf(x0-l*f, &i2); | ||
614 | (*iptr) = l*f + i2; | ||
615 | return ret; | ||
616 | } | ||
617 | |||
618 | (*iptr) = l; | ||
619 | return x - (*iptr); | ||
620 | } | ||
621 | |||
622 | |||
623 | static void fmtfp (char *buffer, size_t *currlen, size_t maxlen, | ||
624 | LDOUBLE fvalue, int min, int max, int flags) | ||
625 | { | ||
626 | int signvalue = 0; | ||
627 | double ufvalue; | ||
628 | char iconvert[311]; | ||
629 | char fconvert[311]; | ||
630 | int iplace = 0; | ||
631 | int fplace = 0; | ||
507 | int padlen = 0; /* amount to pad */ | 632 | int padlen = 0; /* amount to pad */ |
508 | int zpadlen = 0, caps = 0; | 633 | int zpadlen = 0; |
509 | long intpart, fracpart; | 634 | int caps = 0; |
510 | long double ufvalue; | 635 | int idx; |
636 | double intpart; | ||
637 | double fracpart; | ||
638 | double temp; | ||
511 | 639 | ||
512 | /* | 640 | /* |
513 | * AIX manpage says the default is 0, but Solaris says the default | 641 | * AIX manpage says the default is 0, but Solaris says the default |
@@ -516,137 +644,159 @@ fmtfp(char *buffer, size_t *currlen, size_t maxlen, long double fvalue, | |||
516 | if (max < 0) | 644 | if (max < 0) |
517 | max = 6; | 645 | max = 6; |
518 | 646 | ||
519 | ufvalue = abs_val(fvalue); | 647 | ufvalue = abs_val (fvalue); |
520 | 648 | ||
521 | if (fvalue < 0) | 649 | if (fvalue < 0) { |
522 | signvalue = '-'; | 650 | signvalue = '-'; |
523 | else if (flags & DP_F_PLUS) /* Do a sign (+/i) */ | 651 | } else { |
524 | signvalue = '+'; | 652 | if (flags & DP_F_PLUS) { /* Do a sign (+/i) */ |
525 | else if (flags & DP_F_SPACE) | 653 | signvalue = '+'; |
526 | signvalue = ' '; | 654 | } else { |
655 | if (flags & DP_F_SPACE) | ||
656 | signvalue = ' '; | ||
657 | } | ||
658 | } | ||
527 | 659 | ||
528 | intpart = ufvalue; | 660 | #if 0 |
661 | if (flags & DP_F_UP) caps = 1; /* Should characters be upper case? */ | ||
662 | #endif | ||
663 | |||
664 | #if 0 | ||
665 | if (max == 0) ufvalue += 0.5; /* if max = 0 we must round */ | ||
666 | #endif | ||
529 | 667 | ||
530 | /* | 668 | /* |
531 | * Sorry, we only support 9 digits past the decimal because of our | 669 | * Sorry, we only support 16 digits past the decimal because of our |
532 | * conversion method | 670 | * conversion method |
533 | */ | 671 | */ |
534 | if (max > 9) | 672 | if (max > 16) |
535 | max = 9; | 673 | max = 16; |
536 | 674 | ||
537 | /* We "cheat" by converting the fractional part to integer by | 675 | /* We "cheat" by converting the fractional part to integer by |
538 | * multiplying by a factor of 10 | 676 | * multiplying by a factor of 10 |
539 | */ | 677 | */ |
540 | fracpart = round((pow10 (max)) * (ufvalue - intpart)); | ||
541 | 678 | ||
542 | if (fracpart >= pow10 (max)) { | 679 | temp = ufvalue; |
680 | my_modf(temp, &intpart); | ||
681 | |||
682 | fracpart = ROUND((POW10(max)) * (ufvalue - intpart)); | ||
683 | |||
684 | if (fracpart >= POW10(max)) { | ||
543 | intpart++; | 685 | intpart++; |
544 | fracpart -= pow10 (max); | 686 | fracpart -= POW10(max); |
545 | } | 687 | } |
546 | 688 | ||
547 | /* Convert integer part */ | 689 | /* Convert integer part */ |
548 | do { | 690 | do { |
691 | temp = intpart*0.1; | ||
692 | my_modf(temp, &intpart); | ||
693 | idx = (int) ((temp -intpart +0.05)* 10.0); | ||
694 | /* idx = (int) (((double)(temp*0.1) -intpart +0.05) *10.0); */ | ||
695 | /* printf ("%llf, %f, %x\n", temp, intpart, idx); */ | ||
549 | iconvert[iplace++] = | 696 | iconvert[iplace++] = |
550 | (caps ? "0123456789ABCDEF" : "0123456789abcdef") | 697 | (caps? "0123456789ABCDEF":"0123456789abcdef")[idx]; |
551 | [intpart % 10]; | 698 | } while (intpart && (iplace < 311)); |
552 | intpart = (intpart / 10); | 699 | if (iplace == 311) iplace--; |
553 | } while(intpart && (iplace < 20)); | ||
554 | if (iplace == 20) | ||
555 | iplace--; | ||
556 | iconvert[iplace] = 0; | 700 | iconvert[iplace] = 0; |
557 | 701 | ||
558 | /* Convert fractional part */ | 702 | /* Convert fractional part */ |
559 | do { | 703 | if (fracpart) |
560 | fconvert[fplace++] = | 704 | { |
561 | (caps ? "0123456789ABCDEF" : "0123456789abcdef") | 705 | do { |
562 | [fracpart % 10]; | 706 | temp = fracpart*0.1; |
563 | fracpart = (fracpart / 10); | 707 | my_modf(temp, &fracpart); |
564 | } while(fracpart && (fplace < 20)); | 708 | idx = (int) ((temp -fracpart +0.05)* 10.0); |
565 | if (fplace == 20) | 709 | /* idx = (int) ((((temp/10) -fracpart) +0.05) *10); */ |
566 | fplace--; | 710 | /* printf ("%lf, %lf, %ld\n", temp, fracpart, idx ); */ |
711 | fconvert[fplace++] = | ||
712 | (caps? "0123456789ABCDEF":"0123456789abcdef")[idx]; | ||
713 | } while(fracpart && (fplace < 311)); | ||
714 | if (fplace == 311) fplace--; | ||
715 | } | ||
567 | fconvert[fplace] = 0; | 716 | fconvert[fplace] = 0; |
568 | 717 | ||
569 | /* -1 for decimal point, another -1 if we are printing a sign */ | 718 | /* -1 for decimal point, another -1 if we are printing a sign */ |
570 | padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0); | 719 | padlen = min - iplace - max - 1 - ((signvalue) ? 1 : 0); |
571 | zpadlen = max - fplace; | 720 | zpadlen = max - fplace; |
572 | if (zpadlen < 0) | 721 | if (zpadlen < 0) zpadlen = 0; |
573 | zpadlen = 0; | ||
574 | if (padlen < 0) | 722 | if (padlen < 0) |
575 | padlen = 0; | 723 | padlen = 0; |
576 | if (flags & DP_F_MINUS) | 724 | if (flags & DP_F_MINUS) |
577 | padlen = -padlen; /* Left Justifty */ | 725 | padlen = -padlen; /* Left Justifty */ |
578 | 726 | ||
579 | if ((flags & DP_F_ZERO) && (padlen > 0)) { | 727 | if ((flags & DP_F_ZERO) && (padlen > 0)) { |
580 | if (signvalue) { | 728 | if (signvalue) { |
581 | dopr_outch(buffer, currlen, maxlen, signvalue); | 729 | dopr_outch (buffer, currlen, maxlen, signvalue); |
582 | --padlen; | 730 | --padlen; |
583 | signvalue = 0; | 731 | signvalue = 0; |
584 | } | 732 | } |
585 | while (padlen > 0) { | 733 | while (padlen > 0) { |
586 | dopr_outch(buffer, currlen, maxlen, '0'); | 734 | dopr_outch (buffer, currlen, maxlen, '0'); |
587 | --padlen; | 735 | --padlen; |
588 | } | 736 | } |
589 | } | 737 | } |
590 | while (padlen > 0) { | 738 | while (padlen > 0) { |
591 | dopr_outch(buffer, currlen, maxlen, ' '); | 739 | dopr_outch (buffer, currlen, maxlen, ' '); |
592 | --padlen; | 740 | --padlen; |
593 | } | 741 | } |
594 | if (signvalue) | 742 | if (signvalue) |
595 | dopr_outch(buffer, currlen, maxlen, signvalue); | 743 | dopr_outch (buffer, currlen, maxlen, signvalue); |
596 | 744 | ||
597 | while (iplace > 0) | 745 | while (iplace > 0) |
598 | dopr_outch(buffer, currlen, maxlen, iconvert[--iplace]); | 746 | dopr_outch (buffer, currlen, maxlen, iconvert[--iplace]); |
747 | |||
748 | #ifdef DEBUG_SNPRINTF | ||
749 | printf("fmtfp: fplace=%d zpadlen=%d\n", fplace, zpadlen); | ||
750 | #endif | ||
599 | 751 | ||
600 | /* | 752 | /* |
601 | * Decimal point. This should probably use locale to find the | 753 | * Decimal point. This should probably use locale to find the correct |
602 | * correct char to print out. | 754 | * char to print out. |
603 | */ | 755 | */ |
604 | dopr_outch(buffer, currlen, maxlen, '.'); | 756 | if (max > 0) { |
605 | 757 | dopr_outch (buffer, currlen, maxlen, '.'); | |
606 | while (fplace > 0) | 758 | |
607 | dopr_outch(buffer, currlen, maxlen, fconvert[--fplace]); | 759 | while (zpadlen > 0) { |
760 | dopr_outch (buffer, currlen, maxlen, '0'); | ||
761 | --zpadlen; | ||
762 | } | ||
608 | 763 | ||
609 | while (zpadlen > 0) { | 764 | while (fplace > 0) |
610 | dopr_outch(buffer, currlen, maxlen, '0'); | 765 | dopr_outch (buffer, currlen, maxlen, fconvert[--fplace]); |
611 | --zpadlen; | ||
612 | } | 766 | } |
613 | 767 | ||
614 | while (padlen < 0) { | 768 | while (padlen < 0) { |
615 | dopr_outch(buffer, currlen, maxlen, ' '); | 769 | dopr_outch (buffer, currlen, maxlen, ' '); |
616 | ++padlen; | 770 | ++padlen; |
617 | } | 771 | } |
618 | } | 772 | } |
619 | 773 | ||
620 | static void | 774 | static void dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c) |
621 | dopr_outch(char *buffer, size_t *currlen, size_t maxlen, char c) | ||
622 | { | 775 | { |
623 | if (*currlen < maxlen) | 776 | if (*currlen < maxlen) { |
624 | buffer[(*currlen)++] = c; | 777 | buffer[(*currlen)] = c; |
778 | } | ||
779 | (*currlen)++; | ||
625 | } | 780 | } |
626 | #endif /* !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) */ | 781 | #endif /* !defined(HAVE_SNPRINTF) || !defined(HAVE_VSNPRINTF) */ |
627 | 782 | ||
628 | #ifndef HAVE_VSNPRINTF | 783 | #if !defined(HAVE_VSNPRINTF) |
629 | int | 784 | int vsnprintf (char *str, size_t count, const char *fmt, va_list args) |
630 | vsnprintf(char *str, size_t count, const char *fmt, va_list args) | ||
631 | { | 785 | { |
632 | str[0] = 0; | 786 | return dopr(str, count, fmt, args); |
633 | dopr(str, count, fmt, args); | ||
634 | |||
635 | return(strlen(str)); | ||
636 | } | 787 | } |
637 | #endif /* !HAVE_VSNPRINTF */ | 788 | #endif |
638 | 789 | ||
639 | #ifndef HAVE_SNPRINTF | 790 | #if !defined(HAVE_SNPRINTF) |
640 | int | 791 | int snprintf(char *str, size_t count, SNPRINTF_CONST char *fmt, ...) |
641 | snprintf(char *str,size_t count,const char *fmt,...) | ||
642 | { | 792 | { |
793 | size_t ret; | ||
643 | va_list ap; | 794 | va_list ap; |
644 | 795 | ||
645 | va_start(ap, fmt); | 796 | va_start(ap, fmt); |
646 | (void) vsnprintf(str, count, fmt, ap); | 797 | ret = vsnprintf(str, count, fmt, ap); |
647 | va_end(ap); | 798 | va_end(ap); |
648 | 799 | return ret; | |
649 | return(strlen(str)); | ||
650 | } | 800 | } |
801 | #endif | ||
651 | 802 | ||
652 | #endif /* !HAVE_SNPRINTF */ | ||
diff --git a/openbsd-compat/daemon.c b/openbsd-compat/daemon.c index c0be5fff9..f8a0680bf 100644 --- a/openbsd-compat/daemon.c +++ b/openbsd-compat/daemon.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/gen/daemon.c */ | 1 | /* $OpenBSD: daemon.c,v 1.6 2005/08/08 08:05:33 espie Exp $ */ |
2 | |||
3 | /*- | 2 | /*- |
4 | * Copyright (c) 1990, 1993 | 3 | * Copyright (c) 1990, 1993 |
5 | * The Regents of the University of California. All rights reserved. | 4 | * The Regents of the University of California. All rights reserved. |
@@ -29,14 +28,12 @@ | |||
29 | * SUCH DAMAGE. | 28 | * SUCH DAMAGE. |
30 | */ | 29 | */ |
31 | 30 | ||
31 | /* OPENBSD ORIGINAL: lib/libc/gen/daemon.c */ | ||
32 | |||
32 | #include "includes.h" | 33 | #include "includes.h" |
33 | 34 | ||
34 | #ifndef HAVE_DAEMON | 35 | #ifndef HAVE_DAEMON |
35 | 36 | ||
36 | #if defined(LIBC_SCCS) && !defined(lint) | ||
37 | static char rcsid[] = "$OpenBSD: daemon.c,v 1.5 2003/07/15 17:32:41 deraadt Exp $"; | ||
38 | #endif /* LIBC_SCCS and not lint */ | ||
39 | |||
40 | int | 37 | int |
41 | daemon(int nochdir, int noclose) | 38 | daemon(int nochdir, int noclose) |
42 | { | 39 | { |
diff --git a/openbsd-compat/dirname.c b/openbsd-compat/dirname.c index 25ab34dd6..30fcb4968 100644 --- a/openbsd-compat/dirname.c +++ b/openbsd-compat/dirname.c | |||
@@ -1,9 +1,7 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/gen/dirname.c */ | 1 | /* $OpenBSD: dirname.c,v 1.13 2005/08/08 08:05:33 espie Exp $ */ |
2 | |||
3 | /* $OpenBSD: dirname.c,v 1.10 2003/06/17 21:56:23 millert Exp $ */ | ||
4 | 2 | ||
5 | /* | 3 | /* |
6 | * Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com> | 4 | * Copyright (c) 1997, 2004 Todd C. Miller <Todd.Miller@courtesan.com> |
7 | * | 5 | * |
8 | * Permission to use, copy, modify, and distribute this software for any | 6 | * Permission to use, copy, modify, and distribute this software for any |
9 | * purpose with or without fee is hereby granted, provided that the above | 7 | * purpose with or without fee is hereby granted, provided that the above |
@@ -18,13 +16,11 @@ | |||
18 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
19 | */ | 17 | */ |
20 | 18 | ||
19 | /* OPENBSD ORIGINAL: lib/libc/gen/dirname.c */ | ||
20 | |||
21 | #include "includes.h" | 21 | #include "includes.h" |
22 | #ifndef HAVE_DIRNAME | 22 | #ifndef HAVE_DIRNAME |
23 | 23 | ||
24 | #ifndef lint | ||
25 | static char rcsid[] = "$OpenBSD: dirname.c,v 1.10 2003/06/17 21:56:23 millert Exp $"; | ||
26 | #endif /* not lint */ | ||
27 | |||
28 | #include <errno.h> | 24 | #include <errno.h> |
29 | #include <string.h> | 25 | #include <string.h> |
30 | #include <sys/param.h> | 26 | #include <sys/param.h> |
@@ -32,16 +28,18 @@ static char rcsid[] = "$OpenBSD: dirname.c,v 1.10 2003/06/17 21:56:23 millert Ex | |||
32 | char * | 28 | char * |
33 | dirname(const char *path) | 29 | dirname(const char *path) |
34 | { | 30 | { |
35 | static char bname[MAXPATHLEN]; | 31 | static char dname[MAXPATHLEN]; |
36 | register const char *endp; | 32 | size_t len; |
33 | const char *endp; | ||
37 | 34 | ||
38 | /* Empty or NULL string gets treated as "." */ | 35 | /* Empty or NULL string gets treated as "." */ |
39 | if (path == NULL || *path == '\0') { | 36 | if (path == NULL || *path == '\0') { |
40 | (void)strlcpy(bname, ".", sizeof bname); | 37 | dname[0] = '.'; |
41 | return(bname); | 38 | dname[1] = '\0'; |
39 | return (dname); | ||
42 | } | 40 | } |
43 | 41 | ||
44 | /* Strip trailing slashes */ | 42 | /* Strip any trailing slashes */ |
45 | endp = path + strlen(path) - 1; | 43 | endp = path + strlen(path) - 1; |
46 | while (endp > path && *endp == '/') | 44 | while (endp > path && *endp == '/') |
47 | endp--; | 45 | endp--; |
@@ -52,19 +50,23 @@ dirname(const char *path) | |||
52 | 50 | ||
53 | /* Either the dir is "/" or there are no slashes */ | 51 | /* Either the dir is "/" or there are no slashes */ |
54 | if (endp == path) { | 52 | if (endp == path) { |
55 | (void)strlcpy(bname, *endp == '/' ? "/" : ".", sizeof bname); | 53 | dname[0] = *endp == '/' ? '/' : '.'; |
56 | return(bname); | 54 | dname[1] = '\0'; |
55 | return (dname); | ||
57 | } else { | 56 | } else { |
57 | /* Move forward past the separating slashes */ | ||
58 | do { | 58 | do { |
59 | endp--; | 59 | endp--; |
60 | } while (endp > path && *endp == '/'); | 60 | } while (endp > path && *endp == '/'); |
61 | } | 61 | } |
62 | 62 | ||
63 | if (endp - path + 2 > sizeof(bname)) { | 63 | len = endp - path + 1; |
64 | if (len >= sizeof(dname)) { | ||
64 | errno = ENAMETOOLONG; | 65 | errno = ENAMETOOLONG; |
65 | return(NULL); | 66 | return (NULL); |
66 | } | 67 | } |
67 | strlcpy(bname, path, endp - path + 2); | 68 | memcpy(dname, path, len); |
68 | return(bname); | 69 | dname[len] = '\0'; |
70 | return (dname); | ||
69 | } | 71 | } |
70 | #endif | 72 | #endif |
diff --git a/openbsd-compat/getcwd.c b/openbsd-compat/getcwd.c index 19be59172..711cb9cd5 100644 --- a/openbsd-compat/getcwd.c +++ b/openbsd-compat/getcwd.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/gen/getcwd.c */ | 1 | /* $OpenBSD: getcwd.c,v 1.14 2005/08/08 08:05:34 espie Exp $ */ |
2 | |||
3 | /* | 2 | /* |
4 | * Copyright (c) 1989, 1991, 1993 | 3 | * Copyright (c) 1989, 1991, 1993 |
5 | * The Regents of the University of California. All rights reserved. | 4 | * The Regents of the University of California. All rights reserved. |
@@ -29,14 +28,12 @@ | |||
29 | * SUCH DAMAGE. | 28 | * SUCH DAMAGE. |
30 | */ | 29 | */ |
31 | 30 | ||
31 | /* OPENBSD ORIGINAL: lib/libc/gen/getcwd.c */ | ||
32 | |||
32 | #include "includes.h" | 33 | #include "includes.h" |
33 | 34 | ||
34 | #if !defined(HAVE_GETCWD) | 35 | #if !defined(HAVE_GETCWD) |
35 | 36 | ||
36 | #if defined(LIBC_SCCS) && !defined(lint) | ||
37 | static char rcsid[] = "$OpenBSD: getcwd.c,v 1.9 2003/06/11 21:03:10 deraadt Exp $"; | ||
38 | #endif /* LIBC_SCCS and not lint */ | ||
39 | |||
40 | #include <sys/param.h> | 37 | #include <sys/param.h> |
41 | #include <sys/stat.h> | 38 | #include <sys/stat.h> |
42 | #include <errno.h> | 39 | #include <errno.h> |
@@ -54,12 +51,12 @@ static char rcsid[] = "$OpenBSD: getcwd.c,v 1.9 2003/06/11 21:03:10 deraadt Exp | |||
54 | char * | 51 | char * |
55 | getcwd(char *pt, size_t size) | 52 | getcwd(char *pt, size_t size) |
56 | { | 53 | { |
57 | register struct dirent *dp; | 54 | struct dirent *dp; |
58 | register DIR *dir = NULL; | 55 | DIR *dir = NULL; |
59 | register dev_t dev; | 56 | dev_t dev; |
60 | register ino_t ino; | 57 | ino_t ino; |
61 | register int first; | 58 | int first; |
62 | register char *bpt, *bup; | 59 | char *bpt, *bup; |
63 | struct stat s; | 60 | struct stat s; |
64 | dev_t root_dev; | 61 | dev_t root_dev; |
65 | ino_t root_ino; | 62 | ino_t root_ino; |
@@ -80,7 +77,7 @@ getcwd(char *pt, size_t size) | |||
80 | } | 77 | } |
81 | ept = pt + size; | 78 | ept = pt + size; |
82 | } else { | 79 | } else { |
83 | if ((pt = malloc(ptsize = 1024 - 4)) == NULL) | 80 | if ((pt = malloc(ptsize = MAXPATHLEN)) == NULL) |
84 | return (NULL); | 81 | return (NULL); |
85 | ept = pt + ptsize; | 82 | ept = pt + ptsize; |
86 | } | 83 | } |
@@ -88,13 +85,13 @@ getcwd(char *pt, size_t size) | |||
88 | *bpt = '\0'; | 85 | *bpt = '\0'; |
89 | 86 | ||
90 | /* | 87 | /* |
91 | * Allocate bytes (1024 - malloc space) for the string of "../"'s. | 88 | * Allocate bytes for the string of "../"'s. |
92 | * Should always be enough (it's 340 levels). If it's not, allocate | 89 | * Should always be enough (it's 340 levels). If it's not, allocate |
93 | * as necessary. Special * case the first stat, it's ".", not "..". | 90 | * as necessary. Special * case the first stat, it's ".", not "..". |
94 | */ | 91 | */ |
95 | if ((up = malloc(upsize = 1024 - 4)) == NULL) | 92 | if ((up = malloc(upsize = MAXPATHLEN)) == NULL) |
96 | goto err; | 93 | goto err; |
97 | eup = up + MAXPATHLEN; | 94 | eup = up + upsize; |
98 | bup = up; | 95 | bup = up; |
99 | up[0] = '.'; | 96 | up[0] = '.'; |
100 | up[1] = '\0'; | 97 | up[1] = '\0'; |
@@ -139,18 +136,16 @@ getcwd(char *pt, size_t size) | |||
139 | 136 | ||
140 | if ((nup = realloc(up, upsize *= 2)) == NULL) | 137 | if ((nup = realloc(up, upsize *= 2)) == NULL) |
141 | goto err; | 138 | goto err; |
139 | bup = nup + (bup - up); | ||
142 | up = nup; | 140 | up = nup; |
143 | bup = up; | ||
144 | eup = up + upsize; | 141 | eup = up + upsize; |
145 | } | 142 | } |
146 | *bup++ = '.'; | 143 | *bup++ = '.'; |
147 | *bup++ = '.'; | 144 | *bup++ = '.'; |
148 | *bup = '\0'; | 145 | *bup = '\0'; |
149 | 146 | ||
150 | /* Open and stat parent directory. | 147 | /* Open and stat parent directory. */ |
151 | * RACE?? - replaced fstat(dirfd(dir), &s) w/ lstat(up,&s) | 148 | if (!(dir = opendir(up)) || fstat(dirfd(dir), &s)) |
152 | */ | ||
153 | if (!(dir = opendir(up)) || lstat(up,&s)) | ||
154 | goto err; | 149 | goto err; |
155 | 150 | ||
156 | /* Add trailing slash for next directory. */ | 151 | /* Add trailing slash for next directory. */ |
@@ -175,7 +170,7 @@ getcwd(char *pt, size_t size) | |||
175 | goto notfound; | 170 | goto notfound; |
176 | if (ISDOT(dp)) | 171 | if (ISDOT(dp)) |
177 | continue; | 172 | continue; |
178 | memmove(bup, dp->d_name, dp->d_namlen + 1); | 173 | memcpy(bup, dp->d_name, dp->d_namlen + 1); |
179 | 174 | ||
180 | /* Save the first error for later. */ | 175 | /* Save the first error for later. */ |
181 | if (lstat(up, &s)) { | 176 | if (lstat(up, &s)) { |
@@ -193,19 +188,18 @@ getcwd(char *pt, size_t size) | |||
193 | * leading slash. | 188 | * leading slash. |
194 | */ | 189 | */ |
195 | if (bpt - pt < dp->d_namlen + (first ? 1 : 2)) { | 190 | if (bpt - pt < dp->d_namlen + (first ? 1 : 2)) { |
196 | size_t len, off; | 191 | size_t len; |
197 | char *npt; | 192 | char *npt; |
198 | 193 | ||
199 | if (!ptsize) { | 194 | if (!ptsize) { |
200 | errno = ERANGE; | 195 | errno = ERANGE; |
201 | goto err; | 196 | goto err; |
202 | } | 197 | } |
203 | off = bpt - pt; | ||
204 | len = ept - bpt; | 198 | len = ept - bpt; |
205 | if ((npt = realloc(pt, ptsize *= 2)) == NULL) | 199 | if ((npt = realloc(pt, ptsize *= 2)) == NULL) |
206 | goto err; | 200 | goto err; |
201 | bpt = npt + (bpt - pt); | ||
207 | pt = npt; | 202 | pt = npt; |
208 | bpt = pt + off; | ||
209 | ept = pt + ptsize; | 203 | ept = pt + ptsize; |
210 | memmove(ept - len, bpt, len); | 204 | memmove(ept - len, bpt, len); |
211 | bpt = ept - len; | 205 | bpt = ept - len; |
@@ -213,7 +207,7 @@ getcwd(char *pt, size_t size) | |||
213 | if (!first) | 207 | if (!first) |
214 | *--bpt = '/'; | 208 | *--bpt = '/'; |
215 | bpt -= dp->d_namlen; | 209 | bpt -= dp->d_namlen; |
216 | memmove(bpt, dp->d_name, dp->d_namlen); | 210 | memcpy(bpt, dp->d_name, dp->d_namlen); |
217 | (void)closedir(dir); | 211 | (void)closedir(dir); |
218 | 212 | ||
219 | /* Truncate any file name. */ | 213 | /* Truncate any file name. */ |
@@ -230,12 +224,16 @@ notfound: | |||
230 | errno = save_errno ? save_errno : ENOENT; | 224 | errno = save_errno ? save_errno : ENOENT; |
231 | /* FALLTHROUGH */ | 225 | /* FALLTHROUGH */ |
232 | err: | 226 | err: |
227 | save_errno = errno; | ||
228 | |||
233 | if (ptsize) | 229 | if (ptsize) |
234 | free(pt); | 230 | free(pt); |
235 | if (up) | 231 | free(up); |
236 | free(up); | ||
237 | if (dir) | 232 | if (dir) |
238 | (void)closedir(dir); | 233 | (void)closedir(dir); |
234 | |||
235 | errno = save_errno; | ||
236 | |||
239 | return (NULL); | 237 | return (NULL); |
240 | } | 238 | } |
241 | 239 | ||
diff --git a/openbsd-compat/getgrouplist.c b/openbsd-compat/getgrouplist.c index 59c164f44..a57d7d388 100644 --- a/openbsd-compat/getgrouplist.c +++ b/openbsd-compat/getgrouplist.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/gen/getgrouplist.c */ | 1 | /* $OpenBSD: getgrouplist.c,v 1.12 2005/08/08 08:05:34 espie Exp $ */ |
2 | |||
3 | /* | 2 | /* |
4 | * Copyright (c) 1991, 1993 | 3 | * Copyright (c) 1991, 1993 |
5 | * The Regents of the University of California. All rights reserved. | 4 | * The Regents of the University of California. All rights reserved. |
@@ -29,14 +28,12 @@ | |||
29 | * SUCH DAMAGE. | 28 | * SUCH DAMAGE. |
30 | */ | 29 | */ |
31 | 30 | ||
31 | /* OPENBSD ORIGINAL: lib/libc/gen/getgrouplist.c */ | ||
32 | |||
32 | #include "includes.h" | 33 | #include "includes.h" |
33 | 34 | ||
34 | #ifndef HAVE_GETGROUPLIST | 35 | #ifndef HAVE_GETGROUPLIST |
35 | 36 | ||
36 | #if defined(LIBC_SCCS) && !defined(lint) | ||
37 | static char rcsid[] = "$OpenBSD: getgrouplist.c,v 1.9 2003/06/25 21:16:47 deraadt Exp $"; | ||
38 | #endif /* LIBC_SCCS and not lint */ | ||
39 | |||
40 | /* | 37 | /* |
41 | * get credential | 38 | * get credential |
42 | */ | 39 | */ |
@@ -46,14 +43,10 @@ static char rcsid[] = "$OpenBSD: getgrouplist.c,v 1.9 2003/06/25 21:16:47 deraad | |||
46 | #include <grp.h> | 43 | #include <grp.h> |
47 | 44 | ||
48 | int | 45 | int |
49 | getgrouplist(uname, agroup, groups, grpcnt) | 46 | getgrouplist(const char *uname, gid_t agroup, gid_t *groups, int *grpcnt) |
50 | const char *uname; | ||
51 | gid_t agroup; | ||
52 | register gid_t *groups; | ||
53 | int *grpcnt; | ||
54 | { | 47 | { |
55 | register struct group *grp; | 48 | struct group *grp; |
56 | register int i, ngroups; | 49 | int i, ngroups; |
57 | int ret, maxgroups; | 50 | int ret, maxgroups; |
58 | int bail; | 51 | int bail; |
59 | 52 | ||
diff --git a/openbsd-compat/getopt.c b/openbsd-compat/getopt.c index f5ee6778d..5450e43d9 100644 --- a/openbsd-compat/getopt.c +++ b/openbsd-compat/getopt.c | |||
@@ -1,5 +1,3 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/stdlib/getopt.c */ | ||
2 | |||
3 | /* | 1 | /* |
4 | * Copyright (c) 1987, 1993, 1994 | 2 | * Copyright (c) 1987, 1993, 1994 |
5 | * The Regents of the University of California. All rights reserved. | 3 | * The Regents of the University of California. All rights reserved. |
@@ -29,6 +27,8 @@ | |||
29 | * SUCH DAMAGE. | 27 | * SUCH DAMAGE. |
30 | */ | 28 | */ |
31 | 29 | ||
30 | /* OPENBSD ORIGINAL: lib/libc/stdlib/getopt.c */ | ||
31 | |||
32 | #include "includes.h" | 32 | #include "includes.h" |
33 | #if !defined(HAVE_GETOPT) || !defined(HAVE_GETOPT_OPTRESET) | 33 | #if !defined(HAVE_GETOPT) || !defined(HAVE_GETOPT_OPTRESET) |
34 | 34 | ||
diff --git a/openbsd-compat/getrrsetbyname.c b/openbsd-compat/getrrsetbyname.c index 2016ffe31..bea6aea3b 100644 --- a/openbsd-compat/getrrsetbyname.c +++ b/openbsd-compat/getrrsetbyname.c | |||
@@ -1,6 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/net/getrrsetbyname.c */ | 1 | /* $OpenBSD: getrrsetbyname.c,v 1.10 2005/03/30 02:58:28 tedu Exp $ */ |
2 | |||
3 | /* $OpenBSD: getrrsetbyname.c,v 1.7 2003/03/07 07:34:14 itojun Exp $ */ | ||
4 | 2 | ||
5 | /* | 3 | /* |
6 | * Copyright (c) 2001 Jakob Schlyter. All rights reserved. | 4 | * Copyright (c) 2001 Jakob Schlyter. All rights reserved. |
@@ -45,54 +43,26 @@ | |||
45 | * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 43 | * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
46 | */ | 44 | */ |
47 | 45 | ||
46 | /* OPENBSD ORIGINAL: lib/libc/net/getrrsetbyname.c */ | ||
47 | |||
48 | #include "includes.h" | 48 | #include "includes.h" |
49 | 49 | ||
50 | #ifndef HAVE_GETRRSETBYNAME | 50 | #ifndef HAVE_GETRRSETBYNAME |
51 | 51 | ||
52 | #include "getrrsetbyname.h" | 52 | #include "getrrsetbyname.h" |
53 | 53 | ||
54 | #define ANSWER_BUFFER_SIZE 1024*64 | ||
55 | |||
56 | #if defined(HAVE_DECL_H_ERRNO) && !HAVE_DECL_H_ERRNO | 54 | #if defined(HAVE_DECL_H_ERRNO) && !HAVE_DECL_H_ERRNO |
57 | extern int h_errno; | 55 | extern int h_errno; |
58 | #endif | 56 | #endif |
59 | 57 | ||
60 | struct dns_query { | 58 | /* We don't need multithread support here */ |
61 | char *name; | 59 | #ifdef _THREAD_PRIVATE |
62 | u_int16_t type; | 60 | # undef _THREAD_PRIVATE |
63 | u_int16_t class; | 61 | #endif |
64 | struct dns_query *next; | 62 | #define _THREAD_PRIVATE(a,b,c) (c) |
65 | }; | 63 | struct __res_state _res; |
66 | |||
67 | struct dns_rr { | ||
68 | char *name; | ||
69 | u_int16_t type; | ||
70 | u_int16_t class; | ||
71 | u_int16_t ttl; | ||
72 | u_int16_t size; | ||
73 | void *rdata; | ||
74 | struct dns_rr *next; | ||
75 | }; | ||
76 | |||
77 | struct dns_response { | ||
78 | HEADER header; | ||
79 | struct dns_query *query; | ||
80 | struct dns_rr *answer; | ||
81 | struct dns_rr *authority; | ||
82 | struct dns_rr *additional; | ||
83 | }; | ||
84 | |||
85 | static struct dns_response *parse_dns_response(const u_char *, int); | ||
86 | static struct dns_query *parse_dns_qsection(const u_char *, int, | ||
87 | const u_char **, int); | ||
88 | static struct dns_rr *parse_dns_rrsection(const u_char *, int, const u_char **, | ||
89 | int); | ||
90 | |||
91 | static void free_dns_query(struct dns_query *); | ||
92 | static void free_dns_rr(struct dns_rr *); | ||
93 | static void free_dns_response(struct dns_response *); | ||
94 | 64 | ||
95 | static int count_dns_rr(struct dns_rr *, u_int16_t, u_int16_t); | 65 | /* Necessary functions and macros */ |
96 | 66 | ||
97 | /* | 67 | /* |
98 | * Inline versions of get/put short/long. Pointer is advanced. | 68 | * Inline versions of get/put short/long. Pointer is advanced. |
@@ -162,14 +132,56 @@ _getlong(msgp) | |||
162 | u_int32_t _getlong(register const u_char *); | 132 | u_int32_t _getlong(register const u_char *); |
163 | #endif | 133 | #endif |
164 | 134 | ||
135 | /* ************** */ | ||
136 | |||
137 | #define ANSWER_BUFFER_SIZE 1024*64 | ||
138 | |||
139 | struct dns_query { | ||
140 | char *name; | ||
141 | u_int16_t type; | ||
142 | u_int16_t class; | ||
143 | struct dns_query *next; | ||
144 | }; | ||
145 | |||
146 | struct dns_rr { | ||
147 | char *name; | ||
148 | u_int16_t type; | ||
149 | u_int16_t class; | ||
150 | u_int16_t ttl; | ||
151 | u_int16_t size; | ||
152 | void *rdata; | ||
153 | struct dns_rr *next; | ||
154 | }; | ||
155 | |||
156 | struct dns_response { | ||
157 | HEADER header; | ||
158 | struct dns_query *query; | ||
159 | struct dns_rr *answer; | ||
160 | struct dns_rr *authority; | ||
161 | struct dns_rr *additional; | ||
162 | }; | ||
163 | |||
164 | static struct dns_response *parse_dns_response(const u_char *, int); | ||
165 | static struct dns_query *parse_dns_qsection(const u_char *, int, | ||
166 | const u_char **, int); | ||
167 | static struct dns_rr *parse_dns_rrsection(const u_char *, int, const u_char **, | ||
168 | int); | ||
169 | |||
170 | static void free_dns_query(struct dns_query *); | ||
171 | static void free_dns_rr(struct dns_rr *); | ||
172 | static void free_dns_response(struct dns_response *); | ||
173 | |||
174 | static int count_dns_rr(struct dns_rr *, u_int16_t, u_int16_t); | ||
175 | |||
165 | int | 176 | int |
166 | getrrsetbyname(const char *hostname, unsigned int rdclass, | 177 | getrrsetbyname(const char *hostname, unsigned int rdclass, |
167 | unsigned int rdtype, unsigned int flags, | 178 | unsigned int rdtype, unsigned int flags, |
168 | struct rrsetinfo **res) | 179 | struct rrsetinfo **res) |
169 | { | 180 | { |
181 | struct __res_state *_resp = _THREAD_PRIVATE(_res, _res, &_res); | ||
170 | int result; | 182 | int result; |
171 | struct rrsetinfo *rrset = NULL; | 183 | struct rrsetinfo *rrset = NULL; |
172 | struct dns_response *response; | 184 | struct dns_response *response = NULL; |
173 | struct dns_rr *rr; | 185 | struct dns_rr *rr; |
174 | struct rdatainfo *rdata; | 186 | struct rdatainfo *rdata; |
175 | int length; | 187 | int length; |
@@ -195,19 +207,19 @@ getrrsetbyname(const char *hostname, unsigned int rdclass, | |||
195 | } | 207 | } |
196 | 208 | ||
197 | /* initialize resolver */ | 209 | /* initialize resolver */ |
198 | if ((_res.options & RES_INIT) == 0 && res_init() == -1) { | 210 | if ((_resp->options & RES_INIT) == 0 && res_init() == -1) { |
199 | result = ERRSET_FAIL; | 211 | result = ERRSET_FAIL; |
200 | goto fail; | 212 | goto fail; |
201 | } | 213 | } |
202 | 214 | ||
203 | #ifdef DEBUG | 215 | #ifdef DEBUG |
204 | _res.options |= RES_DEBUG; | 216 | _resp->options |= RES_DEBUG; |
205 | #endif /* DEBUG */ | 217 | #endif /* DEBUG */ |
206 | 218 | ||
207 | #ifdef RES_USE_DNSSEC | 219 | #ifdef RES_USE_DNSSEC |
208 | /* turn on DNSSEC if EDNS0 is configured */ | 220 | /* turn on DNSSEC if EDNS0 is configured */ |
209 | if (_res.options & RES_USE_EDNS0) | 221 | if (_resp->options & RES_USE_EDNS0) |
210 | _res.options |= RES_USE_DNSSEC; | 222 | _resp->options |= RES_USE_DNSSEC; |
211 | #endif /* RES_USE_DNSEC */ | 223 | #endif /* RES_USE_DNSEC */ |
212 | 224 | ||
213 | /* make query */ | 225 | /* make query */ |
@@ -257,13 +269,11 @@ getrrsetbyname(const char *hostname, unsigned int rdclass, | |||
257 | #endif | 269 | #endif |
258 | 270 | ||
259 | /* copy name from answer section */ | 271 | /* copy name from answer section */ |
260 | length = strlen(response->answer->name); | 272 | rrset->rri_name = strdup(response->answer->name); |
261 | rrset->rri_name = malloc(length + 1); | ||
262 | if (rrset->rri_name == NULL) { | 273 | if (rrset->rri_name == NULL) { |
263 | result = ERRSET_NOMEMORY; | 274 | result = ERRSET_NOMEMORY; |
264 | goto fail; | 275 | goto fail; |
265 | } | 276 | } |
266 | strlcpy(rrset->rri_name, response->answer->name, length + 1); | ||
267 | 277 | ||
268 | /* count answers */ | 278 | /* count answers */ |
269 | rrset->rri_nrdatas = count_dns_rr(response->answer, rrset->rri_rdclass, | 279 | rrset->rri_nrdatas = count_dns_rr(response->answer, rrset->rri_rdclass, |
@@ -281,7 +291,7 @@ getrrsetbyname(const char *hostname, unsigned int rdclass, | |||
281 | 291 | ||
282 | /* allocate memory for signatures */ | 292 | /* allocate memory for signatures */ |
283 | rrset->rri_sigs = calloc(rrset->rri_nsigs, sizeof(struct rdatainfo)); | 293 | rrset->rri_sigs = calloc(rrset->rri_nsigs, sizeof(struct rdatainfo)); |
284 | if (rrset->rri_nsigs > 0 && rrset->rri_sigs == NULL) { | 294 | if (rrset->rri_sigs == NULL) { |
285 | result = ERRSET_NOMEMORY; | 295 | result = ERRSET_NOMEMORY; |
286 | goto fail; | 296 | goto fail; |
287 | } | 297 | } |
@@ -311,6 +321,7 @@ getrrsetbyname(const char *hostname, unsigned int rdclass, | |||
311 | memcpy(rdata->rdi_data, rr->rdata, rr->size); | 321 | memcpy(rdata->rdi_data, rr->rdata, rr->size); |
312 | } | 322 | } |
313 | } | 323 | } |
324 | free_dns_response(response); | ||
314 | 325 | ||
315 | *res = rrset; | 326 | *res = rrset; |
316 | return (ERRSET_SUCCESS); | 327 | return (ERRSET_SUCCESS); |
@@ -318,6 +329,8 @@ getrrsetbyname(const char *hostname, unsigned int rdclass, | |||
318 | fail: | 329 | fail: |
319 | if (rrset != NULL) | 330 | if (rrset != NULL) |
320 | freerrset(rrset); | 331 | freerrset(rrset); |
332 | if (response != NULL) | ||
333 | free_dns_response(response); | ||
321 | return (result); | 334 | return (result); |
322 | } | 335 | } |
323 | 336 | ||
@@ -467,7 +480,8 @@ parse_dns_qsection(const u_char *answer, int size, const u_char **cp, int count) | |||
467 | } | 480 | } |
468 | 481 | ||
469 | static struct dns_rr * | 482 | static struct dns_rr * |
470 | parse_dns_rrsection(const u_char *answer, int size, const u_char **cp, int count) | 483 | parse_dns_rrsection(const u_char *answer, int size, const u_char **cp, |
484 | int count) | ||
471 | { | 485 | { |
472 | struct dns_rr *head, *curr, *prev; | 486 | struct dns_rr *head, *curr, *prev; |
473 | int i, length; | 487 | int i, length; |
diff --git a/openbsd-compat/glob.c b/openbsd-compat/glob.c index 7fafc8c40..f6a04ea3f 100644 --- a/openbsd-compat/glob.c +++ b/openbsd-compat/glob.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/gen/glob.c */ | 1 | /* $OpenBSD: glob.c,v 1.25 2005/08/08 08:05:34 espie Exp $ */ |
2 | |||
3 | /* | 2 | /* |
4 | * Copyright (c) 1989, 1993 | 3 | * Copyright (c) 1989, 1993 |
5 | * The Regents of the University of California. All rights reserved. | 4 | * The Regents of the University of California. All rights reserved. |
@@ -32,6 +31,8 @@ | |||
32 | * SUCH DAMAGE. | 31 | * SUCH DAMAGE. |
33 | */ | 32 | */ |
34 | 33 | ||
34 | /* OPENBSD ORIGINAL: lib/libc/gen/glob.c */ | ||
35 | |||
35 | #include "includes.h" | 36 | #include "includes.h" |
36 | #include <ctype.h> | 37 | #include <ctype.h> |
37 | 38 | ||
@@ -50,14 +51,6 @@ get_arg_max(void) | |||
50 | #if !defined(HAVE_GLOB) || !defined(GLOB_HAS_ALTDIRFUNC) || \ | 51 | #if !defined(HAVE_GLOB) || !defined(GLOB_HAS_ALTDIRFUNC) || \ |
51 | !defined(GLOB_HAS_GL_MATCHC) | 52 | !defined(GLOB_HAS_GL_MATCHC) |
52 | 53 | ||
53 | #if defined(LIBC_SCCS) && !defined(lint) | ||
54 | #if 0 | ||
55 | static char sccsid[] = "@(#)glob.c 8.3 (Berkeley) 10/13/93"; | ||
56 | #else | ||
57 | static char rcsid[] = "$OpenBSD: glob.c,v 1.22 2003/06/25 21:16:47 deraadt Exp $"; | ||
58 | #endif | ||
59 | #endif /* LIBC_SCCS and not lint */ | ||
60 | |||
61 | /* | 54 | /* |
62 | * glob(3) -- a superset of the one defined in POSIX 1003.2. | 55 | * glob(3) -- a superset of the one defined in POSIX 1003.2. |
63 | * | 56 | * |
@@ -158,10 +151,8 @@ static void qprintf(const char *, Char *); | |||
158 | #endif | 151 | #endif |
159 | 152 | ||
160 | int | 153 | int |
161 | glob(pattern, flags, errfunc, pglob) | 154 | glob(const char *pattern, int flags, int (*errfunc)(const char *, int), |
162 | const char *pattern; | 155 | glob_t *pglob) |
163 | int flags, (*errfunc)(const char *, int); | ||
164 | glob_t *pglob; | ||
165 | { | 156 | { |
166 | const u_char *patnext; | 157 | const u_char *patnext; |
167 | int c; | 158 | int c; |
@@ -209,9 +200,7 @@ glob(pattern, flags, errfunc, pglob) | |||
209 | * characters | 200 | * characters |
210 | */ | 201 | */ |
211 | static int | 202 | static int |
212 | globexp1(pattern, pglob) | 203 | globexp1(const Char *pattern, glob_t *pglob) |
213 | const Char *pattern; | ||
214 | glob_t *pglob; | ||
215 | { | 204 | { |
216 | const Char* ptr = pattern; | 205 | const Char* ptr = pattern; |
217 | int rv; | 206 | int rv; |
@@ -234,10 +223,7 @@ globexp1(pattern, pglob) | |||
234 | * If it fails then it tries to glob the rest of the pattern and returns. | 223 | * If it fails then it tries to glob the rest of the pattern and returns. |
235 | */ | 224 | */ |
236 | static int | 225 | static int |
237 | globexp2(ptr, pattern, pglob, rv) | 226 | globexp2(const Char *ptr, const Char *pattern, glob_t *pglob, int *rv) |
238 | const Char *ptr, *pattern; | ||
239 | glob_t *pglob; | ||
240 | int *rv; | ||
241 | { | 227 | { |
242 | int i; | 228 | int i; |
243 | Char *lm, *ls; | 229 | Char *lm, *ls; |
@@ -342,11 +328,7 @@ globexp2(ptr, pattern, pglob, rv) | |||
342 | * expand tilde from the passwd file. | 328 | * expand tilde from the passwd file. |
343 | */ | 329 | */ |
344 | static const Char * | 330 | static const Char * |
345 | globtilde(pattern, patbuf, patbuf_len, pglob) | 331 | globtilde(const Char *pattern, Char *patbuf, size_t patbuf_len, glob_t *pglob) |
346 | const Char *pattern; | ||
347 | Char *patbuf; | ||
348 | size_t patbuf_len; | ||
349 | glob_t *pglob; | ||
350 | { | 332 | { |
351 | struct passwd *pwd; | 333 | struct passwd *pwd; |
352 | char *h; | 334 | char *h; |
@@ -414,9 +396,7 @@ globtilde(pattern, patbuf, patbuf_len, pglob) | |||
414 | * to find no matches. | 396 | * to find no matches. |
415 | */ | 397 | */ |
416 | static int | 398 | static int |
417 | glob0(pattern, pglob) | 399 | glob0(const Char *pattern, glob_t *pglob) |
418 | const Char *pattern; | ||
419 | glob_t *pglob; | ||
420 | { | 400 | { |
421 | const Char *qpatnext; | 401 | const Char *qpatnext; |
422 | int c, err, oldpathc; | 402 | int c, err, oldpathc; |
@@ -503,17 +483,13 @@ glob0(pattern, pglob) | |||
503 | } | 483 | } |
504 | 484 | ||
505 | static int | 485 | static int |
506 | compare(p, q) | 486 | compare(const void *p, const void *q) |
507 | const void *p, *q; | ||
508 | { | 487 | { |
509 | return(strcmp(*(char **)p, *(char **)q)); | 488 | return(strcmp(*(char **)p, *(char **)q)); |
510 | } | 489 | } |
511 | 490 | ||
512 | static int | 491 | static int |
513 | glob1(pattern, pattern_last, pglob, limitp) | 492 | glob1(Char *pattern, Char *pattern_last, glob_t *pglob, size_t *limitp) |
514 | Char *pattern, *pattern_last; | ||
515 | glob_t *pglob; | ||
516 | size_t *limitp; | ||
517 | { | 493 | { |
518 | Char pathbuf[MAXPATHLEN]; | 494 | Char pathbuf[MAXPATHLEN]; |
519 | 495 | ||
@@ -531,12 +507,8 @@ glob1(pattern, pattern_last, pglob, limitp) | |||
531 | * meta characters. | 507 | * meta characters. |
532 | */ | 508 | */ |
533 | static int | 509 | static int |
534 | glob2(pathbuf, pathbuf_last, pathend, pathend_last, pattern, | 510 | glob2(Char *pathbuf, Char *pathbuf_last, Char *pathend, Char *pathend_last, |
535 | pattern_last, pglob, limitp) | 511 | Char *pattern, Char *pattern_last, glob_t *pglob, size_t *limitp) |
536 | Char *pathbuf, *pathbuf_last, *pathend, *pathend_last; | ||
537 | Char *pattern, *pattern_last; | ||
538 | glob_t *pglob; | ||
539 | size_t *limitp; | ||
540 | { | 512 | { |
541 | struct stat sb; | 513 | struct stat sb; |
542 | Char *p, *q; | 514 | Char *p, *q; |
@@ -595,14 +567,11 @@ glob2(pathbuf, pathbuf_last, pathend, pathend_last, pattern, | |||
595 | } | 567 | } |
596 | 568 | ||
597 | static int | 569 | static int |
598 | glob3(pathbuf, pathbuf_last, pathend, pathend_last, pattern, pattern_last, | 570 | glob3(Char *pathbuf, Char *pathbuf_last, Char *pathend, Char *pathend_last, |
599 | restpattern, restpattern_last, pglob, limitp) | 571 | Char *pattern, Char *pattern_last, Char *restpattern, |
600 | Char *pathbuf, *pathbuf_last, *pathend, *pathend_last; | 572 | Char *restpattern_last, glob_t *pglob, size_t *limitp) |
601 | Char *pattern, *pattern_last, *restpattern, *restpattern_last; | ||
602 | glob_t *pglob; | ||
603 | size_t *limitp; | ||
604 | { | 573 | { |
605 | register struct dirent *dp; | 574 | struct dirent *dp; |
606 | DIR *dirp; | 575 | DIR *dirp; |
607 | int err; | 576 | int err; |
608 | char buf[MAXPATHLEN]; | 577 | char buf[MAXPATHLEN]; |
@@ -640,8 +609,8 @@ glob3(pathbuf, pathbuf_last, pathend, pathend_last, pattern, pattern_last, | |||
640 | else | 609 | else |
641 | readdirfunc = (struct dirent *(*)(void *))readdir; | 610 | readdirfunc = (struct dirent *(*)(void *))readdir; |
642 | while ((dp = (*readdirfunc)(dirp))) { | 611 | while ((dp = (*readdirfunc)(dirp))) { |
643 | register u_char *sc; | 612 | u_char *sc; |
644 | register Char *dc; | 613 | Char *dc; |
645 | 614 | ||
646 | /* Initial DOT must be matched literally. */ | 615 | /* Initial DOT must be matched literally. */ |
647 | if (dp->d_name[0] == DOT && *pattern != DOT) | 616 | if (dp->d_name[0] == DOT && *pattern != DOT) |
@@ -689,13 +658,10 @@ glob3(pathbuf, pathbuf_last, pathend, pathend_last, pattern, pattern_last, | |||
689 | * gl_pathv points to (gl_offs + gl_pathc + 1) items. | 658 | * gl_pathv points to (gl_offs + gl_pathc + 1) items. |
690 | */ | 659 | */ |
691 | static int | 660 | static int |
692 | globextend(path, pglob, limitp) | 661 | globextend(const Char *path, glob_t *pglob, size_t *limitp) |
693 | const Char *path; | ||
694 | glob_t *pglob; | ||
695 | size_t *limitp; | ||
696 | { | 662 | { |
697 | register char **pathv; | 663 | char **pathv; |
698 | register int i; | 664 | int i; |
699 | u_int newsize, len; | 665 | u_int newsize, len; |
700 | char *copy; | 666 | char *copy; |
701 | const Char *p; | 667 | const Char *p; |
@@ -747,8 +713,7 @@ globextend(path, pglob, limitp) | |||
747 | * pattern causes a recursion level. | 713 | * pattern causes a recursion level. |
748 | */ | 714 | */ |
749 | static int | 715 | static int |
750 | match(name, pat, patend) | 716 | match(Char *name, Char *pat, Char *patend) |
751 | register Char *name, *pat, *patend; | ||
752 | { | 717 | { |
753 | int ok, negate_range; | 718 | int ok, negate_range; |
754 | Char c, k; | 719 | Char c, k; |
@@ -759,11 +724,10 @@ match(name, pat, patend) | |||
759 | case M_ALL: | 724 | case M_ALL: |
760 | if (pat == patend) | 725 | if (pat == patend) |
761 | return(1); | 726 | return(1); |
762 | do | 727 | do { |
763 | if (match(name, pat, patend)) | 728 | if (match(name, pat, patend)) |
764 | return(1); | 729 | return(1); |
765 | while (*name++ != EOS) | 730 | } while (*name++ != EOS); |
766 | ; | ||
767 | return(0); | 731 | return(0); |
768 | case M_ONE: | 732 | case M_ONE: |
769 | if (*name++ == EOS) | 733 | if (*name++ == EOS) |
@@ -796,11 +760,10 @@ match(name, pat, patend) | |||
796 | 760 | ||
797 | /* Free allocated data belonging to a glob_t structure. */ | 761 | /* Free allocated data belonging to a glob_t structure. */ |
798 | void | 762 | void |
799 | globfree(pglob) | 763 | globfree(glob_t *pglob) |
800 | glob_t *pglob; | ||
801 | { | 764 | { |
802 | register int i; | 765 | int i; |
803 | register char **pp; | 766 | char **pp; |
804 | 767 | ||
805 | if (pglob->gl_pathv != NULL) { | 768 | if (pglob->gl_pathv != NULL) { |
806 | pp = pglob->gl_pathv + pglob->gl_offs; | 769 | pp = pglob->gl_pathv + pglob->gl_offs; |
@@ -813,9 +776,7 @@ globfree(pglob) | |||
813 | } | 776 | } |
814 | 777 | ||
815 | static DIR * | 778 | static DIR * |
816 | g_opendir(str, pglob) | 779 | g_opendir(Char *str, glob_t *pglob) |
817 | register Char *str; | ||
818 | glob_t *pglob; | ||
819 | { | 780 | { |
820 | char buf[MAXPATHLEN]; | 781 | char buf[MAXPATHLEN]; |
821 | 782 | ||
@@ -833,10 +794,7 @@ g_opendir(str, pglob) | |||
833 | } | 794 | } |
834 | 795 | ||
835 | static int | 796 | static int |
836 | g_lstat(fn, sb, pglob) | 797 | g_lstat(Char *fn, struct stat *sb, glob_t *pglob) |
837 | register Char *fn; | ||
838 | struct stat *sb; | ||
839 | glob_t *pglob; | ||
840 | { | 798 | { |
841 | char buf[MAXPATHLEN]; | 799 | char buf[MAXPATHLEN]; |
842 | 800 | ||
@@ -848,10 +806,7 @@ g_lstat(fn, sb, pglob) | |||
848 | } | 806 | } |
849 | 807 | ||
850 | static int | 808 | static int |
851 | g_stat(fn, sb, pglob) | 809 | g_stat(Char *fn, struct stat *sb, glob_t *pglob) |
852 | register Char *fn; | ||
853 | struct stat *sb; | ||
854 | glob_t *pglob; | ||
855 | { | 810 | { |
856 | char buf[MAXPATHLEN]; | 811 | char buf[MAXPATHLEN]; |
857 | 812 | ||
@@ -863,9 +818,7 @@ g_stat(fn, sb, pglob) | |||
863 | } | 818 | } |
864 | 819 | ||
865 | static Char * | 820 | static Char * |
866 | g_strchr(str, ch) | 821 | g_strchr(Char *str, int ch) |
867 | Char *str; | ||
868 | int ch; | ||
869 | { | 822 | { |
870 | do { | 823 | do { |
871 | if (*str == ch) | 824 | if (*str == ch) |
@@ -875,10 +828,7 @@ g_strchr(str, ch) | |||
875 | } | 828 | } |
876 | 829 | ||
877 | static int | 830 | static int |
878 | g_Ctoc(str, buf, len) | 831 | g_Ctoc(const Char *str, char *buf, u_int len) |
879 | register const Char *str; | ||
880 | char *buf; | ||
881 | u_int len; | ||
882 | { | 832 | { |
883 | 833 | ||
884 | while (len--) { | 834 | while (len--) { |
@@ -890,11 +840,9 @@ g_Ctoc(str, buf, len) | |||
890 | 840 | ||
891 | #ifdef DEBUG | 841 | #ifdef DEBUG |
892 | static void | 842 | static void |
893 | qprintf(str, s) | 843 | qprintf(const char *str, Char *s) |
894 | const char *str; | ||
895 | register Char *s; | ||
896 | { | 844 | { |
897 | register Char *p; | 845 | Char *p; |
898 | 846 | ||
899 | (void)printf("%s:\n", str); | 847 | (void)printf("%s:\n", str); |
900 | for (p = s; *p; p++) | 848 | for (p = s; *p; p++) |
diff --git a/openbsd-compat/glob.h b/openbsd-compat/glob.h index 3428b2013..4fdbfc1ea 100644 --- a/openbsd-compat/glob.h +++ b/openbsd-compat/glob.h | |||
@@ -1,6 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: include/glob.h */ | 1 | /* $OpenBSD: glob.h,v 1.9 2004/10/07 16:56:11 millert Exp $ */ |
2 | |||
3 | /* $OpenBSD: glob.h,v 1.8 2003/06/02 19:34:12 millert Exp $ */ | ||
4 | /* $NetBSD: glob.h,v 1.5 1994/10/26 00:55:56 cgd Exp $ */ | 2 | /* $NetBSD: glob.h,v 1.5 1994/10/26 00:55:56 cgd Exp $ */ |
5 | 3 | ||
6 | /* | 4 | /* |
@@ -37,6 +35,8 @@ | |||
37 | * @(#)glob.h 8.1 (Berkeley) 6/2/93 | 35 | * @(#)glob.h 8.1 (Berkeley) 6/2/93 |
38 | */ | 36 | */ |
39 | 37 | ||
38 | /* OPENBSD ORIGINAL: include/glob.h */ | ||
39 | |||
40 | #if !defined(HAVE_GLOB_H) || !defined(GLOB_HAS_ALTDIRFUNC) || \ | 40 | #if !defined(HAVE_GLOB_H) || !defined(GLOB_HAS_ALTDIRFUNC) || \ |
41 | !defined(GLOB_HAS_GL_MATCHC) | 41 | !defined(GLOB_HAS_GL_MATCHC) |
42 | 42 | ||
@@ -72,6 +72,7 @@ typedef struct { | |||
72 | #define GLOB_MARK 0x0008 /* Append / to matching directories. */ | 72 | #define GLOB_MARK 0x0008 /* Append / to matching directories. */ |
73 | #define GLOB_NOCHECK 0x0010 /* Return pattern itself if nothing matches. */ | 73 | #define GLOB_NOCHECK 0x0010 /* Return pattern itself if nothing matches. */ |
74 | #define GLOB_NOSORT 0x0020 /* Don't sort. */ | 74 | #define GLOB_NOSORT 0x0020 /* Don't sort. */ |
75 | #define GLOB_NOESCAPE 0x1000 /* Disable backslash escaping. */ | ||
75 | 76 | ||
76 | #define GLOB_ALTDIRFUNC 0x0040 /* Use alternately specified directory funcs. */ | 77 | #define GLOB_ALTDIRFUNC 0x0040 /* Use alternately specified directory funcs. */ |
77 | #define GLOB_BRACE 0x0080 /* Expand braces ala csh. */ | 78 | #define GLOB_BRACE 0x0080 /* Expand braces ala csh. */ |
@@ -79,7 +80,6 @@ typedef struct { | |||
79 | #define GLOB_NOMAGIC 0x0200 /* GLOB_NOCHECK without magic chars (csh). */ | 80 | #define GLOB_NOMAGIC 0x0200 /* GLOB_NOCHECK without magic chars (csh). */ |
80 | #define GLOB_QUOTE 0x0400 /* Quote special chars with \. */ | 81 | #define GLOB_QUOTE 0x0400 /* Quote special chars with \. */ |
81 | #define GLOB_TILDE 0x0800 /* Expand tilde names from the passwd file. */ | 82 | #define GLOB_TILDE 0x0800 /* Expand tilde names from the passwd file. */ |
82 | #define GLOB_NOESCAPE 0x1000 /* Disable backslash escaping. */ | ||
83 | #define GLOB_LIMIT 0x2000 /* Limit pattern match output to ARG_MAX */ | 83 | #define GLOB_LIMIT 0x2000 /* Limit pattern match output to ARG_MAX */ |
84 | 84 | ||
85 | /* Error values returned by glob(3) */ | 85 | /* Error values returned by glob(3) */ |
diff --git a/openbsd-compat/inet_aton.c b/openbsd-compat/inet_aton.c index c141bcc68..130597e14 100644 --- a/openbsd-compat/inet_aton.c +++ b/openbsd-compat/inet_aton.c | |||
@@ -1,6 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/net/inet_addr.c */ | 1 | /* $OpenBSD: inet_addr.c,v 1.9 2005/08/06 20:30:03 espie Exp $ */ |
2 | |||
3 | /* $OpenBSD: inet_addr.c,v 1.7 2003/06/02 20:18:35 millert Exp $ */ | ||
4 | 2 | ||
5 | /* | 3 | /* |
6 | * Copyright (c) 1983, 1990, 1993 | 4 | * Copyright (c) 1983, 1990, 1993 |
@@ -51,19 +49,12 @@ | |||
51 | * --Copyright-- | 49 | * --Copyright-- |
52 | */ | 50 | */ |
53 | 51 | ||
52 | /* OPENBSD ORIGINAL: lib/libc/net/inet_addr.c */ | ||
53 | |||
54 | #include "includes.h" | 54 | #include "includes.h" |
55 | 55 | ||
56 | #if !defined(HAVE_INET_ATON) | 56 | #if !defined(HAVE_INET_ATON) |
57 | 57 | ||
58 | #if defined(LIBC_SCCS) && !defined(lint) | ||
59 | #if 0 | ||
60 | static char sccsid[] = "@(#)inet_addr.c 8.1 (Berkeley) 6/17/93"; | ||
61 | static char rcsid[] = "$From: inet_addr.c,v 8.5 1996/08/05 08:31:35 vixie Exp $"; | ||
62 | #else | ||
63 | static char rcsid[] = "$OpenBSD: inet_addr.c,v 1.7 2003/06/02 20:18:35 millert Exp $"; | ||
64 | #endif | ||
65 | #endif /* LIBC_SCCS and not lint */ | ||
66 | |||
67 | #include <sys/types.h> | 58 | #include <sys/types.h> |
68 | #include <sys/param.h> | 59 | #include <sys/param.h> |
69 | #include <netinet/in.h> | 60 | #include <netinet/in.h> |
@@ -76,8 +67,7 @@ static char rcsid[] = "$OpenBSD: inet_addr.c,v 1.7 2003/06/02 20:18:35 millert E | |||
76 | * The value returned is in network order. | 67 | * The value returned is in network order. |
77 | */ | 68 | */ |
78 | in_addr_t | 69 | in_addr_t |
79 | inet_addr(cp) | 70 | inet_addr(const char *cp) |
80 | register const char *cp; | ||
81 | { | 71 | { |
82 | struct in_addr val; | 72 | struct in_addr val; |
83 | 73 | ||
@@ -97,11 +87,11 @@ inet_addr(cp) | |||
97 | int | 87 | int |
98 | inet_aton(const char *cp, struct in_addr *addr) | 88 | inet_aton(const char *cp, struct in_addr *addr) |
99 | { | 89 | { |
100 | register u_int32_t val; | 90 | u_int32_t val; |
101 | register int base, n; | 91 | int base, n; |
102 | register char c; | 92 | char c; |
103 | unsigned int parts[4]; | 93 | u_int parts[4]; |
104 | register unsigned int *pp = parts; | 94 | u_int *pp = parts; |
105 | 95 | ||
106 | c = *cp; | 96 | c = *cp; |
107 | for (;;) { | 97 | for (;;) { |
diff --git a/openbsd-compat/inet_ntoa.c b/openbsd-compat/inet_ntoa.c index dc010dc53..0eb7b3bd7 100644 --- a/openbsd-compat/inet_ntoa.c +++ b/openbsd-compat/inet_ntoa.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/net/inet_ntoa.c */ | 1 | /* $OpenBSD: inet_ntoa.c,v 1.6 2005/08/06 20:30:03 espie Exp $ */ |
2 | |||
3 | /* | 2 | /* |
4 | * Copyright (c) 1983, 1993 | 3 | * Copyright (c) 1983, 1993 |
5 | * The Regents of the University of California. All rights reserved. | 4 | * The Regents of the University of California. All rights reserved. |
@@ -29,14 +28,12 @@ | |||
29 | * SUCH DAMAGE. | 28 | * SUCH DAMAGE. |
30 | */ | 29 | */ |
31 | 30 | ||
31 | /* OPENBSD ORIGINAL: lib/libc/net/inet_ntoa.c */ | ||
32 | |||
32 | #include "includes.h" | 33 | #include "includes.h" |
33 | 34 | ||
34 | #if defined(BROKEN_INET_NTOA) || !defined(HAVE_INET_NTOA) | 35 | #if defined(BROKEN_INET_NTOA) || !defined(HAVE_INET_NTOA) |
35 | 36 | ||
36 | #if defined(LIBC_SCCS) && !defined(lint) | ||
37 | static char rcsid[] = "$OpenBSD: inet_ntoa.c,v 1.4 2003/06/02 20:18:35 millert Exp $"; | ||
38 | #endif /* LIBC_SCCS and not lint */ | ||
39 | |||
40 | /* | 37 | /* |
41 | * Convert network-format internet address | 38 | * Convert network-format internet address |
42 | * to base 256 d.d.d.d representation. | 39 | * to base 256 d.d.d.d representation. |
@@ -46,10 +43,11 @@ static char rcsid[] = "$OpenBSD: inet_ntoa.c,v 1.4 2003/06/02 20:18:35 millert E | |||
46 | #include <arpa/inet.h> | 43 | #include <arpa/inet.h> |
47 | #include <stdio.h> | 44 | #include <stdio.h> |
48 | 45 | ||
49 | char *inet_ntoa(struct in_addr in) | 46 | char * |
47 | inet_ntoa(struct in_addr in) | ||
50 | { | 48 | { |
51 | static char b[18]; | 49 | static char b[18]; |
52 | register char *p; | 50 | char *p; |
53 | 51 | ||
54 | p = (char *)∈ | 52 | p = (char *)∈ |
55 | #define UC(b) (((int)b)&0xff) | 53 | #define UC(b) (((int)b)&0xff) |
diff --git a/openbsd-compat/inet_ntop.c b/openbsd-compat/inet_ntop.c index 47796c370..e7ca4b7f8 100644 --- a/openbsd-compat/inet_ntop.c +++ b/openbsd-compat/inet_ntop.c | |||
@@ -1,6 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/net/inet_ntop.c */ | 1 | /* $OpenBSD: inet_ntop.c,v 1.7 2005/08/06 20:30:03 espie Exp $ */ |
2 | |||
3 | /* $OpenBSD: inet_ntop.c,v 1.5 2002/08/23 16:27:31 itojun Exp $ */ | ||
4 | 2 | ||
5 | /* Copyright (c) 1996 by Internet Software Consortium. | 3 | /* Copyright (c) 1996 by Internet Software Consortium. |
6 | * | 4 | * |
@@ -18,18 +16,12 @@ | |||
18 | * SOFTWARE. | 16 | * SOFTWARE. |
19 | */ | 17 | */ |
20 | 18 | ||
19 | /* OPENBSD ORIGINAL: lib/libc/net/inet_ntop.c */ | ||
20 | |||
21 | #include "includes.h" | 21 | #include "includes.h" |
22 | 22 | ||
23 | #ifndef HAVE_INET_NTOP | 23 | #ifndef HAVE_INET_NTOP |
24 | 24 | ||
25 | #if defined(LIBC_SCCS) && !defined(lint) | ||
26 | #if 0 | ||
27 | static char rcsid[] = "$From: inet_ntop.c,v 8.7 1996/08/05 08:41:18 vixie Exp $"; | ||
28 | #else | ||
29 | static char rcsid[] = "$OpenBSD: inet_ntop.c,v 1.5 2002/08/23 16:27:31 itojun Exp $"; | ||
30 | #endif | ||
31 | #endif /* LIBC_SCCS and not lint */ | ||
32 | |||
33 | #include <sys/param.h> | 25 | #include <sys/param.h> |
34 | #include <sys/types.h> | 26 | #include <sys/types.h> |
35 | #include <sys/socket.h> | 27 | #include <sys/socket.h> |
@@ -65,11 +57,7 @@ static const char *inet_ntop6(const u_char *src, char *dst, size_t size); | |||
65 | * Paul Vixie, 1996. | 57 | * Paul Vixie, 1996. |
66 | */ | 58 | */ |
67 | const char * | 59 | const char * |
68 | inet_ntop(af, src, dst, size) | 60 | inet_ntop(int af, const void *src, char *dst, size_t size) |
69 | int af; | ||
70 | const void *src; | ||
71 | char *dst; | ||
72 | size_t size; | ||
73 | { | 61 | { |
74 | switch (af) { | 62 | switch (af) { |
75 | case AF_INET: | 63 | case AF_INET: |
@@ -95,10 +83,7 @@ inet_ntop(af, src, dst, size) | |||
95 | * Paul Vixie, 1996. | 83 | * Paul Vixie, 1996. |
96 | */ | 84 | */ |
97 | static const char * | 85 | static const char * |
98 | inet_ntop4(src, dst, size) | 86 | inet_ntop4(const u_char *src, char *dst, size_t size) |
99 | const u_char *src; | ||
100 | char *dst; | ||
101 | size_t size; | ||
102 | { | 87 | { |
103 | static const char fmt[] = "%u.%u.%u.%u"; | 88 | static const char fmt[] = "%u.%u.%u.%u"; |
104 | char tmp[sizeof "255.255.255.255"]; | 89 | char tmp[sizeof "255.255.255.255"]; |
@@ -120,10 +105,7 @@ inet_ntop4(src, dst, size) | |||
120 | * Paul Vixie, 1996. | 105 | * Paul Vixie, 1996. |
121 | */ | 106 | */ |
122 | static const char * | 107 | static const char * |
123 | inet_ntop6(src, dst, size) | 108 | inet_ntop6(const u_char *src, char *dst, size_t size) |
124 | const u_char *src; | ||
125 | char *dst; | ||
126 | size_t size; | ||
127 | { | 109 | { |
128 | /* | 110 | /* |
129 | * Note that int32_t and int16_t need only be "at least" large enough | 111 | * Note that int32_t and int16_t need only be "at least" large enough |
diff --git a/openbsd-compat/mktemp.c b/openbsd-compat/mktemp.c index 969f69580..88e04c520 100644 --- a/openbsd-compat/mktemp.c +++ b/openbsd-compat/mktemp.c | |||
@@ -1,8 +1,7 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/stdio/mktemp.c */ | ||
2 | |||
3 | /* THIS FILE HAS BEEN MODIFIED FROM THE ORIGINAL OPENBSD SOURCE */ | 1 | /* THIS FILE HAS BEEN MODIFIED FROM THE ORIGINAL OPENBSD SOURCE */ |
4 | /* Changes: Removed mktemp */ | 2 | /* Changes: Removed mktemp */ |
5 | 3 | ||
4 | /* $OpenBSD: mktemp.c,v 1.19 2005/08/08 08:05:36 espie Exp $ */ | ||
6 | /* | 5 | /* |
7 | * Copyright (c) 1987, 1993 | 6 | * Copyright (c) 1987, 1993 |
8 | * The Regents of the University of California. All rights reserved. | 7 | * The Regents of the University of California. All rights reserved. |
@@ -32,20 +31,16 @@ | |||
32 | * SUCH DAMAGE. | 31 | * SUCH DAMAGE. |
33 | */ | 32 | */ |
34 | 33 | ||
34 | /* OPENBSD ORIGINAL: lib/libc/stdio/mktemp.c */ | ||
35 | |||
35 | #include "includes.h" | 36 | #include "includes.h" |
36 | 37 | ||
37 | #if !defined(HAVE_MKDTEMP) || defined(HAVE_STRICT_MKSTEMP) | 38 | #if !defined(HAVE_MKDTEMP) || defined(HAVE_STRICT_MKSTEMP) |
38 | 39 | ||
39 | #if defined(LIBC_SCCS) && !defined(lint) | ||
40 | static char rcsid[] = "$OpenBSD: mktemp.c,v 1.17 2003/06/02 20:18:37 millert Exp $"; | ||
41 | #endif /* LIBC_SCCS and not lint */ | ||
42 | |||
43 | static int _gettemp(char *, int *, int, int); | 40 | static int _gettemp(char *, int *, int, int); |
44 | 41 | ||
45 | int | 42 | int |
46 | mkstemps(path, slen) | 43 | mkstemps(char *path, int slen) |
47 | char *path; | ||
48 | int slen; | ||
49 | { | 44 | { |
50 | int fd; | 45 | int fd; |
51 | 46 | ||
@@ -53,8 +48,7 @@ mkstemps(path, slen) | |||
53 | } | 48 | } |
54 | 49 | ||
55 | int | 50 | int |
56 | mkstemp(path) | 51 | mkstemp(char *path) |
57 | char *path; | ||
58 | { | 52 | { |
59 | int fd; | 53 | int fd; |
60 | 54 | ||
@@ -62,8 +56,7 @@ mkstemp(path) | |||
62 | } | 56 | } |
63 | 57 | ||
64 | char * | 58 | char * |
65 | mkdtemp(path) | 59 | mkdtemp(char *path) |
66 | char *path; | ||
67 | { | 60 | { |
68 | return(_gettemp(path, (int *)NULL, 1, 0) ? path : (char *)NULL); | 61 | return(_gettemp(path, (int *)NULL, 1, 0) ? path : (char *)NULL); |
69 | } | 62 | } |
diff --git a/openbsd-compat/openbsd-compat.h b/openbsd-compat/openbsd-compat.h index ba68bc27e..1a3027353 100644 --- a/openbsd-compat/openbsd-compat.h +++ b/openbsd-compat/openbsd-compat.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $Id: openbsd-compat.h,v 1.30 2005/08/26 20:15:20 tim Exp $ */ | 1 | /* $Id: openbsd-compat.h,v 1.33 2005/12/31 05:33:37 djm Exp $ */ |
2 | 2 | ||
3 | /* | 3 | /* |
4 | * Copyright (c) 1999-2003 Damien Miller. All rights reserved. | 4 | * Copyright (c) 1999-2003 Damien Miller. All rights reserved. |
@@ -142,6 +142,10 @@ unsigned int arc4random(void); | |||
142 | void arc4random_stir(void); | 142 | void arc4random_stir(void); |
143 | #endif /* !HAVE_ARC4RANDOM */ | 143 | #endif /* !HAVE_ARC4RANDOM */ |
144 | 144 | ||
145 | #ifndef HAVE_ASPRINTF | ||
146 | int asprintf(char **, const char *, ...); | ||
147 | #endif | ||
148 | |||
145 | #ifndef HAVE_OPENPTY | 149 | #ifndef HAVE_OPENPTY |
146 | int openpty(int *, int *, char *, struct termios *, struct winsize *); | 150 | int openpty(int *, int *, char *, struct termios *, struct winsize *); |
147 | #endif /* HAVE_OPENPTY */ | 151 | #endif /* HAVE_OPENPTY */ |
@@ -152,10 +156,18 @@ int openpty(int *, int *, char *, struct termios *, struct winsize *); | |||
152 | int snprintf(char *, size_t, const char *, ...); | 156 | int snprintf(char *, size_t, const char *, ...); |
153 | #endif | 157 | #endif |
154 | 158 | ||
159 | #ifndef HAVE_STRTOLL | ||
160 | long long strtoll(const char *, char **, int); | ||
161 | #endif | ||
162 | |||
155 | #ifndef HAVE_STRTONUM | 163 | #ifndef HAVE_STRTONUM |
156 | long long strtonum(const char *, long long, long long, const char **); | 164 | long long strtonum(const char *, long long, long long, const char **); |
157 | #endif | 165 | #endif |
158 | 166 | ||
167 | #ifndef HAVE_VASPRINTF | ||
168 | int vasprintf(char **, const char *, va_list); | ||
169 | #endif | ||
170 | |||
159 | #ifndef HAVE_VSNPRINTF | 171 | #ifndef HAVE_VSNPRINTF |
160 | int vsnprintf(char *, size_t, const char *, va_list); | 172 | int vsnprintf(char *, size_t, const char *, va_list); |
161 | #endif | 173 | #endif |
@@ -174,5 +186,6 @@ char *shadow_pw(struct passwd *pw); | |||
174 | #include "port-irix.h" | 186 | #include "port-irix.h" |
175 | #include "port-aix.h" | 187 | #include "port-aix.h" |
176 | #include "port-uw.h" | 188 | #include "port-uw.h" |
189 | #include "port-tun.h" | ||
177 | 190 | ||
178 | #endif /* _OPENBSD_COMPAT_H */ | 191 | #endif /* _OPENBSD_COMPAT_H */ |
diff --git a/openbsd-compat/openssl-compat.h b/openbsd-compat/openssl-compat.h index d9b2fa55f..8a015ec43 100644 --- a/openbsd-compat/openssl-compat.h +++ b/openbsd-compat/openssl-compat.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $Id: openssl-compat.h,v 1.1 2005/06/09 11:45:11 dtucker Exp $ */ | 1 | /* $Id: openssl-compat.h,v 1.3 2005/12/19 06:40:40 dtucker Exp $ */ |
2 | 2 | ||
3 | /* | 3 | /* |
4 | * Copyright (c) 2005 Darren Tucker <dtucker@zip.com.au> | 4 | * Copyright (c) 2005 Darren Tucker <dtucker@zip.com.au> |
@@ -24,7 +24,11 @@ | |||
24 | # define EVP_CIPHER_CTX_get_app_data(e) ((e)->app_data) | 24 | # define EVP_CIPHER_CTX_get_app_data(e) ((e)->app_data) |
25 | #endif | 25 | #endif |
26 | 26 | ||
27 | #if OPENSSL_VERSION_NUMBER < 0x00907000L | 27 | #if (OPENSSL_VERSION_NUMBER < 0x00907000L) || defined(OPENSSL_LOBOTOMISED_AES) |
28 | # define USE_BUILTIN_RIJNDAEL | ||
29 | #endif | ||
30 | |||
31 | #ifdef USE_BUILTIN_RIJNDAEL | ||
28 | # define EVP_aes_128_cbc evp_rijndael | 32 | # define EVP_aes_128_cbc evp_rijndael |
29 | # define EVP_aes_192_cbc evp_rijndael | 33 | # define EVP_aes_192_cbc evp_rijndael |
30 | # define EVP_aes_256_cbc evp_rijndael | 34 | # define EVP_aes_256_cbc evp_rijndael |
@@ -43,7 +47,12 @@ extern const EVP_CIPHER *evp_acss(void); | |||
43 | #endif | 47 | #endif |
44 | 48 | ||
45 | /* | 49 | /* |
46 | * insert comment here | 50 | * We overload some of the OpenSSL crypto functions with ssh_* equivalents |
51 | * which cater for older and/or less featureful OpenSSL version. | ||
52 | * | ||
53 | * In order for the compat library to call the real functions, it must | ||
54 | * define SSH_DONT_OVERLOAD_OPENSSL_FUNCS before including this file and | ||
55 | * implement the ssh_* equivalents. | ||
47 | */ | 56 | */ |
48 | #ifdef SSH_OLD_EVP | 57 | #ifdef SSH_OLD_EVP |
49 | 58 | ||
diff --git a/openbsd-compat/port-tun.c b/openbsd-compat/port-tun.c new file mode 100644 index 000000000..31921615f --- /dev/null +++ b/openbsd-compat/port-tun.c | |||
@@ -0,0 +1,252 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005 Reyk Floeter <reyk@openbsd.org> | ||
3 | * | ||
4 | * Permission to use, copy, modify, and distribute this software for any | ||
5 | * purpose with or without fee is hereby granted, provided that the above | ||
6 | * copyright notice and this permission notice appear in all copies. | ||
7 | * | ||
8 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
9 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
10 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
11 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
12 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
13 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
14 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
15 | */ | ||
16 | |||
17 | #include "includes.h" | ||
18 | |||
19 | #include "log.h" | ||
20 | #include "misc.h" | ||
21 | #include "bufaux.h" | ||
22 | |||
23 | /* | ||
24 | * This is the portable version of the SSH tunnel forwarding, it | ||
25 | * uses some preprocessor definitions for various platform-specific | ||
26 | * settings. | ||
27 | * | ||
28 | * SSH_TUN_LINUX Use the (newer) Linux tun/tap device | ||
29 | * SSH_TUN_COMPAT_AF Translate the OpenBSD address family | ||
30 | * SSH_TUN_PREPEND_AF Prepend/remove the address family | ||
31 | */ | ||
32 | |||
33 | /* | ||
34 | * System-specific tunnel open function | ||
35 | */ | ||
36 | |||
37 | #if defined(SSH_TUN_LINUX) | ||
38 | #include <linux/if.h> | ||
39 | #include <linux/if_tun.h> | ||
40 | |||
41 | int | ||
42 | sys_tun_open(int tun, int mode) | ||
43 | { | ||
44 | struct ifreq ifr; | ||
45 | int fd = -1; | ||
46 | const char *name = NULL; | ||
47 | |||
48 | if ((fd = open("/dev/net/tun", O_RDWR)) == -1) { | ||
49 | debug("%s: failed to open tunnel control interface: %s", | ||
50 | __func__, strerror(errno)); | ||
51 | return (-1); | ||
52 | } | ||
53 | |||
54 | bzero(&ifr, sizeof(ifr)); | ||
55 | |||
56 | if (mode == SSH_TUNMODE_ETHERNET) { | ||
57 | ifr.ifr_flags = IFF_TAP; | ||
58 | name = "tap%d"; | ||
59 | } else { | ||
60 | ifr.ifr_flags = IFF_TUN; | ||
61 | name = "tun%d"; | ||
62 | } | ||
63 | ifr.ifr_flags |= IFF_NO_PI; | ||
64 | |||
65 | if (tun != SSH_TUNID_ANY) { | ||
66 | if (tun > SSH_TUNID_MAX) { | ||
67 | debug("%s: invalid tunnel id %x: %s", __func__, | ||
68 | tun, strerror(errno)); | ||
69 | goto failed; | ||
70 | } | ||
71 | snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), name, tun); | ||
72 | } | ||
73 | |||
74 | if (ioctl(fd, TUNSETIFF, &ifr) == -1) { | ||
75 | debug("%s: failed to configure tunnel (mode %d): %s", __func__, | ||
76 | mode, strerror(errno)); | ||
77 | goto failed; | ||
78 | } | ||
79 | |||
80 | if (tun == SSH_TUNID_ANY) | ||
81 | debug("%s: tunnel mode %d fd %d", __func__, mode, fd); | ||
82 | else | ||
83 | debug("%s: %s mode %d fd %d", __func__, ifr.ifr_name, mode, fd); | ||
84 | |||
85 | return (fd); | ||
86 | |||
87 | failed: | ||
88 | close(fd); | ||
89 | return (-1); | ||
90 | } | ||
91 | #endif /* SSH_TUN_LINUX */ | ||
92 | |||
93 | #ifdef SSH_TUN_FREEBSD | ||
94 | #include <sys/socket.h> | ||
95 | #include <net/if.h> | ||
96 | #include <net/if_tun.h> | ||
97 | |||
98 | int | ||
99 | sys_tun_open(int tun, int mode) | ||
100 | { | ||
101 | struct ifreq ifr; | ||
102 | char name[100]; | ||
103 | int fd = -1, sock, flag; | ||
104 | const char *tunbase = "tun"; | ||
105 | |||
106 | if (mode == SSH_TUNMODE_ETHERNET) { | ||
107 | #ifdef SSH_TUN_NO_L2 | ||
108 | debug("%s: no layer 2 tunnelling support", __func__); | ||
109 | return (-1); | ||
110 | #else | ||
111 | tunbase = "tap"; | ||
112 | #endif | ||
113 | } | ||
114 | |||
115 | /* Open the tunnel device */ | ||
116 | if (tun <= SSH_TUNID_MAX) { | ||
117 | snprintf(name, sizeof(name), "/dev/%s%d", tunbase, tun); | ||
118 | fd = open(name, O_RDWR); | ||
119 | } else if (tun == SSH_TUNID_ANY) { | ||
120 | for (tun = 100; tun >= 0; tun--) { | ||
121 | snprintf(name, sizeof(name), "/dev/%s%d", | ||
122 | tunbase, tun); | ||
123 | if ((fd = open(name, O_RDWR)) >= 0) | ||
124 | break; | ||
125 | } | ||
126 | } else { | ||
127 | debug("%s: invalid tunnel %u\n", __func__, tun); | ||
128 | return (-1); | ||
129 | } | ||
130 | |||
131 | if (fd < 0) { | ||
132 | debug("%s: %s open failed: %s", __func__, name, | ||
133 | strerror(errno)); | ||
134 | return (-1); | ||
135 | } | ||
136 | |||
137 | /* Turn on tunnel headers */ | ||
138 | flag = 1; | ||
139 | #if defined(TUNSIFHEAD) && !defined(SSH_TUN_PREPEND_AF) | ||
140 | if (mode != SSH_TUNMODE_ETHERNET && | ||
141 | ioctl(fd, TUNSIFHEAD, &flag) == -1) { | ||
142 | debug("%s: ioctl(%d, TUNSIFHEAD, 1): %s", __func__, fd, | ||
143 | strerror(errno)); | ||
144 | close(fd); | ||
145 | } | ||
146 | #endif | ||
147 | |||
148 | debug("%s: %s mode %d fd %d", __func__, name, mode, fd); | ||
149 | |||
150 | /* Set the tunnel device operation mode */ | ||
151 | snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s%d", tunbase, tun); | ||
152 | if ((sock = socket(PF_UNIX, SOCK_STREAM, 0)) == -1) | ||
153 | goto failed; | ||
154 | |||
155 | if (ioctl(sock, SIOCGIFFLAGS, &ifr) == -1) | ||
156 | goto failed; | ||
157 | ifr.ifr_flags |= IFF_UP; | ||
158 | if (ioctl(sock, SIOCSIFFLAGS, &ifr) == -1) | ||
159 | goto failed; | ||
160 | |||
161 | close(sock); | ||
162 | return (fd); | ||
163 | |||
164 | failed: | ||
165 | if (fd >= 0) | ||
166 | close(fd); | ||
167 | if (sock >= 0) | ||
168 | close(sock); | ||
169 | debug("%s: failed to set %s mode %d: %s", __func__, name, | ||
170 | mode, strerror(errno)); | ||
171 | return (-1); | ||
172 | } | ||
173 | #endif /* SSH_TUN_FREEBSD */ | ||
174 | |||
175 | /* | ||
176 | * System-specific channel filters | ||
177 | */ | ||
178 | |||
179 | #if defined(SSH_TUN_FILTER) | ||
180 | #define OPENBSD_AF_INET 2 | ||
181 | #define OPENBSD_AF_INET6 24 | ||
182 | |||
183 | int | ||
184 | sys_tun_infilter(struct Channel *c, char *buf, int len) | ||
185 | { | ||
186 | #if defined(SSH_TUN_PREPEND_AF) | ||
187 | char rbuf[CHAN_RBUF]; | ||
188 | struct ip *iph; | ||
189 | #endif | ||
190 | u_int32_t *af; | ||
191 | char *ptr = buf; | ||
192 | |||
193 | #if defined(SSH_TUN_PREPEND_AF) | ||
194 | if (len <= 0 || len > (int)(sizeof(rbuf) - sizeof(*af))) | ||
195 | return (-1); | ||
196 | ptr = (char *)&rbuf[0]; | ||
197 | bcopy(buf, ptr + sizeof(u_int32_t), len); | ||
198 | len += sizeof(u_int32_t); | ||
199 | af = (u_int32_t *)ptr; | ||
200 | |||
201 | iph = (struct ip *)(ptr + sizeof(u_int32_t)); | ||
202 | switch (iph->ip_v) { | ||
203 | case 6: | ||
204 | *af = AF_INET6; | ||
205 | break; | ||
206 | case 4: | ||
207 | default: | ||
208 | *af = AF_INET; | ||
209 | break; | ||
210 | } | ||
211 | #endif | ||
212 | |||
213 | #if defined(SSH_TUN_COMPAT_AF) | ||
214 | if (len < (int)sizeof(u_int32_t)) | ||
215 | return (-1); | ||
216 | |||
217 | af = (u_int32_t *)ptr; | ||
218 | if (*af == htonl(AF_INET6)) | ||
219 | *af = htonl(OPENBSD_AF_INET6); | ||
220 | else | ||
221 | *af = htonl(OPENBSD_AF_INET); | ||
222 | #endif | ||
223 | |||
224 | buffer_put_string(&c->input, ptr, len); | ||
225 | return (0); | ||
226 | } | ||
227 | |||
228 | u_char * | ||
229 | sys_tun_outfilter(struct Channel *c, u_char **data, u_int *dlen) | ||
230 | { | ||
231 | u_char *buf; | ||
232 | u_int32_t *af; | ||
233 | |||
234 | *data = buffer_get_string(&c->output, dlen); | ||
235 | if (*dlen < sizeof(*af)) | ||
236 | return (NULL); | ||
237 | buf = *data; | ||
238 | |||
239 | #if defined(SSH_TUN_PREPEND_AF) | ||
240 | *dlen -= sizeof(u_int32_t); | ||
241 | buf = *data + sizeof(u_int32_t); | ||
242 | #elif defined(SSH_TUN_COMPAT_AF) | ||
243 | af = ntohl(*(u_int32_t *)buf); | ||
244 | if (*af == OPENBSD_AF_INET6) | ||
245 | *af = htonl(AF_INET6); | ||
246 | else | ||
247 | *af = htonl(AF_INET); | ||
248 | #endif | ||
249 | |||
250 | return (buf); | ||
251 | } | ||
252 | #endif /* SSH_TUN_FILTER */ | ||
diff --git a/openbsd-compat/port-tun.h b/openbsd-compat/port-tun.h new file mode 100644 index 000000000..86d9272b4 --- /dev/null +++ b/openbsd-compat/port-tun.h | |||
@@ -0,0 +1,33 @@ | |||
1 | /* | ||
2 | * Copyright (c) 2005 Reyk Floeter <reyk@openbsd.org> | ||
3 | * | ||
4 | * Permission to use, copy, modify, and distribute this software for any | ||
5 | * purpose with or without fee is hereby granted, provided that the above | ||
6 | * copyright notice and this permission notice appear in all copies. | ||
7 | * | ||
8 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
9 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
10 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
11 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
12 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
13 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
14 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
15 | */ | ||
16 | |||
17 | #ifndef _PORT_TUN_H | ||
18 | #define _PORT_TUN_H | ||
19 | |||
20 | #include "channels.h" | ||
21 | |||
22 | #if defined(SSH_TUN_LINUX) || defined(SSH_TUN_FREEBSD) | ||
23 | # define CUSTOM_SYS_TUN_OPEN | ||
24 | int sys_tun_open(int, int); | ||
25 | #endif | ||
26 | |||
27 | #if defined(SSH_TUN_COMPAT_AF) || defined(SSH_TUN_PREPEND_AF) | ||
28 | # define SSH_TUN_FILTER | ||
29 | int sys_tun_infilter(struct Channel *, char *, int); | ||
30 | u_char *sys_tun_outfilter(struct Channel *, u_char **, u_int *); | ||
31 | #endif | ||
32 | |||
33 | #endif | ||
diff --git a/openbsd-compat/port-uw.c b/openbsd-compat/port-uw.c index d881ff028..c64427121 100644 --- a/openbsd-compat/port-uw.c +++ b/openbsd-compat/port-uw.c | |||
@@ -25,7 +25,7 @@ | |||
25 | 25 | ||
26 | #include "includes.h" | 26 | #include "includes.h" |
27 | 27 | ||
28 | #if defined(HAVE_LIBIAF) && !defined(BROKEN_LIBIAF) | 28 | #ifdef HAVE_LIBIAF |
29 | #ifdef HAVE_CRYPT_H | 29 | #ifdef HAVE_CRYPT_H |
30 | #include <crypt.h> | 30 | #include <crypt.h> |
31 | #endif | 31 | #endif |
@@ -42,7 +42,6 @@ int | |||
42 | sys_auth_passwd(Authctxt *authctxt, const char *password) | 42 | sys_auth_passwd(Authctxt *authctxt, const char *password) |
43 | { | 43 | { |
44 | struct passwd *pw = authctxt->pw; | 44 | struct passwd *pw = authctxt->pw; |
45 | char *encrypted_password; | ||
46 | char *salt; | 45 | char *salt; |
47 | int result; | 46 | int result; |
48 | 47 | ||
@@ -55,21 +54,24 @@ sys_auth_passwd(Authctxt *authctxt, const char *password) | |||
55 | 54 | ||
56 | /* Encrypt the candidate password using the proper salt. */ | 55 | /* Encrypt the candidate password using the proper salt. */ |
57 | salt = (pw_password[0] && pw_password[1]) ? pw_password : "xx"; | 56 | salt = (pw_password[0] && pw_password[1]) ? pw_password : "xx"; |
58 | #ifdef UNIXWARE_LONG_PASSWORDS | ||
59 | if (!nischeck(pw->pw_name)) | ||
60 | encrypted_password = bigcrypt(password, salt); | ||
61 | else | ||
62 | #endif /* UNIXWARE_LONG_PASSWORDS */ | ||
63 | encrypted_password = xcrypt(password, salt); | ||
64 | 57 | ||
65 | /* | 58 | /* |
66 | * Authentication is accepted if the encrypted passwords | 59 | * Authentication is accepted if the encrypted passwords |
67 | * are identical. | 60 | * are identical. |
68 | */ | 61 | */ |
69 | result = (strcmp(encrypted_password, pw_password) == 0); | 62 | #ifdef UNIXWARE_LONG_PASSWORDS |
63 | if (!nischeck(pw->pw_name)) { | ||
64 | result = ((strcmp(bigcrypt(password, salt), pw_password) == 0) | ||
65 | || (strcmp(osr5bigcrypt(password, salt), pw_password) == 0)); | ||
66 | } | ||
67 | else | ||
68 | #endif /* UNIXWARE_LONG_PASSWORDS */ | ||
69 | result = (strcmp(xcrypt(password, salt), pw_password) == 0); | ||
70 | 70 | ||
71 | #if !defined(BROKEN_LIBIAF) | ||
71 | if (authctxt->valid) | 72 | if (authctxt->valid) |
72 | free(pw_password); | 73 | free(pw_password); |
74 | #endif | ||
73 | return(result); | 75 | return(result); |
74 | } | 76 | } |
75 | 77 | ||
@@ -114,6 +116,7 @@ nischeck(char *namep) | |||
114 | functions that call shadow_pw() will need to free | 116 | functions that call shadow_pw() will need to free |
115 | */ | 117 | */ |
116 | 118 | ||
119 | #if !defined(BROKEN_LIBIAF) | ||
117 | char * | 120 | char * |
118 | get_iaf_password(struct passwd *pw) | 121 | get_iaf_password(struct passwd *pw) |
119 | { | 122 | { |
@@ -130,5 +133,6 @@ get_iaf_password(struct passwd *pw) | |||
130 | else | 133 | else |
131 | fatal("ia_openinfo: Unable to open the shadow passwd file"); | 134 | fatal("ia_openinfo: Unable to open the shadow passwd file"); |
132 | } | 135 | } |
133 | #endif /* HAVE_LIBIAF && !BROKEN_LIBIAF */ | 136 | #endif /* !BROKEN_LIBIAF */ |
137 | #endif /* HAVE_LIBIAF */ | ||
134 | 138 | ||
diff --git a/openbsd-compat/readpassphrase.c b/openbsd-compat/readpassphrase.c index eb060bdbf..919c0174a 100644 --- a/openbsd-compat/readpassphrase.c +++ b/openbsd-compat/readpassphrase.c | |||
@@ -1,6 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/gen/readpassphrase.c */ | 1 | /* $OpenBSD: readpassphrase.c,v 1.18 2005/08/08 08:05:34 espie Exp $ */ |
2 | |||
3 | /* $OpenBSD: readpassphrase.c,v 1.16 2003/06/17 21:56:23 millert Exp $ */ | ||
4 | 2 | ||
5 | /* | 3 | /* |
6 | * Copyright (c) 2000-2002 Todd C. Miller <Todd.Miller@courtesan.com> | 4 | * Copyright (c) 2000-2002 Todd C. Miller <Todd.Miller@courtesan.com> |
@@ -22,9 +20,7 @@ | |||
22 | * Materiel Command, USAF, under agreement number F39502-99-1-0512. | 20 | * Materiel Command, USAF, under agreement number F39502-99-1-0512. |
23 | */ | 21 | */ |
24 | 22 | ||
25 | #if defined(LIBC_SCCS) && !defined(lint) | 23 | /* OPENBSD ORIGINAL: lib/libc/gen/readpassphrase.c */ |
26 | static const char rcsid[] = "$OpenBSD: readpassphrase.c,v 1.16 2003/06/17 21:56:23 millert Exp $"; | ||
27 | #endif /* LIBC_SCCS and not lint */ | ||
28 | 24 | ||
29 | #include "includes.h" | 25 | #include "includes.h" |
30 | 26 | ||
diff --git a/openbsd-compat/readpassphrase.h b/openbsd-compat/readpassphrase.h index 178edf346..5fd7c5d77 100644 --- a/openbsd-compat/readpassphrase.h +++ b/openbsd-compat/readpassphrase.h | |||
@@ -1,34 +1,27 @@ | |||
1 | /* OPENBSD ORIGINAL: include/readpassphrase.h */ | 1 | /* $OpenBSD: readpassphrase.h,v 1.5 2003/06/17 21:56:23 millert Exp $ */ |
2 | |||
3 | /* $OpenBSD: readpassphrase.h,v 1.3 2002/06/28 12:32:22 millert Exp $ */ | ||
4 | 2 | ||
5 | /* | 3 | /* |
6 | * Copyright (c) 2000 Todd C. Miller <Todd.Miller@courtesan.com> | 4 | * Copyright (c) 2000, 2002 Todd C. Miller <Todd.Miller@courtesan.com> |
7 | * All rights reserved. | 5 | * |
6 | * Permission to use, copy, modify, and distribute this software for any | ||
7 | * purpose with or without fee is hereby granted, provided that the above | ||
8 | * copyright notice and this permission notice appear in all copies. | ||
8 | * | 9 | * |
9 | * Redistribution and use in source and binary forms, with or without | 10 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
10 | * modification, are permitted provided that the following conditions | 11 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
11 | * are met: | 12 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
12 | * 1. Redistributions of source code must retain the above copyright | 13 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
13 | * notice, this list of conditions and the following disclaimer. | 14 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
14 | * 2. Redistributions in binary form must reproduce the above copyright | 15 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
15 | * notice, this list of conditions and the following disclaimer in the | 16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
16 | * documentation and/or other materials provided with the distribution. | ||
17 | * 3. The name of the author may not be used to endorse or promote products | ||
18 | * derived from this software without specific prior written permission. | ||
19 | * | 17 | * |
20 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, | 18 | * Sponsored in part by the Defense Advanced Research Projects |
21 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY | 19 | * Agency (DARPA) and Air Force Research Laboratory, Air Force |
22 | * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL | 20 | * Materiel Command, USAF, under agreement number F39502-99-1-0512. |
23 | * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
24 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, | ||
25 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; | ||
26 | * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | ||
27 | * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR | ||
28 | * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF | ||
29 | * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
30 | */ | 21 | */ |
31 | 22 | ||
23 | /* OPENBSD ORIGINAL: include/readpassphrase.h */ | ||
24 | |||
32 | #ifndef _READPASSPHRASE_H_ | 25 | #ifndef _READPASSPHRASE_H_ |
33 | #define _READPASSPHRASE_H_ | 26 | #define _READPASSPHRASE_H_ |
34 | 27 | ||
diff --git a/openbsd-compat/realpath.c b/openbsd-compat/realpath.c index 8430bec24..b6120d034 100644 --- a/openbsd-compat/realpath.c +++ b/openbsd-compat/realpath.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/stdlib/realpath.c */ | 1 | /* $OpenBSD: realpath.c,v 1.13 2005/08/08 08:05:37 espie Exp $ */ |
2 | |||
3 | /* | 2 | /* |
4 | * Copyright (c) 2003 Constantin S. Svintsoff <kostik@iclub.nsu.ru> | 3 | * Copyright (c) 2003 Constantin S. Svintsoff <kostik@iclub.nsu.ru> |
5 | * | 4 | * |
@@ -28,6 +27,8 @@ | |||
28 | * SUCH DAMAGE. | 27 | * SUCH DAMAGE. |
29 | */ | 28 | */ |
30 | 29 | ||
30 | /* OPENBSD ORIGINAL: lib/libc/stdlib/realpath.c */ | ||
31 | |||
31 | #include "includes.h" | 32 | #include "includes.h" |
32 | 33 | ||
33 | #if !defined(HAVE_REALPATH) || defined(BROKEN_REALPATH) | 34 | #if !defined(HAVE_REALPATH) || defined(BROKEN_REALPATH) |
diff --git a/openbsd-compat/rresvport.c b/openbsd-compat/rresvport.c index 75167065c..71cf6e6eb 100644 --- a/openbsd-compat/rresvport.c +++ b/openbsd-compat/rresvport.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/net/rresvport.c */ | 1 | /* $OpenBSD: rresvport.c,v 1.9 2005/11/10 10:00:17 espie Exp $ */ |
2 | |||
3 | /* | 2 | /* |
4 | * Copyright (c) 1995, 1996, 1998 Theo de Raadt. All rights reserved. | 3 | * Copyright (c) 1995, 1996, 1998 Theo de Raadt. All rights reserved. |
5 | * Copyright (c) 1983, 1993, 1994 | 4 | * Copyright (c) 1983, 1993, 1994 |
@@ -30,26 +29,21 @@ | |||
30 | * SUCH DAMAGE. | 29 | * SUCH DAMAGE. |
31 | */ | 30 | */ |
32 | 31 | ||
32 | /* OPENBSD ORIGINAL: lib/libc/net/rresvport.c */ | ||
33 | |||
33 | #include "includes.h" | 34 | #include "includes.h" |
34 | 35 | ||
35 | #ifndef HAVE_RRESVPORT_AF | 36 | #ifndef HAVE_RRESVPORT_AF |
36 | 37 | ||
37 | #if defined(LIBC_SCCS) && !defined(lint) | ||
38 | static char *rcsid = "$OpenBSD: rresvport.c,v 1.6 2003/06/03 02:11:35 deraadt Exp $"; | ||
39 | #endif /* LIBC_SCCS and not lint */ | ||
40 | |||
41 | #include "includes.h" | ||
42 | |||
43 | #if 0 | 38 | #if 0 |
44 | int | 39 | int |
45 | rresvport(alport) | 40 | rresvport(int *alport) |
46 | int *alport; | ||
47 | { | 41 | { |
48 | return rresvport_af(alport, AF_INET); | 42 | return rresvport_af(alport, AF_INET); |
49 | } | 43 | } |
50 | #endif | 44 | #endif |
51 | 45 | ||
52 | int | 46 | int |
53 | rresvport_af(int *alport, sa_family_t af) | 47 | rresvport_af(int *alport, sa_family_t af) |
54 | { | 48 | { |
55 | struct sockaddr_storage ss; | 49 | struct sockaddr_storage ss; |
diff --git a/openbsd-compat/setenv.c b/openbsd-compat/setenv.c index c3a86c651..b52a99c2c 100644 --- a/openbsd-compat/setenv.c +++ b/openbsd-compat/setenv.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/stdlib/setenv.c */ | 1 | /* $OpenBSD: setenv.c,v 1.9 2005/08/08 08:05:37 espie Exp $ */ |
2 | |||
3 | /* | 2 | /* |
4 | * Copyright (c) 1987 Regents of the University of California. | 3 | * Copyright (c) 1987 Regents of the University of California. |
5 | * All rights reserved. | 4 | * All rights reserved. |
@@ -29,36 +28,31 @@ | |||
29 | * SUCH DAMAGE. | 28 | * SUCH DAMAGE. |
30 | */ | 29 | */ |
31 | 30 | ||
31 | /* OPENBSD ORIGINAL: lib/libc/stdlib/setenv.c */ | ||
32 | |||
32 | #include "includes.h" | 33 | #include "includes.h" |
33 | #if !defined(HAVE_SETENV) || !defined(HAVE_UNSETENV) | 34 | #if !defined(HAVE_SETENV) || !defined(HAVE_UNSETENV) |
34 | 35 | ||
35 | #if defined(LIBC_SCCS) && !defined(lint) | ||
36 | static char *rcsid = "$OpenBSD: setenv.c,v 1.6 2003/06/02 20:18:38 millert Exp $"; | ||
37 | #endif /* LIBC_SCCS and not lint */ | ||
38 | |||
39 | #include <stdlib.h> | 36 | #include <stdlib.h> |
40 | #include <string.h> | 37 | #include <string.h> |
41 | 38 | ||
42 | char *__findenv(const char *name, int *offset); | 39 | extern char **environ; |
43 | 40 | ||
41 | /* OpenSSH Portable: __findenv is from getenv.c rev 1.8, made static */ | ||
44 | /* | 42 | /* |
45 | * __findenv -- | 43 | * __findenv -- |
46 | * Returns pointer to value associated with name, if any, else NULL. | 44 | * Returns pointer to value associated with name, if any, else NULL. |
47 | * Sets offset to be the offset of the name/value combination in the | 45 | * Sets offset to be the offset of the name/value combination in the |
48 | * environmental array, for use by setenv(3) and unsetenv(3). | 46 | * environmental array, for use by setenv(3) and unsetenv(3). |
49 | * Explicitly removes '=' in argument name. | 47 | * Explicitly removes '=' in argument name. |
50 | * | ||
51 | * This routine *should* be a static; don't use it. | ||
52 | */ | 48 | */ |
53 | char * | 49 | static char * |
54 | __findenv(name, offset) | 50 | __findenv(const char *name, int *offset) |
55 | register const char *name; | ||
56 | int *offset; | ||
57 | { | 51 | { |
58 | extern char **environ; | 52 | extern char **environ; |
59 | register int len, i; | 53 | int len, i; |
60 | register const char *np; | 54 | const char *np; |
61 | register char **p, *cp; | 55 | char **p, *cp; |
62 | 56 | ||
63 | if (name == NULL || environ == NULL) | 57 | if (name == NULL || environ == NULL) |
64 | return (NULL); | 58 | return (NULL); |
@@ -84,14 +78,10 @@ __findenv(name, offset) | |||
84 | * "value". If rewrite is set, replace any current value. | 78 | * "value". If rewrite is set, replace any current value. |
85 | */ | 79 | */ |
86 | int | 80 | int |
87 | setenv(name, value, rewrite) | 81 | setenv(const char *name, const char *value, int rewrite) |
88 | register const char *name; | ||
89 | register const char *value; | ||
90 | int rewrite; | ||
91 | { | 82 | { |
92 | extern char **environ; | 83 | static char **lastenv; /* last value of environ */ |
93 | static int alloced; /* if allocated space before */ | 84 | char *C; |
94 | register char *C; | ||
95 | int l_value, offset; | 85 | int l_value, offset; |
96 | 86 | ||
97 | if (*value == '=') /* no `=' in value */ | 87 | if (*value == '=') /* no `=' in value */ |
@@ -106,30 +96,23 @@ setenv(name, value, rewrite) | |||
106 | return (0); | 96 | return (0); |
107 | } | 97 | } |
108 | } else { /* create new slot */ | 98 | } else { /* create new slot */ |
109 | register int cnt; | 99 | size_t cnt; |
110 | register char **P; | 100 | char **P; |
111 | 101 | ||
112 | for (P = environ, cnt = 0; *P; ++P, ++cnt); | 102 | for (P = environ; *P != NULL; P++) |
113 | if (alloced) { /* just increase size */ | 103 | ; |
114 | P = (char **)realloc((void *)environ, | 104 | cnt = P - environ; |
115 | (size_t)(sizeof(char *) * (cnt + 2))); | 105 | P = (char **)realloc(lastenv, sizeof(char *) * (cnt + 2)); |
116 | if (!P) | 106 | if (!P) |
117 | return (-1); | 107 | return (-1); |
118 | environ = P; | 108 | if (lastenv != environ) |
119 | } | 109 | memcpy(P, environ, cnt * sizeof(char *)); |
120 | else { /* get new space */ | 110 | lastenv = environ = P; |
121 | alloced = 1; /* copy old entries into it */ | ||
122 | P = (char **)malloc((size_t)(sizeof(char *) * | ||
123 | (cnt + 2))); | ||
124 | if (!P) | ||
125 | return (-1); | ||
126 | memmove(P, environ, cnt * sizeof(char *)); | ||
127 | environ = P; | ||
128 | } | ||
129 | environ[cnt + 1] = NULL; | ||
130 | offset = cnt; | 111 | offset = cnt; |
112 | environ[cnt + 1] = NULL; | ||
131 | } | 113 | } |
132 | for (C = (char *)name; *C && *C != '='; ++C); /* no `=' in name */ | 114 | for (C = (char *)name; *C && *C != '='; ++C) |
115 | ; /* no `=' in name */ | ||
133 | if (!(environ[offset] = /* name + `=' + value */ | 116 | if (!(environ[offset] = /* name + `=' + value */ |
134 | malloc((size_t)((int)(C - name) + l_value + 2)))) | 117 | malloc((size_t)((int)(C - name) + l_value + 2)))) |
135 | return (-1); | 118 | return (-1); |
@@ -147,15 +130,12 @@ setenv(name, value, rewrite) | |||
147 | * Delete environmental variable "name". | 130 | * Delete environmental variable "name". |
148 | */ | 131 | */ |
149 | void | 132 | void |
150 | unsetenv(name) | 133 | unsetenv(const char *name) |
151 | const char *name; | ||
152 | { | 134 | { |
153 | extern char **environ; | 135 | char **P; |
154 | register char **P; | ||
155 | int offset; | 136 | int offset; |
156 | char *__findenv(); | ||
157 | 137 | ||
158 | while (__findenv(name, &offset)) /* if set multiple times */ | 138 | while (__findenv(name, &offset)) /* if set multiple times */ |
159 | for (P = &environ[offset];; ++P) | 139 | for (P = &environ[offset];; ++P) |
160 | if (!(*P = *(P + 1))) | 140 | if (!(*P = *(P + 1))) |
161 | break; | 141 | break; |
diff --git a/openbsd-compat/sigact.c b/openbsd-compat/sigact.c index 2772ac574..8b8e4dd2c 100644 --- a/openbsd-compat/sigact.c +++ b/openbsd-compat/sigact.c | |||
@@ -1,9 +1,7 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libcurses/base/sigaction.c */ | 1 | /* $OpenBSD: sigaction.c,v 1.4 2001/01/22 18:01:48 millert Exp $ */ |
2 | |||
3 | /* $OpenBSD: sigaction.c,v 1.3 1999/06/27 08:14:21 millert Exp $ */ | ||
4 | 2 | ||
5 | /**************************************************************************** | 3 | /**************************************************************************** |
6 | * Copyright (c) 1998 Free Software Foundation, Inc. * | 4 | * Copyright (c) 1998,2000 Free Software Foundation, Inc. * |
7 | * * | 5 | * * |
8 | * Permission is hereby granted, free of charge, to any person obtaining a * | 6 | * Permission is hereby granted, free of charge, to any person obtaining a * |
9 | * copy of this software and associated documentation files (the * | 7 | * copy of this software and associated documentation files (the * |
@@ -35,6 +33,8 @@ | |||
35 | * and: Eric S. Raymond <esr@snark.thyrsus.com> * | 33 | * and: Eric S. Raymond <esr@snark.thyrsus.com> * |
36 | ****************************************************************************/ | 34 | ****************************************************************************/ |
37 | 35 | ||
36 | /* OPENBSD ORIGINAL: lib/libcurses/base/sigaction.c */ | ||
37 | |||
38 | #include "includes.h" | 38 | #include "includes.h" |
39 | #include <signal.h> | 39 | #include <signal.h> |
40 | #include "sigact.h" | 40 | #include "sigact.h" |
diff --git a/openbsd-compat/sigact.h b/openbsd-compat/sigact.h index b37c1f84a..db96d0a5c 100644 --- a/openbsd-compat/sigact.h +++ b/openbsd-compat/sigact.h | |||
@@ -1,7 +1,7 @@ | |||
1 | /* $OpenBSD: SigAction.h,v 1.2 1999/06/27 08:15:19 millert Exp $ */ | 1 | /* $OpenBSD: SigAction.h,v 1.3 2001/01/22 18:01:32 millert Exp $ */ |
2 | 2 | ||
3 | /**************************************************************************** | 3 | /**************************************************************************** |
4 | * Copyright (c) 1998 Free Software Foundation, Inc. * | 4 | * Copyright (c) 1998,2000 Free Software Foundation, Inc. * |
5 | * * | 5 | * * |
6 | * Permission is hereby granted, free of charge, to any person obtaining a * | 6 | * Permission is hereby granted, free of charge, to any person obtaining a * |
7 | * copy of this software and associated documentation files (the * | 7 | * copy of this software and associated documentation files (the * |
@@ -34,12 +34,14 @@ | |||
34 | ****************************************************************************/ | 34 | ****************************************************************************/ |
35 | 35 | ||
36 | /* | 36 | /* |
37 | * $From: SigAction.h,v 1.5 1999/06/19 23:00:54 tom Exp $ | 37 | * $From: SigAction.h,v 1.6 2000/12/10 02:36:10 tom Exp $ |
38 | * | 38 | * |
39 | * This file exists to handle non-POSIX systems which don't have <unistd.h>, | 39 | * This file exists to handle non-POSIX systems which don't have <unistd.h>, |
40 | * and usually no sigaction() nor <termios.h> | 40 | * and usually no sigaction() nor <termios.h> |
41 | */ | 41 | */ |
42 | 42 | ||
43 | /* OPENBSD ORIGINAL: lib/libcurses/SigAction.h */ | ||
44 | |||
43 | #ifndef _SIGACTION_H | 45 | #ifndef _SIGACTION_H |
44 | #define _SIGACTION_H | 46 | #define _SIGACTION_H |
45 | 47 | ||
diff --git a/openbsd-compat/strlcat.c b/openbsd-compat/strlcat.c index 70f01cb2a..bcc1b61ad 100644 --- a/openbsd-compat/strlcat.c +++ b/openbsd-compat/strlcat.c | |||
@@ -1,6 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/string/strlcat.c */ | 1 | /* $OpenBSD: strlcat.c,v 1.13 2005/08/08 08:05:37 espie Exp $ */ |
2 | |||
3 | /* $OpenBSD: strlcat.c,v 1.11 2003/06/17 21:56:24 millert Exp $ */ | ||
4 | 2 | ||
5 | /* | 3 | /* |
6 | * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> | 4 | * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> |
@@ -18,13 +16,11 @@ | |||
18 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
19 | */ | 17 | */ |
20 | 18 | ||
19 | /* OPENBSD ORIGINAL: lib/libc/string/strlcat.c */ | ||
20 | |||
21 | #include "includes.h" | 21 | #include "includes.h" |
22 | #ifndef HAVE_STRLCAT | 22 | #ifndef HAVE_STRLCAT |
23 | 23 | ||
24 | #if defined(LIBC_SCCS) && !defined(lint) | ||
25 | static char *rcsid = "$OpenBSD: strlcat.c,v 1.11 2003/06/17 21:56:24 millert Exp $"; | ||
26 | #endif /* LIBC_SCCS and not lint */ | ||
27 | |||
28 | #include <sys/types.h> | 24 | #include <sys/types.h> |
29 | #include <string.h> | 25 | #include <string.h> |
30 | 26 | ||
@@ -38,9 +34,9 @@ static char *rcsid = "$OpenBSD: strlcat.c,v 1.11 2003/06/17 21:56:24 millert Exp | |||
38 | size_t | 34 | size_t |
39 | strlcat(char *dst, const char *src, size_t siz) | 35 | strlcat(char *dst, const char *src, size_t siz) |
40 | { | 36 | { |
41 | register char *d = dst; | 37 | char *d = dst; |
42 | register const char *s = src; | 38 | const char *s = src; |
43 | register size_t n = siz; | 39 | size_t n = siz; |
44 | size_t dlen; | 40 | size_t dlen; |
45 | 41 | ||
46 | /* Find the end of dst and adjust bytes left but don't go past end */ | 42 | /* Find the end of dst and adjust bytes left but don't go past end */ |
diff --git a/openbsd-compat/strlcpy.c b/openbsd-compat/strlcpy.c index ccfa12a0a..679a5b291 100644 --- a/openbsd-compat/strlcpy.c +++ b/openbsd-compat/strlcpy.c | |||
@@ -1,6 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/string/strlcpy.c */ | 1 | /* $OpenBSD: strlcpy.c,v 1.10 2005/08/08 08:05:37 espie Exp $ */ |
2 | |||
3 | /* $OpenBSD: strlcpy.c,v 1.8 2003/06/17 21:56:24 millert Exp $ */ | ||
4 | 2 | ||
5 | /* | 3 | /* |
6 | * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> | 4 | * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com> |
@@ -18,13 +16,11 @@ | |||
18 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
19 | */ | 17 | */ |
20 | 18 | ||
19 | /* OPENBSD ORIGINAL: lib/libc/string/strlcpy.c */ | ||
20 | |||
21 | #include "includes.h" | 21 | #include "includes.h" |
22 | #ifndef HAVE_STRLCPY | 22 | #ifndef HAVE_STRLCPY |
23 | 23 | ||
24 | #if defined(LIBC_SCCS) && !defined(lint) | ||
25 | static char *rcsid = "$OpenBSD: strlcpy.c,v 1.8 2003/06/17 21:56:24 millert Exp $"; | ||
26 | #endif /* LIBC_SCCS and not lint */ | ||
27 | |||
28 | #include <sys/types.h> | 24 | #include <sys/types.h> |
29 | #include <string.h> | 25 | #include <string.h> |
30 | 26 | ||
@@ -36,9 +32,9 @@ static char *rcsid = "$OpenBSD: strlcpy.c,v 1.8 2003/06/17 21:56:24 millert Exp | |||
36 | size_t | 32 | size_t |
37 | strlcpy(char *dst, const char *src, size_t siz) | 33 | strlcpy(char *dst, const char *src, size_t siz) |
38 | { | 34 | { |
39 | register char *d = dst; | 35 | char *d = dst; |
40 | register const char *s = src; | 36 | const char *s = src; |
41 | register size_t n = siz; | 37 | size_t n = siz; |
42 | 38 | ||
43 | /* Copy as many bytes as will fit */ | 39 | /* Copy as many bytes as will fit */ |
44 | if (n != 0 && --n != 0) { | 40 | if (n != 0 && --n != 0) { |
diff --git a/openbsd-compat/strmode.c b/openbsd-compat/strmode.c index ea8d515e3..4a8161422 100644 --- a/openbsd-compat/strmode.c +++ b/openbsd-compat/strmode.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/string/strmode.c */ | 1 | /* $OpenBSD: strmode.c,v 1.7 2005/08/08 08:05:37 espie Exp $ */ |
2 | |||
3 | /*- | 2 | /*- |
4 | * Copyright (c) 1990 The Regents of the University of California. | 3 | * Copyright (c) 1990 The Regents of the University of California. |
5 | * All rights reserved. | 4 | * All rights reserved. |
@@ -29,13 +28,11 @@ | |||
29 | * SUCH DAMAGE. | 28 | * SUCH DAMAGE. |
30 | */ | 29 | */ |
31 | 30 | ||
31 | /* OPENBSD ORIGINAL: lib/libc/string/strmode.c */ | ||
32 | |||
32 | #include "includes.h" | 33 | #include "includes.h" |
33 | #ifndef HAVE_STRMODE | 34 | #ifndef HAVE_STRMODE |
34 | 35 | ||
35 | #if defined(LIBC_SCCS) && !defined(lint) | ||
36 | static char *rcsid = "$OpenBSD: strmode.c,v 1.5 2003/06/11 21:08:16 deraadt Exp $"; | ||
37 | #endif /* LIBC_SCCS and not lint */ | ||
38 | |||
39 | #include <sys/types.h> | 36 | #include <sys/types.h> |
40 | #include <sys/stat.h> | 37 | #include <sys/stat.h> |
41 | #include <string.h> | 38 | #include <string.h> |
@@ -72,11 +69,6 @@ strmode(int mode, char *p) | |||
72 | *p++ = 'p'; | 69 | *p++ = 'p'; |
73 | break; | 70 | break; |
74 | #endif | 71 | #endif |
75 | #ifdef S_IFWHT | ||
76 | case S_IFWHT: /* whiteout */ | ||
77 | *p++ = 'w'; | ||
78 | break; | ||
79 | #endif | ||
80 | default: /* unknown */ | 72 | default: /* unknown */ |
81 | *p++ = '?'; | 73 | *p++ = '?'; |
82 | break; | 74 | break; |
diff --git a/openbsd-compat/strsep.c b/openbsd-compat/strsep.c index 330d84ce1..b36eb8fda 100644 --- a/openbsd-compat/strsep.c +++ b/openbsd-compat/strsep.c | |||
@@ -1,6 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/string/strsep.c */ | 1 | /* $OpenBSD: strsep.c,v 1.6 2005/08/08 08:05:37 espie Exp $ */ |
2 | |||
3 | /* $OpenBSD: strsep.c,v 1.5 2003/06/11 21:08:16 deraadt Exp $ */ | ||
4 | 2 | ||
5 | /*- | 3 | /*- |
6 | * Copyright (c) 1990, 1993 | 4 | * Copyright (c) 1990, 1993 |
@@ -31,6 +29,8 @@ | |||
31 | * SUCH DAMAGE. | 29 | * SUCH DAMAGE. |
32 | */ | 30 | */ |
33 | 31 | ||
32 | /* OPENBSD ORIGINAL: lib/libc/string/strsep.c */ | ||
33 | |||
34 | #include "includes.h" | 34 | #include "includes.h" |
35 | 35 | ||
36 | #if !defined(HAVE_STRSEP) | 36 | #if !defined(HAVE_STRSEP) |
@@ -38,14 +38,6 @@ | |||
38 | #include <string.h> | 38 | #include <string.h> |
39 | #include <stdio.h> | 39 | #include <stdio.h> |
40 | 40 | ||
41 | #if defined(LIBC_SCCS) && !defined(lint) | ||
42 | #if 0 | ||
43 | static char sccsid[] = "@(#)strsep.c 8.1 (Berkeley) 6/4/93"; | ||
44 | #else | ||
45 | static char *rcsid = "$OpenBSD: strsep.c,v 1.5 2003/06/11 21:08:16 deraadt Exp $"; | ||
46 | #endif | ||
47 | #endif /* LIBC_SCCS and not lint */ | ||
48 | |||
49 | /* | 41 | /* |
50 | * Get next token from string *stringp, where tokens are possibly-empty | 42 | * Get next token from string *stringp, where tokens are possibly-empty |
51 | * strings separated by characters from delim. | 43 | * strings separated by characters from delim. |
diff --git a/openbsd-compat/strtoll.c b/openbsd-compat/strtoll.c index 60c276f8a..f62930388 100644 --- a/openbsd-compat/strtoll.c +++ b/openbsd-compat/strtoll.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/stdlib/strtoll.c */ | 1 | /* $OpenBSD: strtoll.c,v 1.6 2005/11/10 10:00:17 espie Exp $ */ |
2 | |||
3 | /*- | 2 | /*- |
4 | * Copyright (c) 1992 The Regents of the University of California. | 3 | * Copyright (c) 1992 The Regents of the University of California. |
5 | * All rights reserved. | 4 | * All rights reserved. |
@@ -29,13 +28,11 @@ | |||
29 | * SUCH DAMAGE. | 28 | * SUCH DAMAGE. |
30 | */ | 29 | */ |
31 | 30 | ||
31 | /* OPENBSD ORIGINAL: lib/libc/stdlib/strtoll.c */ | ||
32 | |||
32 | #include "includes.h" | 33 | #include "includes.h" |
33 | #ifndef HAVE_STRTOLL | 34 | #ifndef HAVE_STRTOLL |
34 | 35 | ||
35 | #if defined(LIBC_SCCS) && !defined(lint) | ||
36 | static const char rcsid[] = "$OpenBSD: strtoll.c,v 1.4 2005/03/30 18:51:49 pat Exp $"; | ||
37 | #endif /* LIBC_SCCS and not lint */ | ||
38 | |||
39 | #include <sys/types.h> | 36 | #include <sys/types.h> |
40 | 37 | ||
41 | #include <ctype.h> | 38 | #include <ctype.h> |
diff --git a/openbsd-compat/strtonum.c b/openbsd-compat/strtonum.c index b681ed83b..8ad0d0058 100644 --- a/openbsd-compat/strtonum.c +++ b/openbsd-compat/strtonum.c | |||
@@ -1,5 +1,3 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/stdlib/strtonum.c */ | ||
2 | |||
3 | /* $OpenBSD: strtonum.c,v 1.6 2004/08/03 19:38:01 millert Exp $ */ | 1 | /* $OpenBSD: strtonum.c,v 1.6 2004/08/03 19:38:01 millert Exp $ */ |
4 | 2 | ||
5 | /* | 3 | /* |
@@ -19,6 +17,8 @@ | |||
19 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 17 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
20 | */ | 18 | */ |
21 | 19 | ||
20 | /* OPENBSD ORIGINAL: lib/libc/stdlib/strtonum.c */ | ||
21 | |||
22 | #include "includes.h" | 22 | #include "includes.h" |
23 | #ifndef HAVE_STRTONUM | 23 | #ifndef HAVE_STRTONUM |
24 | #include <limits.h> | 24 | #include <limits.h> |
diff --git a/openbsd-compat/strtoul.c b/openbsd-compat/strtoul.c index 24d0e253d..8219c8391 100644 --- a/openbsd-compat/strtoul.c +++ b/openbsd-compat/strtoul.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/stdlib/strtoul.c */ | 1 | /* $OpenBSD: strtoul.c,v 1.7 2005/08/08 08:05:37 espie Exp $ */ |
2 | |||
3 | /* | 2 | /* |
4 | * Copyright (c) 1990 Regents of the University of California. | 3 | * Copyright (c) 1990 Regents of the University of California. |
5 | * All rights reserved. | 4 | * All rights reserved. |
@@ -29,13 +28,11 @@ | |||
29 | * SUCH DAMAGE. | 28 | * SUCH DAMAGE. |
30 | */ | 29 | */ |
31 | 30 | ||
31 | /* OPENBSD ORIGINAL: lib/libc/stdlib/strtoul.c */ | ||
32 | |||
32 | #include "includes.h" | 33 | #include "includes.h" |
33 | #ifndef HAVE_STRTOUL | 34 | #ifndef HAVE_STRTOUL |
34 | 35 | ||
35 | #if defined(LIBC_SCCS) && !defined(lint) | ||
36 | static char *rcsid = "$OpenBSD: strtoul.c,v 1.5 2003/06/02 20:18:38 millert Exp $"; | ||
37 | #endif /* LIBC_SCCS and not lint */ | ||
38 | |||
39 | #include <ctype.h> | 36 | #include <ctype.h> |
40 | #include <errno.h> | 37 | #include <errno.h> |
41 | #include <limits.h> | 38 | #include <limits.h> |
@@ -48,15 +45,12 @@ static char *rcsid = "$OpenBSD: strtoul.c,v 1.5 2003/06/02 20:18:38 millert Exp | |||
48 | * alphabets and digits are each contiguous. | 45 | * alphabets and digits are each contiguous. |
49 | */ | 46 | */ |
50 | unsigned long | 47 | unsigned long |
51 | strtoul(nptr, endptr, base) | 48 | strtoul(const char *nptr, char **endptr, int base) |
52 | const char *nptr; | ||
53 | char **endptr; | ||
54 | register int base; | ||
55 | { | 49 | { |
56 | register const char *s; | 50 | const char *s; |
57 | register unsigned long acc, cutoff; | 51 | unsigned long acc, cutoff; |
58 | register int c; | 52 | int c; |
59 | register int neg, any, cutlim; | 53 | int neg, any, cutlim; |
60 | 54 | ||
61 | /* | 55 | /* |
62 | * See strtol for comments as to the logic used. | 56 | * See strtol for comments as to the logic used. |
diff --git a/openbsd-compat/sys-queue.h b/openbsd-compat/sys-queue.h index c49a94650..402343324 100644 --- a/openbsd-compat/sys-queue.h +++ b/openbsd-compat/sys-queue.h | |||
@@ -1,5 +1,3 @@ | |||
1 | /* OPENBSD ORIGINAL: sys/sys/queue.h */ | ||
2 | |||
3 | /* $OpenBSD: queue.h,v 1.25 2004/04/08 16:08:21 henning Exp $ */ | 1 | /* $OpenBSD: queue.h,v 1.25 2004/04/08 16:08:21 henning Exp $ */ |
4 | /* $NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Exp $ */ | 2 | /* $NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Exp $ */ |
5 | 3 | ||
@@ -34,6 +32,8 @@ | |||
34 | * @(#)queue.h 8.5 (Berkeley) 8/20/94 | 32 | * @(#)queue.h 8.5 (Berkeley) 8/20/94 |
35 | */ | 33 | */ |
36 | 34 | ||
35 | /* OPENBSD ORIGINAL: sys/sys/queue.h */ | ||
36 | |||
37 | #ifndef _FAKE_QUEUE_H_ | 37 | #ifndef _FAKE_QUEUE_H_ |
38 | #define _FAKE_QUEUE_H_ | 38 | #define _FAKE_QUEUE_H_ |
39 | 39 | ||
diff --git a/openbsd-compat/sys-tree.h b/openbsd-compat/sys-tree.h index 73cfbe72a..c80b90b21 100644 --- a/openbsd-compat/sys-tree.h +++ b/openbsd-compat/sys-tree.h | |||
@@ -1,5 +1,3 @@ | |||
1 | /* OPENBSD ORIGINAL: sys/sys/tree.h */ | ||
2 | |||
3 | /* $OpenBSD: tree.h,v 1.7 2002/10/17 21:51:54 art Exp $ */ | 1 | /* $OpenBSD: tree.h,v 1.7 2002/10/17 21:51:54 art Exp $ */ |
4 | /* | 2 | /* |
5 | * Copyright 2002 Niels Provos <provos@citi.umich.edu> | 3 | * Copyright 2002 Niels Provos <provos@citi.umich.edu> |
@@ -26,6 +24,8 @@ | |||
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 24 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | */ | 25 | */ |
28 | 26 | ||
27 | /* OPENBSD ORIGINAL: sys/sys/tree.h */ | ||
28 | |||
29 | #ifndef _SYS_TREE_H_ | 29 | #ifndef _SYS_TREE_H_ |
30 | #define _SYS_TREE_H_ | 30 | #define _SYS_TREE_H_ |
31 | 31 | ||
diff --git a/openbsd-compat/vis.c b/openbsd-compat/vis.c index 1fb7a01e3..3a087b341 100644 --- a/openbsd-compat/vis.c +++ b/openbsd-compat/vis.c | |||
@@ -1,5 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: lib/libc/gen/vis.c */ | 1 | /* $OpenBSD: vis.c,v 1.19 2005/09/01 17:15:49 millert Exp $ */ |
2 | |||
3 | /*- | 2 | /*- |
4 | * Copyright (c) 1989, 1993 | 3 | * Copyright (c) 1989, 1993 |
5 | * The Regents of the University of California. All rights reserved. | 4 | * The Regents of the University of California. All rights reserved. |
@@ -28,36 +27,34 @@ | |||
28 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | 27 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
29 | * SUCH DAMAGE. | 28 | * SUCH DAMAGE. |
30 | */ | 29 | */ |
30 | |||
31 | /* OPENBSD ORIGINAL: lib/libc/gen/vis.c */ | ||
32 | |||
31 | #include "includes.h" | 33 | #include "includes.h" |
32 | #if !defined(HAVE_STRNVIS) | 34 | #if !defined(HAVE_STRNVIS) |
33 | 35 | ||
34 | #if defined(LIBC_SCCS) && !defined(lint) | ||
35 | static char rcsid[] = "$OpenBSD: vis.c,v 1.12 2003/06/02 20:18:35 millert Exp $"; | ||
36 | #endif /* LIBC_SCCS and not lint */ | ||
37 | |||
38 | #include <ctype.h> | 36 | #include <ctype.h> |
39 | #include <string.h> | 37 | #include <string.h> |
40 | 38 | ||
41 | #include "vis.h" | 39 | #include "vis.h" |
42 | 40 | ||
43 | #define isoctal(c) (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7') | 41 | #define isoctal(c) (((u_char)(c)) >= '0' && ((u_char)(c)) <= '7') |
44 | #define isvisible(c) (((u_int)(c) <= UCHAR_MAX && isascii((u_char)(c)) && \ | 42 | #define isvisible(c) \ |
45 | isgraph((u_char)(c))) || \ | 43 | (((u_int)(c) <= UCHAR_MAX && isascii((u_char)(c)) && \ |
46 | ((flag & VIS_SP) == 0 && (c) == ' ') || \ | 44 | (((c) != '*' && (c) != '?' && (c) != '[' && (c) != '#') || \ |
47 | ((flag & VIS_TAB) == 0 && (c) == '\t') || \ | 45 | (flag & VIS_GLOB) == 0) && isgraph((u_char)(c))) || \ |
48 | ((flag & VIS_NL) == 0 && (c) == '\n') || \ | 46 | ((flag & VIS_SP) == 0 && (c) == ' ') || \ |
49 | ((flag & VIS_SAFE) && ((c) == '\b' || \ | 47 | ((flag & VIS_TAB) == 0 && (c) == '\t') || \ |
50 | (c) == '\007' || (c) == '\r' || \ | 48 | ((flag & VIS_NL) == 0 && (c) == '\n') || \ |
51 | isgraph((u_char)(c))))) | 49 | ((flag & VIS_SAFE) && ((c) == '\b' || \ |
50 | (c) == '\007' || (c) == '\r' || \ | ||
51 | isgraph((u_char)(c))))) | ||
52 | 52 | ||
53 | /* | 53 | /* |
54 | * vis - visually encode characters | 54 | * vis - visually encode characters |
55 | */ | 55 | */ |
56 | char * | 56 | char * |
57 | vis(dst, c, flag, nextc) | 57 | vis(char *dst, int c, int flag, int nextc) |
58 | register char *dst; | ||
59 | int c, nextc; | ||
60 | register int flag; | ||
61 | { | 58 | { |
62 | if (isvisible(c)) { | 59 | if (isvisible(c)) { |
63 | *dst++ = c; | 60 | *dst++ = c; |
@@ -111,7 +108,8 @@ vis(dst, c, flag, nextc) | |||
111 | goto done; | 108 | goto done; |
112 | } | 109 | } |
113 | } | 110 | } |
114 | if (((c & 0177) == ' ') || (flag & VIS_OCTAL)) { | 111 | if (((c & 0177) == ' ') || (flag & VIS_OCTAL) || |
112 | ((flag & VIS_GLOB) && (c == '*' || c == '?' || c == '[' || c == '#'))) { | ||
115 | *dst++ = '\\'; | 113 | *dst++ = '\\'; |
116 | *dst++ = ((u_char)c >> 6 & 07) + '0'; | 114 | *dst++ = ((u_char)c >> 6 & 07) + '0'; |
117 | *dst++ = ((u_char)c >> 3 & 07) + '0'; | 115 | *dst++ = ((u_char)c >> 3 & 07) + '0'; |
@@ -124,7 +122,7 @@ vis(dst, c, flag, nextc) | |||
124 | c &= 0177; | 122 | c &= 0177; |
125 | *dst++ = 'M'; | 123 | *dst++ = 'M'; |
126 | } | 124 | } |
127 | if (iscntrl(c)) { | 125 | if (iscntrl((u_char)c)) { |
128 | *dst++ = '^'; | 126 | *dst++ = '^'; |
129 | if (c == 0177) | 127 | if (c == 0177) |
130 | *dst++ = '?'; | 128 | *dst++ = '?'; |
@@ -153,12 +151,9 @@ done: | |||
153 | * This is useful for encoding a block of data. | 151 | * This is useful for encoding a block of data. |
154 | */ | 152 | */ |
155 | int | 153 | int |
156 | strvis(dst, src, flag) | 154 | strvis(char *dst, const char *src, int flag) |
157 | register char *dst; | ||
158 | register const char *src; | ||
159 | int flag; | ||
160 | { | 155 | { |
161 | register char c; | 156 | char c; |
162 | char *start; | 157 | char *start; |
163 | 158 | ||
164 | for (start = dst; (c = *src);) | 159 | for (start = dst; (c = *src);) |
@@ -168,16 +163,11 @@ strvis(dst, src, flag) | |||
168 | } | 163 | } |
169 | 164 | ||
170 | int | 165 | int |
171 | strnvis(dst, src, siz, flag) | 166 | strnvis(char *dst, const char *src, size_t siz, int flag) |
172 | char *dst; | ||
173 | const char *src; | ||
174 | size_t siz; | ||
175 | int flag; | ||
176 | { | 167 | { |
177 | char c; | ||
178 | char *start, *end; | 168 | char *start, *end; |
179 | char tbuf[5]; | 169 | char tbuf[5]; |
180 | int i; | 170 | int c, i; |
181 | 171 | ||
182 | i = 0; | 172 | i = 0; |
183 | for (start = dst, end = start + siz - 1; (c = *src) && dst < end; ) { | 173 | for (start = dst, end = start + siz - 1; (c = *src) && dst < end; ) { |
@@ -217,13 +207,9 @@ strnvis(dst, src, siz, flag) | |||
217 | } | 207 | } |
218 | 208 | ||
219 | int | 209 | int |
220 | strvisx(dst, src, len, flag) | 210 | strvisx(char *dst, const char *src, size_t len, int flag) |
221 | register char *dst; | ||
222 | register const char *src; | ||
223 | register size_t len; | ||
224 | int flag; | ||
225 | { | 211 | { |
226 | register char c; | 212 | char c; |
227 | char *start; | 213 | char *start; |
228 | 214 | ||
229 | for (start = dst; len > 1; len--) { | 215 | for (start = dst; len > 1; len--) { |
diff --git a/openbsd-compat/vis.h b/openbsd-compat/vis.h index 663355a24..3898a9e70 100644 --- a/openbsd-compat/vis.h +++ b/openbsd-compat/vis.h | |||
@@ -1,6 +1,4 @@ | |||
1 | /* OPENBSD ORIGINAL: include/vis.h */ | 1 | /* $OpenBSD: vis.h,v 1.11 2005/08/09 19:38:31 millert Exp $ */ |
2 | |||
3 | /* $OpenBSD: vis.h,v 1.6 2003/06/02 19:34:12 millert Exp $ */ | ||
4 | /* $NetBSD: vis.h,v 1.4 1994/10/26 00:56:41 cgd Exp $ */ | 2 | /* $NetBSD: vis.h,v 1.4 1994/10/26 00:56:41 cgd Exp $ */ |
5 | 3 | ||
6 | /*- | 4 | /*- |
@@ -34,6 +32,8 @@ | |||
34 | * @(#)vis.h 5.9 (Berkeley) 4/3/91 | 32 | * @(#)vis.h 5.9 (Berkeley) 4/3/91 |
35 | */ | 33 | */ |
36 | 34 | ||
35 | /* OPENBSD ORIGINAL: include/vis.h */ | ||
36 | |||
37 | #include "includes.h" | 37 | #include "includes.h" |
38 | #if !defined(HAVE_STRNVIS) | 38 | #if !defined(HAVE_STRNVIS) |
39 | 39 | ||
@@ -63,6 +63,7 @@ | |||
63 | * other | 63 | * other |
64 | */ | 64 | */ |
65 | #define VIS_NOSLASH 0x40 /* inhibit printing '\' */ | 65 | #define VIS_NOSLASH 0x40 /* inhibit printing '\' */ |
66 | #define VIS_GLOB 0x100 /* encode glob(3) magics and '#' */ | ||
66 | 67 | ||
67 | /* | 68 | /* |
68 | * unvis return codes | 69 | * unvis return codes |
@@ -80,10 +81,14 @@ | |||
80 | 81 | ||
81 | char *vis(char *, int, int, int); | 82 | char *vis(char *, int, int, int); |
82 | int strvis(char *, const char *, int); | 83 | int strvis(char *, const char *, int); |
83 | int strnvis(char *, const char *, size_t, int); | 84 | int strnvis(char *, const char *, size_t, int) |
84 | int strvisx(char *, const char *, size_t, int); | 85 | __attribute__ ((__bounded__(__string__,1,3))); |
86 | int strvisx(char *, const char *, size_t, int) | ||
87 | __attribute__ ((__bounded__(__string__,1,3))); | ||
85 | int strunvis(char *, const char *); | 88 | int strunvis(char *, const char *); |
86 | int unvis(char *, char, int *, int); | 89 | int unvis(char *, char, int *, int); |
90 | ssize_t strnunvis(char *, const char *, size_t) | ||
91 | __attribute__ ((__bounded__(__string__,1,3))); | ||
87 | 92 | ||
88 | #endif /* !_VIS_H_ */ | 93 | #endif /* !_VIS_H_ */ |
89 | 94 | ||