From f58cac28bf0beb637de83c295471331dbffa0320 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Tue, 11 Mar 1997 23:19:20 +0100 Subject: [PATCH] Made error-message more specific. Fixed bug in va_get_args() -- %f did not work before. Rev: src/module_support.c:1.3 --- src/module_support.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/module_support.c b/src/module_support.c index 436f759f6d..5d8f0f58df 100644 --- a/src/module_support.c +++ b/src/module_support.c @@ -117,7 +117,7 @@ int va_get_args(struct svalue *s, *va_arg(ap, struct array **)=s->u.array; break; case 'f': - if(s->type != T_ARRAY) return ret; + if(s->type != T_FLOAT) return ret; *va_arg(ap, float *)=s->u.float_number; break; case 'm': @@ -168,6 +168,21 @@ void get_all_args(char *fname, INT32 args, char *format, ... ) va_start(ptr, format); ret=va_get_args(sp-args, args, format, ptr); va_end(ptr); - if((long)ret != (long)strlen(format) / 2) - error("Bad argument %d to %s()\n", ret+1, fname); + if((long)ret*2 != (long)strlen(format)) { + char *expected_type; + switch(format[ret*2+1]) { + case 'd': case 'i': expected_type = "int"; break; + case 's': case 'S': expected_type = "string"; break; + case 'a': expected_type = "array"; break; + case 'f': expected_type = "float"; break; + case 'm': expected_type = "mapping"; break; + case 'M': expected_type = "multiset"; break; + case 'o': expected_type = "object"; break; + case 'p': expected_type = "program"; break; + case '*': expected_type = "mixed"; break; + default: expected_type = "Unknown"; break; + } + error("Bad argument %d to %s(). Expected %s\n", ret+1, fname, + expected_type); + } } -- GitLab