mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-23 20:03:31 +01:00
Integrate getdelim() and getline() support into Tor.
This commit is contained in:
parent
1604c0fe0e
commit
b04d719c10
@ -585,7 +585,9 @@ AC_CHECK_FUNCS(
|
|||||||
ftime \
|
ftime \
|
||||||
get_current_dir_name \
|
get_current_dir_name \
|
||||||
getaddrinfo \
|
getaddrinfo \
|
||||||
|
getdelim \
|
||||||
getifaddrs \
|
getifaddrs \
|
||||||
|
getline \
|
||||||
getpass \
|
getpass \
|
||||||
getrlimit \
|
getrlimit \
|
||||||
gettimeofday \
|
gettimeofday \
|
||||||
|
@ -30,21 +30,19 @@
|
|||||||
* POSSIBILITY OF SUCH DAMAGE.
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <nbcompat.h>
|
#ifndef BUFSIZ
|
||||||
#include <nbcompat/stdio.h>
|
#define BUFSIZ 512
|
||||||
#include <nbcompat/stdlib.h>
|
#endif
|
||||||
|
|
||||||
#if !HAVE_GETDELIM
|
|
||||||
|
|
||||||
ssize_t
|
ssize_t
|
||||||
getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp)
|
compat_getdelim_(char **buf, size_t *bufsiz, int delimiter, FILE *fp)
|
||||||
{
|
{
|
||||||
char *ptr, *eptr;
|
char *ptr, *eptr;
|
||||||
|
|
||||||
|
|
||||||
if (*buf == NULL || *bufsiz == 0) {
|
if (*buf == NULL || *bufsiz == 0) {
|
||||||
*bufsiz = BUFSIZ;
|
*bufsiz = BUFSIZ;
|
||||||
if ((*buf = malloc(*bufsiz)) == NULL)
|
if ((*buf = raw_malloc(*bufsiz)) == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,7 +67,7 @@ getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp)
|
|||||||
char *nbuf;
|
char *nbuf;
|
||||||
size_t nbufsiz = *bufsiz * 2;
|
size_t nbufsiz = *bufsiz * 2;
|
||||||
ssize_t d = ptr - *buf;
|
ssize_t d = ptr - *buf;
|
||||||
if ((nbuf = realloc(*buf, nbufsiz)) == NULL)
|
if ((nbuf = raw_realloc(*buf, nbufsiz)) == NULL)
|
||||||
return -1;
|
return -1;
|
||||||
*buf = nbuf;
|
*buf = nbuf;
|
||||||
*bufsiz = nbufsiz;
|
*bufsiz = nbufsiz;
|
||||||
@ -78,5 +76,3 @@ getdelim(char **buf, size_t *bufsiz, int delimiter, FILE *fp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
orconfig.h
|
orconfig.h
|
||||||
|
|
||||||
|
ext/getdelim.c
|
||||||
|
|
||||||
lib/cc/*.h
|
lib/cc/*.h
|
||||||
lib/container/*.h
|
lib/container/*.h
|
||||||
lib/encoding/*.h
|
lib/encoding/*.h
|
||||||
|
@ -715,3 +715,7 @@ read_file_to_str, (const char *filename, int flags, struct stat *stat_out))
|
|||||||
|
|
||||||
return string;
|
return string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(HAVE_GETDELIM) || defined(TOR_UNIT_TESTS)
|
||||||
|
#include "ext/getdelim.c"
|
||||||
|
#endif
|
||||||
|
@ -103,4 +103,38 @@ char *read_file_to_str_until_eof(int fd, size_t max_bytes_to_read,
|
|||||||
size_t *sz_out)
|
size_t *sz_out)
|
||||||
ATTR_MALLOC;
|
ATTR_MALLOC;
|
||||||
|
|
||||||
|
#if !defined(HAVE_GETDELIM) || defined(TOR_UNIT_TESTS)
|
||||||
|
ssize_t compat_getdelim_(char **lineptr, size_t *n, int delim, FILE *stream);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_GETDELIM
|
||||||
|
/**
|
||||||
|
* Cross-platform wrapper for getdelim(): behaves as the POSIX-standard
|
||||||
|
* getdelim() function.
|
||||||
|
*
|
||||||
|
* Note that this function will use the libc memory allocator -- so any memory
|
||||||
|
* passed to this function must come from raw_malloc(), and must be freed by
|
||||||
|
* raw_free() -- don't use tor_malloc() and tor_free() with this.
|
||||||
|
*/
|
||||||
|
#define tor_getdelim(lineptr, n, delim, stream) \
|
||||||
|
getdelim((lineptr), (n), (delim), (stream))
|
||||||
|
#else
|
||||||
|
#define tor_getdelim(lineptr, n, delim, stream) \
|
||||||
|
compat_getdelim_((lineptr), (n), (delim), (stream))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_GETLINE
|
||||||
|
/**
|
||||||
|
* Cross-platform wrapper for getline(): behaves as the POSIX-standard
|
||||||
|
* getline() function.
|
||||||
|
*
|
||||||
|
* See tor_getdelim() for usage notes.
|
||||||
|
*/
|
||||||
|
#define tor_getline(lineptr, n, stream) \
|
||||||
|
getline((lineptr), (n), (stream))
|
||||||
|
#else
|
||||||
|
#define tor_getline(lineptr, n, stream) \
|
||||||
|
tor_getdelim((lineptr), (n), '\n', (stream))
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user