commit 47c583a940ee00f13e1495799bade6786a36bd5e from: Omar Polo date: Sat Aug 07 09:31:25 2021 UTC improve error message on invalid faccess commit - d13551333c4eb74f1010030b23e3405843ae1c11 commit + 47c583a940ee00f13e1495799bade6786a36bd5e blob - b26ca47e19d1c748979873b6b08f48279258afeb blob + b0ba75c1152bbf09806078026ed24f2562e3c2be --- script.c +++ script.c @@ -497,6 +497,22 @@ pp_val(struct value *val) ppf_val(stdout, val); } +const char * +val_type(struct value *v) +{ + switch (v->type) { + case V_SYM: return "symbol"; + case V_STR: return "string"; + case V_NUM: return "number"; + case V_MSG: return "message"; + case V_QID: return "qid"; + case V_U8: return "u8"; + case V_U16: return "u16"; + case V_U32: return "u32"; + default: return "unknown"; + } +} + int val_trueish(struct value *a) { @@ -613,24 +629,29 @@ val_faccess(struct value *a, const char *field, struct if (!strcmp(field, "vers")) { ret->type = V_U32; memcpy(&ret->v.u32, a->v.qid+1, 4); + return EVAL_OK; } else if (!strcmp(field, "type")) { ret->type = V_U8; ret->v.u8 = *a->v.qid; - } else - return EVAL_ERR; + return EVAL_OK; + } break; case V_MSG: if (!strcmp(field, "type")) { ret->type = V_U8; ret->v.u8 = *(a->v.msg.msg + 4); /* skip the length */ - } else - return EVAL_ERR; + return EVAL_OK; + } break; default: - return EVAL_ERR; + break; } - return EVAL_OK; + before_printing(); + printf("can't access field `%s' on type %s (", field, val_type(a)); + pp_val(a); + printf(")\n"); + return EVAL_ERR; } void