11 #include <sqstdmath.h>
12 #include <sqstdstring.h>
13 #include <sqstdsystem.h>
16 #define _RPMSQUIRREL_INTERNAL
33 #if defined(WITH_SQUIRREL)
34 sq_close((HSQUIRRELVM)squirrel->I);
50 if (_rpmsquirrelPool ==
NULL) {
58 #if defined(WITH_SQUIRREL)
59 static void rpmsquirrelPrint(HSQUIRRELVM v,
const SQChar *
s, ...)
69 if (nw > -1 && (
size_t)nw < nb)
83 #if defined(SQUIRREL_VERSION_NUMBER)
84 static void rpmsquirrelStderr(HSQUIRRELVM v,
const SQChar *s,...)
88 vfprintf(stderr, s, vl);
113 #if defined(WITH_SQUIRREL)
114 static char * _av[] = {
"rpmsquirrel",
NULL };
115 SQInteger stacksize = 1024;
116 HSQUIRRELVM v = sq_open(stacksize);
119 if (av ==
NULL) av = _av;
123 sq_setforeignptr(v, squirrel);
124 #if defined(SQUIRREL_VERSION_NUMBER)
125 sq_setprintfunc(v, rpmsquirrelPrint, rpmsquirrelStderr);
127 sq_setprintfunc(v, rpmsquirrelPrint);
132 sqstd_register_bloblib(v);
133 sqstd_register_iolib(v);
134 sqstd_register_systemlib(v);
135 sqstd_register_mathlib(v);
136 sqstd_register_stringlib(v);
138 sqstd_seterrorhandlers(v);
143 sq_pushstring(v,
"ARGS", -1);
145 for (i = 0, i < ac; i++) {
146 sq_pushstring(v, av[i], -1);
147 sq_arrayappend(v, -2);
149 sq_createslot(v, -3);
165 fprintf(stderr,
"==> %s(%p,%s)\n", __FUNCTION__, squirrel, fn);
170 if (fn !=
NULL && Tcl_EvalFile((Tcl_Interp *)squirrel->I, fn) == SQUIRREL_OK) {
184 fprintf(stderr,
"==> %s(%p,%s)\n", __FUNCTION__, squirrel, str);
188 #if defined(WITH_SQUIRREL)
190 size_t ns = strlen(str);
192 HSQUIRRELVM v = squirrel->I;
193 SQBool
raise = SQFalse;
194 SQInteger oldtop = sq_gettop(v);
195 SQRESULT
res = sq_compilebuffer(v, str, ns, __FUNCTION__,
raise);
197 if (SQ_SUCCEEDED(res)) {
198 SQInteger retval = 0;
200 res = sq_call(v, 1, retval,
raise);
203 sq_settop(v, oldtop);
rpmsquirrel rpmsquirrelLink(rpmsquirrel squirrel)
Reference a squirrel interpreter instance.
static char *size_t nb
fgets(3) analogue that reads \ continuations.
rpmsquirrel _rpmsquirrelI
rpmiob rpmiobFree(rpmiob iob)
Destroy a I/O buffer instance.
static rpmsquirrel rpmsquirrelGetPool(rpmioPool pool)
rpmiob rpmiobAppend(rpmiob iob, const char *s, size_t nl)
Append string to I/O buffer.
enum rpmRC_e rpmRC
RPM return codes.
rpmioItem rpmioGetPool(rpmioPool pool, size_t size)
Get unused item from pool, or alloc a new item.
fprintf(stderr,"--> %s(%p,%p,%p) sig %p sigp %p\n", __FUNCTION__, dig, t, rsactx, sig, sigp)
int argvCount(const ARGV_t argv)
Return no.
rpmRC rpmsquirrelRunFile(rpmsquirrel squirrel, const char *fn, const char **resultp)
Execute squirrel from a file.
static void rpmsquirrelFini(void *_squirrel)
rpmRC rpmsquirrelRun(rpmsquirrel squirrel, const char *str, const char **resultp)
Execute squirrel string.
static rpmsquirrel rpmsquirrelI(void)
rpmiob rpmiobNew(size_t len)
Create an I/O buffer.
struct rpmsquirrel_s * rpmsquirrel
char * rpmiobStr(rpmiob iob)
Return I/O buffer (as string).
rpmioPool _rpmsquirrelPool
static int vsnprintf(char *buf, int nb, const char *fmt, va_list ap)
rpmioPool rpmioNewPool(const char *name, size_t size, int limit, int flags, char *(*dbg)(void *item), void(*init)(void *item), void(*fini)(void *item))
Create a memory pool.
static void
Print copy of spec file, filling in Group/Description/Summary from specspo.
rpmsquirrel rpmsquirrelNew(char **av, uint32_t flags)
static void * _free(const void *p)
Wrapper to free(3), hides const compilation noise, permit NULL, return NULL.