Skip to content
Snippets Groups Projects
Commit e6fa8e9c authored by Henrik (Grubba) Grubbström's avatar Henrik (Grubba) Grubbström
Browse files

Renamed check_args to check_all_args.

Added va_check_args, and check_args.

Rev: src/module_support.c:1.2
parent a5c6ad2a
No related branches found
No related tags found
No related merge requests found
...@@ -4,29 +4,66 @@ ...@@ -4,29 +4,66 @@
#include "svalue.h" #include "svalue.h"
#include "stralloc.h" #include "stralloc.h"
void check_args(const char *fnname, int args, int minargs, ... ) /* Checks that minargs arguments are OK.
*
* Returns the number of the first bad argument,
* or 0 if all arguments were OK.
*/
int va_check_args(struct svalue *s, int minargs, va_list arglist)
{
int argno;
for (argno=0; argno < minargs; argno++)
{
int type_mask = va_arg(arglist, unsigned INT32);
if (!((1UL << s[argno].type) & type_mask))
{
return(argno+1);
}
}
return(0);
}
/* Returns the number of the first bad argument,
* or 0 if all arguments were OK.
*/
int check_args(int args, int minargs, ...)
{ {
va_list arglist; va_list arglist;
int argno; int argno;
if (args < minargs) { if (args < minargs) {
error("Too few arguments to %s()\n", fnname); return(args+1);
} }
va_start(arglist, minargs); va_start(arglist, minargs);
argno = va_check_args(sp - args, minargs, arglist);
va_end(arglist);
for (argno=0; argno < minargs; argno++) return(argno);
{ }
int type_mask = va_arg(arglist, unsigned INT32);
if (!((1UL << sp[argno-args].type) & type_mask)) /* This function generates errors if any of the minargs first arguments
* is not OK.
*/
void check_all_args(const char *fnname, int args, int minargs, ... )
{ {
va_end(arglist); va_list arglist;
error("Bad argument %d to %s()\n", argno+1, fnname); int argno;
}
if (args < minargs) {
error("Too few arguments to %s()\n", fnname);
} }
va_start(arglist, minargs);
argno = va_check_args(sp - args, minargs, arglist);
va_end(arglist); va_end(arglist);
if (argno) {
error("Bad argument %d to %s()\n", argno, fnname);
}
} }
/* This function does NOT generate errors, it simply returns how /* This function does NOT generate errors, it simply returns how
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment