diff options
Diffstat (limited to 'libguile/options.c')
-rw-r--r-- | libguile/options.c | 42 |
1 files changed, 13 insertions, 29 deletions
diff --git a/libguile/options.c b/libguile/options.c index 0e083143c..2d7e18f65 100644 --- a/libguile/options.c +++ b/libguile/options.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1995,1996,1998,2000,2001, 2006, 2008, 2009, 2010 Free Software Foundation +/* Copyright (C) 1995,1996,1998,2000,2001, 2006, 2008, 2009, 2010, 2011 Free Software Foundation * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -93,8 +93,6 @@ SCM_SYMBOL (scm_yes_sym, "yes"); SCM_SYMBOL (scm_no_sym, "no"); -static SCM protected_objects = SCM_EOL; - /* Return a list of the current option setting. The format of an * option setting is described in the above documentation. */ static SCM @@ -133,7 +131,7 @@ get_documented_option_setting (const scm_t_option options[]) for (i = 0; options[i].name; ++i) { - SCM ls = scm_cons (scm_from_locale_string (options[i].doc), SCM_EOL); + SCM ls = scm_cons (scm_from_utf8_string (options[i].doc), SCM_EOL); switch (options[i].type) { case SCM_OPTION_BOOLEAN: @@ -177,16 +175,17 @@ change_option_setting (SCM args, scm_t_option options[], const char *s, int dry_run) { unsigned int i; - SCM locally_protected_args = args; - SCM malloc_obj = scm_malloc_obj (options_length (options) * sizeof (scm_t_bits)); - scm_t_bits *flags = (scm_t_bits *) SCM_MALLOCDATA (malloc_obj); + scm_t_bits *new_vals; + + new_vals = scm_gc_malloc (options_length (options) * sizeof (scm_t_bits), + "new-options"); for (i = 0; options[i].name; ++i) { if (options[i].type == SCM_OPTION_BOOLEAN) - flags[i] = 0; + new_vals[i] = 0; else - flags[i] = options[i].val; + new_vals[i] = options[i].val; } while (!SCM_NULL_OR_NIL_P (args)) @@ -201,15 +200,15 @@ change_option_setting (SCM args, scm_t_option options[], const char *s, switch (options[i].type) { case SCM_OPTION_BOOLEAN: - flags[i] = 1; + new_vals[i] = 1; break; case SCM_OPTION_INTEGER: args = SCM_CDR (args); - flags[i] = scm_to_size_t (scm_car (args)); + new_vals[i] = scm_to_size_t (scm_car (args)); break; case SCM_OPTION_SCM: args = SCM_CDR (args); - flags[i] = SCM_UNPACK (scm_car (args)); + new_vals[i] = SCM_UNPACK (scm_car (args)); break; } found = 1; @@ -226,20 +225,7 @@ change_option_setting (SCM args, scm_t_option options[], const char *s, return; for (i = 0; options[i].name; ++i) - { - if (options[i].type == SCM_OPTION_SCM) - { - SCM old = SCM_PACK (options[i].val); - SCM new = SCM_PACK (flags[i]); - if (!SCM_IMP (old)) - protected_objects = scm_delq1_x (old, protected_objects); - if (!SCM_IMP (new)) - protected_objects = scm_cons (new, protected_objects); - } - options[i].val = flags[i]; - } - - scm_remember_upto_here_2 (locally_protected_args, malloc_obj); + options[i].val = new_vals[i]; } @@ -278,7 +264,7 @@ scm_init_opts (SCM (*func) (SCM), scm_t_option options[]) for (i = 0; options[i].name; ++i) { - SCM name = scm_from_locale_symbol (options[i].name); + SCM name = scm_from_utf8_symbol (options[i].name); options[i].name = (char *) SCM_UNPACK (name); } func (SCM_UNDEFINED); @@ -288,8 +274,6 @@ scm_init_opts (SCM (*func) (SCM), scm_t_option options[]) void scm_init_options () { - scm_gc_register_root (&protected_objects); - #include "libguile/options.x" } |