return rv;
}
-int psi_printf(const char *fmt, ...) {
- int rs;
- char *a1;
- va_list ap1, ap2;
-
- va_start(ap1, fmt);
- va_copy(ap2, ap1);
- a1 = va_arg(ap2, char *);
- rs = vprintf(fmt, ap1);
- va_end(ap1);
- va_end(ap2);
- return rs;
-}
-
static struct psi_func_redir {
const char *name;
void (*func)(void);
} psi_func_redirs[] = {
{"glob", (void (*)(void)) psi_glob},
- {"printf", (void (*)(void)) psi_printf},
PSI_REDIRS
{0}
};
PSI_DECLS
{0}
};
+static struct psi_predef_decl psi_predef_vararg_decls[] = {
+ PSI_VA_DECLS
+ {0}
+};
static struct psi_predef_struct {
token_t type_tag;
decl_args *args = init_decl_args(NULL);
decl *decl = init_decl(init_decl_abi("default"), func, args);
+ for (farg = &predef_decl[1]; farg->type_tag; ++farg) {
+ decl_type *arg_type = init_decl_type(farg->type_tag, farg->type_name);
+ decl_var *arg_var = init_decl_var(farg->var_name, farg->pointer_level, farg->array_size);
+ decl_arg *darg = init_decl_arg(arg_type, arg_var);
+ args = add_decl_arg(args, darg);
+ }
+
+ T.decls = add_decl(T.decls, decl);
+ predef_decl = farg;
+ }
+
+ for (predef_decl = &psi_predef_vararg_decls[0]; predef_decl->type_tag; ++predef_decl) {
+ struct psi_predef_decl *farg;
+ decl_type *ftype = init_decl_type(predef_decl->type_tag, predef_decl->type_name);
+ decl_var *fname = init_decl_var(predef_decl->var_name, predef_decl->pointer_level, predef_decl->array_size);
+ decl_arg *func = init_decl_arg(ftype, fname);
+ decl_args *args = init_decl_args(NULL);
+ decl *decl = init_decl(init_decl_abi("default"), func, args);
for (farg = &predef_decl[1]; farg->type_tag; ++farg) {
decl_type *arg_type = init_decl_type(farg->type_tag, farg->type_name);
decl_arg *darg = init_decl_arg(arg_type, arg_var);
args = add_decl_arg(args, darg);
}
+ args->varargs = 1;
T.decls = add_decl(T.decls, decl);
predef_decl = farg;