From 677707433e562eec675d5e6e487a008364ebea5b Mon Sep 17 00:00:00 2001 From: Roger Dingledine Date: Sun, 28 Sep 2003 06:47:29 +0000 Subject: shift read_file_to_str() into util.c svn:r504 --- src/common/tortls.c | 3 ++- src/common/tortls.h | 2 +- src/common/util.c | 43 +++++++++++++++++++++++++++++++++++++++++-- src/common/util.h | 1 + 4 files changed, 45 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/common/tortls.c b/src/common/tortls.c index 6fb6a2eaeb..e8e2dc3cc8 100644 --- a/src/common/tortls.c +++ b/src/common/tortls.c @@ -78,6 +78,7 @@ tor_tls_get_error(tor_tls *tls, int r, int extra, case SSL_ERROR_SYSCALL: if (extra&CATCH_SYSCALL) return _TOR_TLS_SYSCALL; + assert(severity != LOG_ERR); /* XXX remove me when the bug is found */ log(severity, "TLS error: ."); return TOR_TLS_ERROR; case SSL_ERROR_ZERO_RETURN: @@ -485,7 +486,7 @@ tor_tls_verify(tor_tls *tls) } int -tor_tls_get_pending_bytees(tor_tls *tls) +tor_tls_get_pending_bytes(tor_tls *tls) { assert(tls); return SSL_pending(tls->ssl); diff --git a/src/common/tortls.h b/src/common/tortls.h index 3a517c25de..3ab252d8b3 100644 --- a/src/common/tortls.h +++ b/src/common/tortls.h @@ -26,6 +26,6 @@ int tor_tls_read(tor_tls *tls, char *cp, int len); int tor_tls_write(tor_tls *tls, char *cp, int n); int tor_tls_handshake(tor_tls *tls); int tor_tls_shutdown(tor_tls *tls); -int tor_tls_get_pending_bytees(tor_tls *tls); +int tor_tls_get_pending_bytes(tor_tls *tls); #endif diff --git a/src/common/util.c b/src/common/util.c index a969f0dbd1..e290ab0471 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -101,7 +101,7 @@ void tv_addms(struct timeval *a, long ms) { */ /* a wrapper for write(2) that makes sure to write all count bytes. - * Only use if fd is a blocking socket. */ + * Only use if fd is a blocking fd. */ int write_all(int fd, const void *buf, size_t count) { int written = 0; int result; @@ -116,7 +116,7 @@ int write_all(int fd, const void *buf, size_t count) { } /* a wrapper for read(2) that makes sure to read all count bytes. - * Only use if fd is a blocking socket. */ + * Only use if fd is a blocking fd. */ int read_all(int fd, void *buf, size_t count) { int numread = 0; int result; @@ -391,3 +391,42 @@ write_str_to_file(const char *fname, const char *str) } return 0; } + +char *read_file_to_str(const char *filename) { + int fd; /* router file */ + struct stat statbuf; + char *string; + + assert(filename); + + if(strcspn(filename,CONFIG_LEGAL_FILENAME_CHARACTERS) != 0) { + log_fn(LOG_WARNING,"Filename %s contains illegal characters.",filename); + return NULL; + } + + if(stat(filename, &statbuf) < 0) { + log_fn(LOG_WARNING,"Could not stat %s.",filename); + return NULL; + } + + fd = open(filename,O_RDONLY,0); + if (fd<0) { + log_fn(LOG_WARNING,"Could not open %s.",filename); + return NULL; + } + + string = tor_malloc(statbuf.st_size+1); + + if(read_all(fd,string,statbuf.st_size) != statbuf.st_size) { + log_fn(LOG_WARNING,"Couldn't read all %ld bytes of file '%s'.", + (long)statbuf.st_size,filename); + free(string); + close(fd); + return NULL; + } + close(fd); + + string[statbuf.st_size] = 0; /* null terminate it */ + return string; +} + diff --git a/src/common/util.h b/src/common/util.h index c90175669f..65f2760c83 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -67,6 +67,7 @@ file_status_t file_status(const char *filename); */ int check_private_dir(const char *dirname, int create); int write_str_to_file(const char *fname, const char *str); +char *read_file_to_str(const char *filename); /* Minimalist interface to run a void function in the background. On unix calls fork, on win32 calls beginthread. Returns -1 on failure. -- cgit v1.2.3-54-g00ecf