Commit 4a31a5e1 authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Flesh out the toupper and tolower functions.

Emit a VCC friendly specification string for each functions.



git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@5147 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent 7b3cee39
......@@ -73,21 +73,22 @@ pstruct = ""
pinit = ""
tdl = ""
plist = ""
slist = ""
def do_func(fname, rval, args):
global pstruct
global pinit
global plist
global slist
global tdl
print(fname, rval, args)
proto = ctypes[rval] + " vmod_" + fname + "("
sproto = ctypes[rval] + " td_" + fname + "("
s=""
proto = ctypes[rval] + " vmod_" + fname + "(struct sess *"
sproto = ctypes[rval] + " td_" + fname + "(struct sess *"
s=", "
for i in args:
proto += s + ctypes[i]
sproto += s + ctypes[i]
s = ", "
proto += ")"
sproto += ")"
......@@ -97,6 +98,13 @@ def do_func(fname, rval, args):
pstruct += "\ttd_" + fname + "\t*" + fname + ";\n"
pinit += "\tvmod_" + fname + ",\n"
s = modname + '.' + fname + "\\0"
s += "Vmod_Func_" + modname + "." + fname + "\\0"
s += type_tab[rval]
for i in args:
s += type_tab[i]
slist += '\t"' + s + '",\n'
#######################################################################
f = open(specfile, "r")
......@@ -151,14 +159,22 @@ def dumps(s):
fc = open("vmod.c", "w")
fh = open("vmod.h", "w")
fh.write('struct sess;\n')
fh.write("\n");
fh.write(plist)
fc.write('#include "vmod.h"\n')
fc.write("\n");
fc.write('struct sess;\n')
fc.write("\n");
fc.write(tdl);
fc.write("\n");
fc.write('const char Vmod_Name[] = "' + modname + '";\n')
fc.write("const struct Vmod_Func_" + modname + " {\n")
fc.write(pstruct + "} Vmod_Func = {\n" + pinit + "};\n")
fc.write("\n");
......@@ -174,4 +190,4 @@ dumps(pstruct + "} Vmod_Func_" + modname + ";\n")
fc.write('\t;\n')
fc.write("\n");
fc.write('const char Vmod_Name[] = "' + modname + '";\n')
fc.write('const char *Vmod_Spec[] = {\n' + slist + '\t0\n};\n')
Module std
Function STRING toupper(STRING_LIST)
Function STRING tolower ( STRING_LIST)
Function REAL real(STRING, REAL)
Function STRING tolower(STRING_LIST)
#include <ctype.h>
#include <stdarg.h>
#include "vrt.h"
#include "../../bin/varnishd/cache.h"
#include "vmod.h"
const char *
vmod_toupper(const char *s, ...)
vmod_toupper(struct sess *sp, const char *s, ...)
{
va_list ap;
unsigned u;
char *b, *e;
const char *p;
(void)s;
return ("UPPER");
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
va_start(ap, s);
u = WS_Reserve(sp->wrk->ws, 0);
e = b = sp->wrk->ws->f;
e += u;
p = s;
while (p != vrt_magic_string_end && b < e) {
for (; b < e && *p != '\0'; p++)
*b++ = toupper(*p);
p = va_arg(ap, const char *);
}
if (b < e)
*b = '\0';
b++;
if (b > e) {
WS_Release(sp->wrk->ws, 0);
return (NULL);
} else {
e = b;
b = sp->wrk->ws->f;
WS_Release(sp->wrk->ws, e - b);
return (b);
}
}
const char *
vmod_tolower(const char *s, ...)
{
(void)s;
return ("LOWER");
}
double
vmod_real(const char *s, double d)
vmod_tolower(struct sess *sp, const char *s, ...)
{
va_list ap;
unsigned u;
char *b, *e;
const char *p;
(void)s;
(void)d;
return (3.1415);
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
va_start(ap, s);
u = WS_Reserve(sp->wrk->ws, 0);
e = b = sp->wrk->ws->f;
e += u;
p = s;
while (p != vrt_magic_string_end && b < e) {
for (; b < e && *p != '\0'; p++)
*b++ = tolower(*p);
p = va_arg(ap, const char *);
}
if (b < e)
*b = '\0';
b++;
if (b > e) {
WS_Release(sp->wrk->ws, 0);
return (NULL);
} else {
e = b;
b = sp->wrk->ws->f;
WS_Release(sp->wrk->ws, e - b);
return (b);
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment