Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "sdk/allocator.h"
- #include "sdk/logger.h"
- #include <stdlib.h>
- #include <string.h>
- #define __MODULE_IMPORT(module_name, function_name) \
- __attribute__((__import_module__(#module_name), __import_name__(#function_name)))
- void store_extern(char *ptr, char byte) __MODULE_IMPORT(sqlite, store);
- unsigned char load_extern(char *ptr) __MODULE_IMPORT(sqlite, load);
- char *allocate_extern(int size) __MODULE_IMPORT(sqlite, allocate);
- void deallocate_extern(char *ptr) __MODULE_IMPORT(sqlite, deallocate);
- char *invoke_extern(char *ptr, int size) __MODULE_IMPORT(sqlite, invoke);
- char *invoke(const char *str, int length) {
- char sql[] = "CREATE VIRTUAL TABLE users USING FTS5(body)";
- int sql_size = sizeof(sql);
- char *sql_address = allocate_extern(sql_size);
- for(int i = 0; i < sql_size; ++i) {
- store_extern(sql_address + i, sql[i]);
- }
- char *result = invoke_extern(sql_address, sizeof(sql));
- int result_size = 0;
- for (int i = 0; i < 4; ++i) {
- result_size = result_size | (result[i] << 8*i);
- }
- char *result_str = malloc(result_size + 1);
- for(int i = 0; i < result_size; ++i) {
- result_str[i] = load_extern(result + 4 + i);
- }
- result_str[result_size] = 0;
- char *result_out = malloc(result_size + 4);
- for(int i = 0; i < 4; ++i) {
- result_out[i] = (result_size << 8*i) & 0xFF;
- }
- memcpy(result_out + 4, result_str, result_size);
- return result_out;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement