Differences From Artifact [77517819b9]:
- File function.c — part of check-in [7b627ca618] at 2021-12-31 07:02:50 on branch trunk — Use ll_append_str for literal strings too, in case they contain \x escapes. (user: user, size: 64146) [annotate] [blame] [check-ins using]
To Artifact [830d643cb4]:
- File function.c — part of check-in [1293433867] at 2022-01-13 06:48:00 on branch trunk — Implement cryptographic hash algorithms. (These are not currently used by Free Hero Mesh but is expected to be used in future.) (user: user, size: 64598) [annotate] [blame] [check-ins using]
| ︙ | |||
8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | + |
#include <stdlib.h>
#include <string.h>
#include "sqlite3.h"
#include "smallxrm.h"
#include "heromesh.h"
#include "cursorshapes.h"
#include "instruc.h"
#include "hash.h"
typedef struct {
struct sqlite3_vtab_cursor;
sqlite3_int64 rowid;
char unique,eof;
Uint16 arg[4];
} Cursor;
|
| ︙ | |||
152 153 154 155 156 157 158 159 160 161 162 163 164 165 | 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | + + + + + + + + + |
return;
} else {
a=sqlite3_value_int(*argv)&0xFFFF;
if(!a || (a&~0x3FFF) || !classes[a] || (classes[a]->cflags&CF_NOCLASS2)) return;
}
found: sqlite3_result_int64(cxt,a|((sqlite3_int64)TY_CLASS<<32));
}
static void fn_hash(sqlite3_context*cxt,int argc,sqlite3_value**argv) {
const unsigned char*u=sqlite3_value_blob(*argv);
int n=sqlite3_value_bytes(*argv);
long long h=sqlite3_value_int64(argv[1]);
int m=hash_length(h);
if(sqlite3_value_type(*argv)==SQLITE_NULL || !m) return;
sqlite3_result_blob(cxt,hash_buffer(h,u,n),m,free);
}
static void fn_heromesh_escape(sqlite3_context*cxt,int argc,sqlite3_value**argv) {
const unsigned char*u=sqlite3_value_blob(*argv);
int un=sqlite3_value_bytes(*argv);
char*e;
int en=0;
int i=0;
|
| ︙ | |||
1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 | 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 | + |
void init_sql_functions(sqlite3_int64*ptr0,sqlite3_int64*ptr1) {
sqlite3_create_function(userdb,"BASENAME",0,SQLITE_UTF8|SQLITE_DETERMINISTIC,0,fn_basename,0,0);
sqlite3_create_function(userdb,"BCAT",-1,SQLITE_UTF8|SQLITE_DETERMINISTIC,0,fn_bcat,0,0);
sqlite3_create_function(userdb,"BYTE",-1,SQLITE_UTF8|SQLITE_DETERMINISTIC,0,fn_byte,0,0);
sqlite3_create_function(userdb,"CL",1,SQLITE_UTF8|SQLITE_DETERMINISTIC,0,fn_cl,0,0);
sqlite3_create_function(userdb,"CLASS_DATA",2,SQLITE_UTF8|SQLITE_DETERMINISTIC,0,fn_class_data,0,0);
sqlite3_create_function(userdb,"CVALUE",1,SQLITE_UTF8|SQLITE_DETERMINISTIC,0,fn_cvalue,0,0);
sqlite3_create_function(userdb,"HASH",2,SQLITE_UTF8|SQLITE_DETERMINISTIC,0,fn_hash,0,0);
sqlite3_create_function(userdb,"HEROMESH_ESCAPE",1,SQLITE_UTF8|SQLITE_DETERMINISTIC,0,fn_heromesh_escape,0,0);
sqlite3_create_function(userdb,"HEROMESH_TYPE",1,SQLITE_UTF8|SQLITE_DETERMINISTIC,0,fn_heromesh_type,0,0);
sqlite3_create_function(userdb,"HEROMESH_UNESCAPE",1,SQLITE_UTF8|SQLITE_DETERMINISTIC,0,fn_heromesh_unescape,0,0);
sqlite3_create_function(userdb,"INRECT",2,SQLITE_UTF8,0,fn_inrect,0,0);
sqlite3_create_function(userdb,"LEVEL",0,SQLITE_UTF8,&level_ord,fn_level,0,0);
sqlite3_create_function(userdb,"LEVEL_CACHEID",0,SQLITE_UTF8|SQLITE_DETERMINISTIC,ptr0,fn_cacheid,0,0);
sqlite3_create_function(userdb,"LEVEL_ID",0,SQLITE_UTF8,&level_id,fn_level,0,0);
|
| ︙ |