+ if (lenb == 0 && lena > 0) return -1;
+
+ bufa = sqlite3_malloc(lena+1);
+ bufb = sqlite3_malloc(lenb+1);
+
+ strncpy(bufa, a, lena);
+ strncpy(bufb, b, lenb);
+ bufa[lena] = 0;
+ bufb[lenb] = 0;
+
+ rv = zpm_vercmp(bufa, bufb);
+ sqlite3_free(bufa);
+ sqlite3_free(bufb);
+ return rv;
+}
+
+static void vercmpf(sqlite3_context *ctx, int nargs, sqlite3_value **vals) {
+ int rv;
+ if (nargs == 0) {
+ rv = 0;
+ } else if (nargs == 1) {
+ rv = -1;
+ } else {
+ rv = zpm_vercmp(
+ (const char *)sqlite3_value_text(vals[0]),
+ (const char *)sqlite3_value_text(vals[1])
+ );
+ }
+ sqlite3_result_int(ctx, rv);