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