From 3389fdfa113f7ab388f4fdf686b9cae14386fd10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Sat, 10 Oct 1998 02:30:54 +0200 Subject: [PATCH] %s and %S now disallow wide strings. %W now behaves as %S did before. Rev: src/module_support.c:1.14 --- src/module_support.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/module_support.c b/src/module_support.c index b4681b2ac2..37e5911aca 100644 --- a/src/module_support.c +++ b/src/module_support.c @@ -6,7 +6,7 @@ #include "pike_types.h" #include "error.h" -RCSID("$Id: module_support.c,v 1.13 1998/09/25 18:06:34 grubba Exp $"); +RCSID("$Id: module_support.c,v 1.14 1998/10/10 00:30:54 grubba Exp $"); /* Checks that args_to_check arguments are OK. * Returns 1 if everything worked ok, zero otherwise. @@ -123,8 +123,9 @@ void check_all_args(const char *fnname, int args, ... ) * usage: get_args(sp-args, args, "%i",&an_int) * format specifiers: * %i: INT32 - * %s: char * - * %S: struct pike_string * + * %s: char * Only 8bit strings + * %S: struct pike_string * Only 8bit strings + * %W: struct pike_string * Allow wide strings * %a: struct array * * %f: float * %m: struct mapping * @@ -159,9 +160,15 @@ int va_get_args(struct svalue *s, break; case 's': if(s->type != T_STRING) return ret; + if(s->size_shift) return ret; *va_arg(ap, char **)=s->u.string->str; break; case 'S': + if(s->type != T_STRING) return ret; + if(s->size_shift) return ret; + *va_arg(ap, struct pike_string **)=s->u.string; + break; + case 'W': if(s->type != T_STRING) return ret; *va_arg(ap, struct pike_string **)=s->u.string; break; @@ -226,7 +233,8 @@ void get_all_args(char *fname, INT32 args, char *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 's': case 'S': expected_type = "string (8bit)"; break; + case "W": expected_type = "string"; break; case 'a': expected_type = "array"; break; case 'f': expected_type = "float"; break; case 'm': expected_type = "mapping"; break; -- GitLab