aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--CMakeLists.txt10
-rw-r--r--crypto/CMakeLists.txt8
-rw-r--r--crypto/Makefile.am8
-rw-r--r--crypto/compat/getdelim.c78
-rw-r--r--crypto/compat/getline.c40
-rw-r--r--include/compat/stdio.h12
-rw-r--r--m4/check-libc.m44
8 files changed, 163 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index 3c82386..18f99c1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -237,10 +237,14 @@ include/openssl/*.h
237 237
238/crypto/* 238/crypto/*
239!/crypto/Makefile.am.* 239!/crypto/Makefile.am.*
240!/crypto/compat/
241/crypto/compat/*
240!/crypto/compat/arc4random.h 242!/crypto/compat/arc4random.h
241!/crypto/compat/b_win.c 243!/crypto/compat/b_win.c
242!/crypto/compat/explicit_bzero_win.c 244!/crypto/compat/explicit_bzero_win.c
243!/crypto/compat/freezero.c 245!/crypto/compat/freezero.c
246!/crypto/compat/getdelim.c
247!/crypto/compat/getline.c
244!/crypto/compat/getpagesize.c 248!/crypto/compat/getpagesize.c
245!/crypto/compat/posix_win.c 249!/crypto/compat/posix_win.c
246!/crypto/compat/bsd_asprintf.c 250!/crypto/compat/bsd_asprintf.c
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ebd8260..437570b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -214,6 +214,16 @@ if(HAVE_ASPRINTF)
214 add_definitions(-DHAVE_ASPRINTF) 214 add_definitions(-DHAVE_ASPRINTF)
215endif() 215endif()
216 216
217check_symbol_exists(getdelim "stdio.h" HAVE_GETDELIM)
218if(HAVE_GETDELIM)
219 add_definitions(-DHAVE_GETDELIM)
220endif()
221
222check_symbol_exists(getline "stdio.h" HAVE_GETLINE)
223if(HAVE_GETLINE)
224 add_definitions(-DHAVE_GETLINE)
225endif()
226
217check_symbol_exists(getopt "unistd.h" HAVE_GETOPT) 227check_symbol_exists(getopt "unistd.h" HAVE_GETOPT)
218if(HAVE_GETOPT) 228if(HAVE_GETOPT)
219 add_definitions(-DHAVE_GETOPT) 229 add_definitions(-DHAVE_GETOPT)
diff --git a/crypto/CMakeLists.txt b/crypto/CMakeLists.txt
index 7b3439d..92a10ba 100644
--- a/crypto/CMakeLists.txt
+++ b/crypto/CMakeLists.txt
@@ -607,6 +607,14 @@ if(NOT HAVE_FREEZERO)
607 set(COMPAT_SRC ${COMPAT_SRC} compat/freezero.c) 607 set(COMPAT_SRC ${COMPAT_SRC} compat/freezero.c)
608endif() 608endif()
609 609
610if(NOT HAVE_GETDELIM)
611 set(COMPAT_SRC ${COMPAT_SRC} compat/getdelim.c)
612endif()
613
614if(NOT HAVE_GETLINE)
615 set(COMPAT_SRC ${COMPAT_SRC} compat/getline.c)
616endif()
617
610if(NOT HAVE_GETOPT) 618if(NOT HAVE_GETOPT)
611 set(COMPAT_SRC ${COMPAT_SRC} compat/getopt_long.c) 619 set(COMPAT_SRC ${COMPAT_SRC} compat/getopt_long.c)
612endif() 620endif()
diff --git a/crypto/Makefile.am b/crypto/Makefile.am
index 06fde29..31fcffd 100644
--- a/crypto/Makefile.am
+++ b/crypto/Makefile.am
@@ -134,6 +134,14 @@ if !HAVE_FREEZERO
134libcompat_la_SOURCES += compat/freezero.c 134libcompat_la_SOURCES += compat/freezero.c
135endif 135endif
136 136
137if !HAVE_GETDELIM
138libcompat_la_SOURCES += compat/getdelim.c
139endif
140
141if !HAVE_GETLINE
142libcompat_la_SOURCES += compat/getline.c
143endif
144
137if !HAVE_GETPAGESIZE 145if !HAVE_GETPAGESIZE
138libcompat_la_SOURCES += compat/getpagesize.c 146libcompat_la_SOURCES += compat/getpagesize.c
139endif 147endif
diff --git a/crypto/compat/getdelim.c b/crypto/compat/getdelim.c
new file mode 100644
index 0000000..caec3f2
--- /dev/null
+++ b/crypto/compat/getdelim.c
@@ -0,0 +1,78 @@
1/*-
2 * Copyright (c) 2011 The NetBSD Foundation, Inc.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to The NetBSD Foundation
6 * by Christos Zoulas.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
18 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 * POSSIBILITY OF SUCH DAMAGE.
28 */
29
30#include <stdio.h>
31#include <stdlib.h>
32
33#ifndef HAVE_GETDELIM
34
35ssize_t
36getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp)
37{
38 char *ptr, *eptr;
39
40
41 if (*buf == NULL || *bufsiz == 0) {
42 *bufsiz = BUFSIZ;
43 if ((*buf = malloc(*bufsiz)) == NULL)
44 return -1;
45 }
46
47 for (ptr = *buf, eptr = *buf + *bufsiz;;) {
48 int c = fgetc(fp);
49 if (c == -1) {
50 if (feof(fp)) {
51 ssize_t diff = (ssize_t)(ptr - *buf);
52 if (diff != 0) {
53 *ptr = '\0';
54 return diff;
55 }
56 }
57 return -1;
58 }
59 *ptr++ = c;
60 if (c == delimiter) {
61 *ptr = '\0';
62 return ptr - *buf;
63 }
64 if (ptr + 2 >= eptr) {
65 char *nbuf;
66 size_t nbufsiz = *bufsiz * 2;
67 ssize_t d = ptr - *buf;
68 if ((nbuf = realloc(*buf, nbufsiz)) == NULL)
69 return -1;
70 *buf = nbuf;
71 *bufsiz = nbufsiz;
72 eptr = nbuf + nbufsiz;
73 ptr = nbuf + d;
74 }
75 }
76}
77
78#endif /* HAVE_GETDELIM */
diff --git a/crypto/compat/getline.c b/crypto/compat/getline.c
new file mode 100644
index 0000000..e6ecde0
--- /dev/null
+++ b/crypto/compat/getline.c
@@ -0,0 +1,40 @@
1/*-
2 * Copyright (c) 2011 The NetBSD Foundation, Inc.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to The NetBSD Foundation
6 * by Christos Zoulas.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
18 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 * POSSIBILITY OF SUCH DAMAGE.
28 */
29
30#include <stdio.h>
31
32#ifndef HAVE_GETLINE
33
34ssize_t
35getline(char **buf, size_t *bufsiz, FILE *fp)
36{
37 return getdelim(buf, bufsiz, '\n', fp);
38}
39
40#endif /* HAVE_GETLINE */
diff --git a/include/compat/stdio.h b/include/compat/stdio.h
index 2af8f3e..2ccdeeb 100644
--- a/include/compat/stdio.h
+++ b/include/compat/stdio.h
@@ -18,6 +18,18 @@
18#include_next <stdio.h> 18#include_next <stdio.h>
19#endif 19#endif
20 20
21#ifndef HAVE_GETDELIM
22#include <sys/types.h>
23#define getdelim libressl_getdelim
24ssize_t getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp);
25#endif
26
27#ifndef HAVE_GETLINE
28#include <sys/types.h>
29#define getline libressl_getline
30ssize_t getline(char **buf, size_t *bufsiz, FILE *fp);
31#endif
32
21#ifndef HAVE_ASPRINTF 33#ifndef HAVE_ASPRINTF
22#include <stdarg.h> 34#include <stdarg.h>
23#define vasprintf libressl_vasprintf 35#define vasprintf libressl_vasprintf
diff --git a/m4/check-libc.m4 b/m4/check-libc.m4
index 40df15b..8cb849b 100644
--- a/m4/check-libc.m4
+++ b/m4/check-libc.m4
@@ -7,7 +7,7 @@ AC_CHECK_HEADERS([netinet/ip.h], [], [],
7]) 7])
8AC_HEADER_RESOLV 8AC_HEADER_RESOLV
9# Check for general libc functions 9# Check for general libc functions
10AC_CHECK_FUNCS([asprintf freezero memmem]) 10AC_CHECK_FUNCS([asprintf freezero getdelim getline memmem])
11AC_CHECK_FUNCS([readpassphrase reallocarray recallocarray]) 11AC_CHECK_FUNCS([readpassphrase reallocarray recallocarray])
12AC_CHECK_FUNCS([strcasecmp strlcat strlcpy strndup strnlen strsep strtonum]) 12AC_CHECK_FUNCS([strcasecmp strlcat strlcpy strndup strnlen strsep strtonum])
13AC_CHECK_FUNCS([timegm _mkgmtime timespecsub]) 13AC_CHECK_FUNCS([timegm _mkgmtime timespecsub])
@@ -24,6 +24,8 @@ AC_CACHE_CHECK([for getpagesize], ac_cv_func_getpagesize, [
24]) 24])
25AM_CONDITIONAL([HAVE_ASPRINTF], [test "x$ac_cv_func_asprintf" = xyes]) 25AM_CONDITIONAL([HAVE_ASPRINTF], [test "x$ac_cv_func_asprintf" = xyes])
26AM_CONDITIONAL([HAVE_FREEZERO], [test "x$ac_cv_func_freezero" = xyes]) 26AM_CONDITIONAL([HAVE_FREEZERO], [test "x$ac_cv_func_freezero" = xyes])
27AM_CONDITIONAL([HAVE_GETDELIM], [test "x$ac_cv_func_getdelim" = xyes])
28AM_CONDITIONAL([HAVE_GETLINE], [test "x$ac_cv_func_getline" = xyes])
27AM_CONDITIONAL([HAVE_GETPAGESIZE], [test "x$ac_cv_func_getpagesize" = xyes]) 29AM_CONDITIONAL([HAVE_GETPAGESIZE], [test "x$ac_cv_func_getpagesize" = xyes])
28AM_CONDITIONAL([HAVE_GETOPT], [test "x$ac_cv_func_getopt" = xyes]) 30AM_CONDITIONAL([HAVE_GETOPT], [test "x$ac_cv_func_getopt" = xyes])
29AM_CONDITIONAL([HAVE_MEMMEM], [test "x$ac_cv_func_memmem" = xyes]) 31AM_CONDITIONAL([HAVE_MEMMEM], [test "x$ac_cv_func_memmem" = xyes])