]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
shift read_file_to_str() into util.c
authorRoger Dingledine <arma@torproject.org>
Sun, 28 Sep 2003 06:47:29 +0000 (06:47 +0000)
committerRoger Dingledine <arma@torproject.org>
Sun, 28 Sep 2003 06:47:29 +0000 (06:47 +0000)
svn:r504

src/common/tortls.c
src/common/tortls.h
src/common/util.c
src/common/util.h

index 6fb6a2eaeb9497b4f2cdb257d4b9103a97317e39..e8e2dc3cc898573d21201741fe109605ff1fd7ca 100644 (file)
@@ -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);
index 3a517c25de6471d4f1f55242508ad2a3ca3ff6fc..3ab252d8b3fdbbd9baf13b92e5d4bae10c65c1bb 100644 (file)
@@ -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
index a969f0dbd1a004462c2d725cc46d1b453ceaa112..e290ab047117dfc9ca445432b918960234ff5c8c 100644 (file)
@@ -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;
+}
+
index c90175669f2777186b517062ed88e05a6ffc4cb5..65f2760c830a67f30137796ce6888c443b059a49 100644 (file)
@@ -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.