- case CONF_INT:
- str = "an integer";
- break;
-
- case CONF_REAL:
- str = "a real number";
- break;
-
- case CONF_STRING:
- str = "a quoted string";
- break;
-
- case CONF_IDENT:
- str = "an identifier";
- break;
-
- default:
- for(kwp = keytable; kwp->keyword != NULL; kwp++) {
- if (exp == kwp->token)
- break;
- }
- if (kwp->keyword == NULL)
- str = "token not";
- else
- str = kwp->keyword;
- break;
- }
- conf_parserror("%s is expected", str);
- tok = exp;
- if (tok == CONF_INT)
- tokenval.v.i = 0;
- else
- tokenval.v.s = "";
- }
-}
-
-
-void
-read_string(
- t_conf_var *np,
- val_t *val)
-{
- np = np;
- ckseen(&val->seen);
- get_conftoken(CONF_STRING);
- val->v.s = newstralloc(val->v.s, tokenval.v.s);
-}
-
-void
-read_ident(
- t_conf_var *np,
- val_t *val)
-{
- np = np;
- ckseen(&val->seen);
- get_conftoken(CONF_IDENT);
- val->v.s = newstralloc(val->v.s, tokenval.v.s);
-}
-
-void
-read_int(
- t_conf_var *np,
- val_t *val)
-{
- np = np;
- ckseen(&val->seen);
- val->v.i = get_int();
-}
-
-void
-read_long(
- t_conf_var *np,
- val_t *val)
-{
- np = np;
- ckseen(&val->seen);
- val->v.l = get_long();
-}
-
-void
-read_size(
- t_conf_var *np,
- val_t *val)
-{
- np = np;
- ckseen(&val->seen);
- val->v.size = get_size();
-}
-
-void
-read_am64(
- t_conf_var *np,
- val_t *val)
-{
- np = np;
- ckseen(&val->seen);
- val->v.am64 = get_am64_t();
-}
-
-void
-read_bool(
- t_conf_var *np,
- val_t *val)
-{
- np = np;
- ckseen(&val->seen);
- val->v.i = get_bool();
-}
-
-void
-read_real(
- t_conf_var *np,
- val_t *val)
-{
- np = np;
- ckseen(&val->seen);
- get_conftoken(CONF_REAL);
- val->v.r = tokenval.v.r;
-}
-
-void
-read_time(
- t_conf_var *np,
- val_t *val)
-{
- np = np;
- ckseen(&val->seen);
- val->v.t = get_time();
-}
-
-void
-copy_val_t(
- val_t *valdst,
- val_t *valsrc)
-{
- if(valsrc->seen) {
- valdst->type = valsrc->type;
- valdst->seen = valsrc->seen;
- switch(valsrc->type) {
- case CONFTYPE_INT:
- case CONFTYPE_BOOL:
- case CONFTYPE_COMPRESS:
- case CONFTYPE_ENCRYPT:
- case CONFTYPE_HOLDING:
- case CONFTYPE_ESTIMATE:
- case CONFTYPE_STRATEGY:
- case CONFTYPE_TAPERALGO:
- case CONFTYPE_PRIORITY:
- valdst->v.i = valsrc->v.i;
- break;
-
- case CONFTYPE_LONG:
- valdst->v.l = valsrc->v.l;
- break;
-
- case CONFTYPE_SIZE:
- valdst->v.size = valsrc->v.size;
- break;
-
- case CONFTYPE_AM64:
- valdst->v.am64 = valsrc->v.am64;
- break;
-
- case CONFTYPE_REAL:
- valdst->v.r = valsrc->v.r;
- break;
-
- case CONFTYPE_RATE:
- valdst->v.rate[0] = valsrc->v.rate[0];
- valdst->v.rate[1] = valsrc->v.rate[1];
- break;
-
- case CONFTYPE_IDENT:
- case CONFTYPE_STRING:
- valdst->v.s = stralloc(valsrc->v.s);
- break;
-
- case CONFTYPE_TIME:
- valdst->v.t = valsrc->v.t;
- break;
-
- case CONFTYPE_SL:
- valdst->v.sl = duplicate_sl(valsrc->v.sl);
- break;
-
- case CONFTYPE_EXINCLUDE:
- valdst->v.exinclude.type = valsrc->v.exinclude.type;
- valdst->v.exinclude.optional = valsrc->v.exinclude.optional;
- valdst->v.exinclude.sl = duplicate_sl(valsrc->v.exinclude.sl);
- break;
- }
- }
-}
-
-void
-free_val_t(
- val_t *val)
-{
- switch(val->type) {
- case CONFTYPE_INT:
- case CONFTYPE_BOOL:
- case CONFTYPE_COMPRESS:
- case CONFTYPE_ENCRYPT:
- case CONFTYPE_HOLDING:
- case CONFTYPE_ESTIMATE:
- case CONFTYPE_STRATEGY:
- case CONFTYPE_SIZE:
- case CONFTYPE_TAPERALGO:
- case CONFTYPE_PRIORITY:
- case CONFTYPE_LONG:
- case CONFTYPE_AM64:
- case CONFTYPE_REAL:
- case CONFTYPE_RATE:
- break;
-
- case CONFTYPE_IDENT:
- case CONFTYPE_STRING:
- amfree(val->v.s);
- break;
-
- case CONFTYPE_TIME:
- break;
-
- case CONFTYPE_SL:
- free_sl(val->v.sl);
- break;
-
- case CONFTYPE_EXINCLUDE:
- free_sl(val->v.exinclude.sl);
- break;
- }
- val->seen = 0;
-}
-
-char *
-taperalgo2str(
- int taperalgo)
-{
- if(taperalgo == ALGO_FIRST) return "FIRST";
- if(taperalgo == ALGO_FIRSTFIT) return "FIRSTFIT";
- if(taperalgo == ALGO_LARGEST) return "LARGEST";
- if(taperalgo == ALGO_LARGESTFIT) return "LARGESTFIT";
- if(taperalgo == ALGO_SMALLEST) return "SMALLEST";
- if(taperalgo == ALGO_LAST) return "LAST";
- return "UNKNOWN";
-}
-
-static char buffer_conf_print[1025];
-
-char *
-conf_print(
- val_t *val)
-{
- struct tm *stm;
- int pos;
-
- buffer_conf_print[0] = '\0';
- switch(val->type) {
- case CONFTYPE_INT:
- snprintf(buffer_conf_print, SIZEOF(buffer_conf_print), "%d", val->v.i);
- break;
-
- case CONFTYPE_LONG:
- snprintf(buffer_conf_print, SIZEOF(buffer_conf_print), "%ld", val->v.l);
- break;
-
- case CONFTYPE_SIZE:
- snprintf(buffer_conf_print, SIZEOF(buffer_conf_print), SSIZE_T_FMT,
- (SSIZE_T_FMT_TYPE)val->v.size);
- break;
-
- case CONFTYPE_AM64:
- snprintf(buffer_conf_print, SIZEOF(buffer_conf_print), OFF_T_FMT ,
- (OFF_T_FMT_TYPE)val->v.am64);
- break;
-
- case CONFTYPE_REAL:
- snprintf(buffer_conf_print, SIZEOF(buffer_conf_print), "%0.5f" , val->v.r);
- break;
-
- case CONFTYPE_RATE:
- snprintf(buffer_conf_print, SIZEOF(buffer_conf_print), "%0.5f %0.5f" , val->v.rate[0], val->v.rate[1]);
- break;
-
- case CONFTYPE_IDENT:
- if(val->v.s) {
- strncpy(buffer_conf_print, val->v.s, SIZEOF(buffer_conf_print));
- buffer_conf_print[SIZEOF(buffer_conf_print) - 1] = '\0';
- } else
- buffer_conf_print[0] = '\0';
- break;
-
- case CONFTYPE_STRING:
- buffer_conf_print[0] = '"';
- if(val->v.s) {
- strncpy(&buffer_conf_print[1], val->v.s,
- SIZEOF(buffer_conf_print) - 1);
- buffer_conf_print[SIZEOF(buffer_conf_print) - 2] = '\0';
- buffer_conf_print[strlen(buffer_conf_print)] = '"';
- } else {
- buffer_conf_print[1] = '"';
- buffer_conf_print[2] = '\0';
- }
- break;
-
- case CONFTYPE_TIME:
- stm = localtime(&val->v.t);
- if (stm) {
- snprintf(buffer_conf_print, SIZEOF(buffer_conf_print),
- "%d%02d%02d", stm->tm_hour, stm->tm_min, stm->tm_sec);
- } else {
- strcpy(buffer_conf_print, "00000");
- }
- break;
-
- case CONFTYPE_SL:
- buffer_conf_print[0] = '\0';
- break;
-
- case CONFTYPE_EXINCLUDE:
- buffer_conf_print[0] = '\0';
- if(val->v.exinclude.type == 0)
- strncpy(buffer_conf_print, "LIST ", SIZEOF(buffer_conf_print));
- else
- strncpy(buffer_conf_print, "FILE ", SIZEOF(buffer_conf_print));
- pos = 5;
- if(val->v.exinclude.optional == 1)
- strncpy(&buffer_conf_print[pos], "OPTIONAL ", SIZEOF(buffer_conf_print));
- pos += 9;
- break;
-
- case CONFTYPE_BOOL:
- if(val->v.i)
- strncpy(buffer_conf_print, "yes", SIZEOF(buffer_conf_print));
- else
- strncpy(buffer_conf_print, "no", SIZEOF(buffer_conf_print));
- break;
-
- case CONFTYPE_STRATEGY:
- switch(val->v.i) {
- case DS_SKIP:
- strncpy(buffer_conf_print, "SKIP", SIZEOF(buffer_conf_print));
- break;
-
- case DS_STANDARD:
- strncpy(buffer_conf_print, "STANDARD", SIZEOF(buffer_conf_print));
- break;
-
- case DS_NOFULL:
- strncpy(buffer_conf_print, "NOFULL", SIZEOF(buffer_conf_print));
- break;
-
- case DS_NOINC:
- strncpy(buffer_conf_print, "NOINC", SIZEOF(buffer_conf_print));
- break;
-
- case DS_HANOI:
- strncpy(buffer_conf_print, "HANOI", SIZEOF(buffer_conf_print));
- break;
-
- case DS_INCRONLY:
- strncpy(buffer_conf_print, "INCRONLY", SIZEOF(buffer_conf_print));
- break;
- }
- break;
-
- case CONFTYPE_COMPRESS:
- switch(val->v.i) {
- case COMP_NONE:
- strncpy(buffer_conf_print, "NONE", SIZEOF(buffer_conf_print));
- break;
-
- case COMP_FAST:
- strncpy(buffer_conf_print, "CLIENT FAST", SIZEOF(buffer_conf_print));
- break;
-
- case COMP_BEST:
- strncpy(buffer_conf_print, "CLIENT BEST", SIZEOF(buffer_conf_print));
- break;
-
- case COMP_CUST:
- strncpy(buffer_conf_print, "CLIENT CUSTOM", SIZEOF(buffer_conf_print));
- break;
-
- case COMP_SERV_FAST:
- strncpy(buffer_conf_print, "SERVER FAST", SIZEOF(buffer_conf_print));
- break;
-
- case COMP_SERV_BEST:
- strncpy(buffer_conf_print, "SERVER FAST", SIZEOF(buffer_conf_print));
- break;
-
- case COMP_SERV_CUST:
- strncpy(buffer_conf_print, "SERVER CUSTOM", SIZEOF(buffer_conf_print));
- break;
- }
- break;
-
- case CONFTYPE_ESTIMATE:
- switch(val->v.i) {
- case ES_CLIENT:
- strncpy(buffer_conf_print, "CLIENT", SIZEOF(buffer_conf_print));
- break;
-
- case ES_SERVER:
- strncpy(buffer_conf_print, "SERVER", SIZEOF(buffer_conf_print));
- break;
-
- case ES_CALCSIZE:
- strncpy(buffer_conf_print, "CALCSIZE", SIZEOF(buffer_conf_print));
- break;
- }
- break;
-
- case CONFTYPE_ENCRYPT:
- switch(val->v.i) {
- case ENCRYPT_NONE:
- strncpy(buffer_conf_print, "NONE", SIZEOF(buffer_conf_print));
- break;
-
- case ENCRYPT_CUST:
- strncpy(buffer_conf_print, "CLIENT", SIZEOF(buffer_conf_print));
- break;
-
- case ENCRYPT_SERV_CUST:
- strncpy(buffer_conf_print, "SERVER", SIZEOF(buffer_conf_print));
- break;
- }
- break;
-
- case CONFTYPE_HOLDING:
- switch(val->v.i) {
- case HOLD_NEVER:
- strncpy(buffer_conf_print, "NEVER", SIZEOF(buffer_conf_print));
- break;
-
- case HOLD_AUTO:
- strncpy(buffer_conf_print, "AUTO", SIZEOF(buffer_conf_print));
- break;
-
- case HOLD_REQUIRED:
- strncpy(buffer_conf_print, "REQUIRED", SIZEOF(buffer_conf_print));
- break;
- }
- break;
-
- case CONFTYPE_TAPERALGO:
- strncpy(buffer_conf_print, taperalgo2str(val->v.i), SIZEOF(buffer_conf_print));
- break;
-
- case CONFTYPE_PRIORITY:
- switch(val->v.i) {
- case 0:
- strncpy(buffer_conf_print, "LOW", SIZEOF(buffer_conf_print));
- break;
-
- case 1:
- strncpy(buffer_conf_print, "MEDIUM", SIZEOF(buffer_conf_print));
- break;
-
- case 2:
- strncpy(buffer_conf_print, "HIGH", SIZEOF(buffer_conf_print));
- break;
- }
- break;
- }
- buffer_conf_print[SIZEOF(buffer_conf_print) - 1] = '\0';
- return buffer_conf_print;
-}
-
-void
-conf_init_string(
- val_t *val,
- char *s)
-{
- val->seen = 0;
- val->type = CONFTYPE_STRING;
- if(s)
- val->v.s = stralloc(s);
- else
- val->v.s = NULL;
-}
-
-void
-conf_init_ident(
- val_t *val,
- char *s)
-{
- val->seen = 0;
- val->type = CONFTYPE_IDENT;
- if(s)
- val->v.s = stralloc(s);
- else
- val->v.s = NULL;
-}
-
-void
-conf_init_int(
- val_t *val,
- int i)
-{
- val->seen = 0;
- val->type = CONFTYPE_INT;
- val->v.i = i;
-}
-
-void
-conf_init_bool(
- val_t *val,
- int i)
-{
- val->seen = 0;
- val->type = CONFTYPE_BOOL;
- val->v.i = i;
-}
-
-void
-conf_init_strategy(
- val_t *val,
- int i)
-{
- val->seen = 0;
- val->type = CONFTYPE_STRATEGY;
- val->v.i = i;
-}
-
-void
-conf_init_estimate(
- val_t *val,
- int i)
-{
- val->seen = 0;
- val->type = CONFTYPE_ESTIMATE;
- val->v.i = i;
-}
-
-void
-conf_init_taperalgo(
- val_t *val,
- int i)
-{
- val->seen = 0;
- val->type = CONFTYPE_TAPERALGO;
- val->v.i = i;
-}
-
-void
-conf_init_priority(
- val_t *val,
- int i)
-{
- val->seen = 0;
- val->type = CONFTYPE_PRIORITY;
- val->v.i = i;
-}
-
-void
-conf_init_compress(
- val_t *val,
- comp_t i)
-{
- val->seen = 0;
- val->type = CONFTYPE_COMPRESS;
- val->v.i = (int)i;
-}
-
-void
-conf_init_encrypt(
- val_t *val,
- encrypt_t i)
-{
- val->seen = 0;
- val->type = CONFTYPE_ENCRYPT;
- val->v.i = (int)i;
-}
-
-void
-conf_init_holding(
- val_t *val,
- dump_holdingdisk_t i)
-{
- val->seen = 0;
- val->type = CONFTYPE_HOLDING;
- val->v.i = (int)i;
-}
-
-void
-conf_init_long(
- val_t *val,
- long l)
-{
- val->seen = 0;
- val->type = CONFTYPE_LONG;
- val->v.l = l;
-}
-
-void
-conf_init_size(
- val_t *val,
- ssize_t sz)
-{
- val->seen = 0;
- val->type = CONFTYPE_SIZE;
- val->v.size = sz;
-}
-
-void
-conf_init_am64(
- val_t *val,
- off_t l)
-{
- val->seen = 0;
- val->type = CONFTYPE_AM64;
- val->v.am64 = l;
-}
-
-void
-conf_init_real(
- val_t *val,
- double r)
-{
- val->seen = 0;
- val->type = CONFTYPE_REAL;
- val->v.r = r;
-}
-
-void
-conf_init_rate(
- val_t *val,
- double r1,
- double r2)
-{
- val->seen = 0;
- val->type = CONFTYPE_RATE;
- val->v.rate[0] = r1;
- val->v.rate[1] = r2;
-}
-
-void
-conf_init_time(
- val_t *val,
- time_t t)
-{
- val->seen = 0;
- val->type = CONFTYPE_TIME;
- val->v.t = t;
-}
-
-void
-conf_init_sl(
- val_t *val,
- sl_t *sl)
-{
- val->seen = 0;
- val->type = CONFTYPE_AM64;
- val->v.sl = sl;
-}
-
-void
-conf_init_exinclude(
- val_t *val)
-{
- val->seen = 0;
- val->type = CONFTYPE_EXINCLUDE;
- val->v.exinclude.type = 0;
- val->v.exinclude.optional = 0;
- val->v.exinclude.sl = NULL;
-}
-
-void
-conf_set_string(
- val_t *val,
- char *s)
-{
- val->seen = -1;
- val->type = CONFTYPE_STRING;
- amfree(val->v.s);
- val->v.s = stralloc(s);
-}
-
-void
-conf_set_int(
- val_t *val,
- int i)
-{
- val->seen = -1;
- val->type = CONFTYPE_INT;
- val->v.i = i;
-}
-
-void
-conf_set_bool(
- val_t *val,
- int i)
-{
- val->seen = -1;
- val->type = CONFTYPE_BOOL;
- val->v.i = i;
-}
-
-void
-conf_set_compress(
- val_t *val,
- comp_t i)
-{
- val->seen = -1;
- val->type = CONFTYPE_COMPRESS;
- val->v.i = (int)i;
-}
-
-void
-conf_set_encrypt(
- val_t *val,
- encrypt_t i)
-{
- val->seen = -1;
- val->type = CONFTYPE_COMPRESS;
- val->v.i = (int)i;
-}
-
-void
-conf_set_holding(
- val_t *val,
- dump_holdingdisk_t i)
-{
- val->seen = -1;
- val->type = CONFTYPE_HOLDING;
- val->v.i = (int)i;
-}