[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] r13946: options_init_from_torrc(): split off options_init_from_strin (tor/trunk/src/or)



Author: weasel
Date: 2008-03-10 08:41:44 -0400 (Mon, 10 Mar 2008)
New Revision: 13946

Modified:
   tor/trunk/src/or/config.c
   tor/trunk/src/or/or.h
Log:
options_init_from_torrc(): split off options_init_from_string()


Modified: tor/trunk/src/or/config.c
===================================================================
--- tor/trunk/src/or/config.c	2008-03-10 12:41:40 UTC (rev 13945)
+++ tor/trunk/src/or/config.c	2008-03-10 12:41:44 UTC (rev 13946)
@@ -3627,21 +3627,18 @@
 int
 options_init_from_torrc(int argc, char **argv)
 {
-  or_options_t *oldoptions, *newoptions = NULL;
-  config_line_t *cl;
-  char *cf=NULL, *errmsg=NULL;
-  int i, retval;
+  char *cf=NULL;
+  int i, retval, command;
   static char **backup_argv;
   static int backup_argc;
+  char *command_arg = NULL;
 
   if (argv) { /* first time we're called. save commandline args */
     backup_argv = argv;
     backup_argc = argc;
-    oldoptions = NULL;
   } else { /* we're reloading. need to clean up old options first. */
     argv = backup_argv;
     argc = backup_argc;
-    oldoptions = get_options();
   }
   if (argc > 1 && (!strcmp(argv[1], "-h") || !strcmp(argv[1],"--help"))) {
     print_usage();
@@ -3670,20 +3667,16 @@
     }
   }
 
-  newoptions = tor_malloc_zero(sizeof(or_options_t));
-  newoptions->_magic = OR_OPTIONS_MAGIC;
-  options_init(newoptions);
-  newoptions->command = CMD_RUN_TOR;
-
+  command = CMD_RUN_TOR;
   for (i = 1; i < argc; ++i) {
     if (!strcmp(argv[i],"--list-fingerprint")) {
-      newoptions->command = CMD_LIST_FINGERPRINT;
+      command = CMD_LIST_FINGERPRINT;
     } else if (!strcmp(argv[i],"--hash-password")) {
-      newoptions->command = CMD_HASH_PASSWORD;
-      newoptions->command_arg = tor_strdup( (i < argc-1) ? argv[i+1] : "");
+      command = CMD_HASH_PASSWORD;
+      command_arg = tor_strdup( (i < argc-1) ? argv[i+1] : "");
       ++i;
     } else if (!strcmp(argv[i],"--verify-config")) {
-      newoptions->command = CMD_VERIFY_CONFIG;
+      command = CMD_VERIFY_CONFIG;
     }
   }
 
@@ -3691,9 +3684,36 @@
   if (!cf)
     goto err;
 
+  retval = options_init_from_string(cf, command, command_arg);
+  tor_free(cf);
+  if (retval < 0)
+    goto err;
+
+  return 0;
+
+ err:
+  return -1;
+}
+
+int
+options_init_from_string(const char *cf, int command, const char *command_arg)
+{
+  or_options_t *oldoptions, *newoptions;
+  config_line_t *cl;
+  int  retval;
+  char *errmsg=NULL;
+
+  oldoptions = global_options; /* get_options unfortunately asserts if
+                                  this is the first time we run*/
+
+  newoptions = tor_malloc_zero(sizeof(or_options_t));
+  newoptions->_magic = OR_OPTIONS_MAGIC;
+  options_init(newoptions);
+  newoptions->command = command;
+  newoptions->command_arg = command_arg;
+
   /* get config lines, assign them */
   retval = config_get_lines(cf, &cl);
-  tor_free(cf);
   if (retval < 0)
     goto err;
   retval = config_assign(&options_format, newoptions, cl, 0, 0, &errmsg);
@@ -3718,6 +3738,7 @@
     goto err; /* frees and replaces old options */
 
   return 0;
+
  err:
   config_free(&options_format, newoptions);
   if (errmsg) {

Modified: tor/trunk/src/or/or.h
===================================================================
--- tor/trunk/src/or/or.h	2008-03-10 12:41:40 UTC (rev 13945)
+++ tor/trunk/src/or/or.h	2008-03-10 12:41:44 UTC (rev 13946)
@@ -2652,6 +2652,8 @@
 int is_local_IP(uint32_t ip) ATTR_PURE;
 void options_init(or_options_t *options);
 int options_init_from_torrc(int argc, char **argv);
+int options_init_from_string(const char *cf,
+                             int command, const char *command_arg);
 int option_is_recognized(const char *key);
 const char *option_get_canonical_name(const char *key);
 config_line_t *option_get_assignment(or_options_t *options,