+static void
+read_int_or_str(
+ conf_var_t *np G_GNUC_UNUSED,
+ val_t *val)
+{
+ ckseen(&val->seen);
+
+ get_conftoken(CONF_ANY);
+ switch(tok) {
+ case CONF_INT:
+ amfree(val->v.s);
+ val->v.s = g_strdup_printf("%d", tokenval.v.i);
+ break;
+
+ case CONF_SIZE:
+ amfree(val->v.s);
+ val->v.s = g_strdup_printf("%zu", tokenval.v.size);
+ break;
+
+ case CONF_INT64:
+ amfree(val->v.s);
+ val->v.s = g_strdup_printf("%jd", (intmax_t)tokenval.v.int64);
+ break;
+
+ case CONF_STRING:
+ val->v.s = newstralloc(val->v.s, tokenval.v.s);
+ break;
+ default:
+ conf_parserror(_("CLIENT or SERVER expected"));
+ }
+}
+
+static void
+read_autolabel(
+ conf_var_t *np G_GNUC_UNUSED,
+ val_t *val)
+{
+ int data = 0;
+ ckseen(&val->seen);
+
+ get_conftoken(CONF_ANY);
+ if (tok == CONF_STRING) {
+ data++;
+ val->v.autolabel.template = newstralloc(val->v.autolabel.template,
+ tokenval.v.s);
+ get_conftoken(CONF_ANY);
+ }
+ val->v.autolabel.autolabel = 0;
+ while (tok != CONF_NL && tok != CONF_END) {
+ data++;
+ if (tok == CONF_ANY_VOLUME)
+ val->v.autolabel.autolabel |= AL_OTHER_CONFIG | AL_NON_AMANDA |
+ AL_VOLUME_ERROR | AL_EMPTY;
+ else if (tok == CONF_OTHER_CONFIG)
+ val->v.autolabel.autolabel |= AL_OTHER_CONFIG;
+ else if (tok == CONF_NON_AMANDA)
+ val->v.autolabel.autolabel |= AL_NON_AMANDA;
+ else if (tok == CONF_VOLUME_ERROR)
+ val->v.autolabel.autolabel |= AL_VOLUME_ERROR;
+ else if (tok == CONF_EMPTY)
+ val->v.autolabel.autolabel |= AL_EMPTY;
+ else {
+ conf_parserror(_("ANY, NEW-VOLUME, OTHER-CONFIG, NON-AMANDA, VOLUME-ERROR or EMPTY is expected"));
+ }
+ get_conftoken(CONF_ANY);
+ }
+ if (data == 0) {
+ amfree(val->v.autolabel.template);
+ val->v.autolabel.autolabel = 0;
+ } else if (val->v.autolabel.autolabel == 0) {
+ val->v.autolabel.autolabel = AL_VOLUME_ERROR | AL_EMPTY;
+ }
+}
+
+static void
+read_part_cache_type(
+ conf_var_t *np G_GNUC_UNUSED,
+ val_t *val)
+{
+ part_cache_type_t part_cache_type;
+
+ ckseen(&val->seen);
+
+ get_conftoken(CONF_ANY);
+ switch(tok) {
+ case CONF_NONE:
+ part_cache_type = PART_CACHE_TYPE_NONE;
+ break;
+
+ case CONF_DISK:
+ part_cache_type = PART_CACHE_TYPE_DISK;
+ break;
+
+ case CONF_MEMORY:
+ part_cache_type = PART_CACHE_TYPE_MEMORY;
+ break;
+
+ default:
+ conf_parserror(_("NONE, DISK or MEMORY expected"));
+ part_cache_type = PART_CACHE_TYPE_NONE;
+ break;
+ }
+
+ val_t__part_cache_type(val) = (int)part_cache_type;
+}
+
+static void
+read_recovery_limit(
+ conf_var_t *np G_GNUC_UNUSED,
+ val_t *val)
+{
+ recovery_limit_t *rl = &val_t__recovery_limit(val);
+ ckseen(&val->seen);
+
+ while (1) {
+ get_conftoken(CONF_ANY);
+ switch(tok) {
+ case CONF_STRING:
+ rl->match_pats = g_slist_append(rl->match_pats, g_strdup(tokenval.v.s));
+ break;
+ case CONF_SAME_HOST:
+ rl->same_host = TRUE;
+ break;
+
+ case CONF_NL:
+ case CONF_END:
+ return;
+
+ default:
+ conf_parserror("SAME-HOST or a string expected");
+ break;
+ }
+ }
+}
+