(*ps->reader)(ps->closure, ps->lb, value, type, action);
(*ps->reader)(ps->closure, ps->lb, value, ps->vtype, ps->fdefault);
pref_DoCallback(PrefParseState *ps){    PrefType   type;    PrefAction action;    PrefValue  value;    type   = ps->vtype;    action = ps->fuser ? PREF_SETUSER : PREF_SETDEFAULT;    switch (type) {    case PREF_STRING:        value.stringVal = ps->vb;        break;    case PREF_INT:        if ((ps->vb[0] == '-' || ps->vb[0] == '+') && ps->vb[1] == '\0') {            NS_WARNING("malformed integer value");            return PR_FALSE;        }        value.intVal = atoi(ps->vb);        break;    case PREF_BOOL:        value.boolVal = (ps->vb == kTrue);        break;    default:        break;    }    (*ps->reader)(ps->closure, ps->lb, value, type, action);    return PR_TRUE;}