mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
shift read_file_to_str() into util.c
svn:r504
This commit is contained in:
@@ -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: <syscall 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);
|
||||
|
||||
@@ -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
|
||||
|
||||
+41
-2
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user