Resolved some bugs and TODOs

This commit is contained in:
2025-10-16 18:57:47 +02:00
parent f288c10b17
commit 66af681d1a
2 changed files with 142 additions and 18 deletions
+72 -14
View File
@@ -13716,22 +13716,88 @@ static void append_to_output(StaticOutputBuffer *out, char *src, int len)
static void append_to_output_u64(StaticOutputBuffer *out, uint64_t n)
{
// TODO
// TODO: test this function as it was vibecoded
char buf[32]; // Enough for any 64-bit unsigned integer
int len = 0;
// Handle zero as special case
if (n == 0) {
buf[len++] = '0';
} else {
// Convert to decimal digits (in reverse order)
char temp[32];
int temp_len = 0;
while (n > 0) {
temp[temp_len++] = '0' + (n % 10);
n /= 10;
}
// Reverse the digits
for (int i = temp_len - 1; i >= 0; i--) {
buf[len++] = temp[i];
}
}
append_to_output(out, buf, len);
}
static void append_to_output_s64(StaticOutputBuffer *out, int64_t n)
{
// TODO
// TODO: test this function as it was vibecoded
// Special case for INT64_MIN to avoid overflow when negating
if (n == INT64_MIN) {
append_to_output(out, "-9223372036854775808", 20);
return;
}
char buf[32];
int len = 0;
// Handle negative sign
if (n < 0) {
buf[len++] = '-';
n = -n;
}
// Convert absolute value
if (n == 0) {
buf[len++] = '0';
} else {
char temp[32];
int temp_len = 0;
while (n > 0) {
temp[temp_len++] = '0' + (n % 10);
n /= 10;
}
for (int i = temp_len - 1; i >= 0; i--) {
buf[len++] = temp[i];
}
}
append_to_output(out, buf, len);
}
static void append_to_output_f64(StaticOutputBuffer *out, double n)
{
// TODO
// TODO: test this function as it was vibecoded
char buf[64];
// Use %.17g for sufficient precision while avoiding trailing zeros
int len = snprintf(buf, sizeof(buf), "%.17g", n);
if (len > 0 && len < (int)sizeof(buf))
append_to_output(out, buf, len);
}
static void append_to_output_ptr(StaticOutputBuffer *out, void *p)
{
// TODO
// TODO: test this function as it was vibecoded
char buf[32];
// Format pointer in hexadecimal (platform-dependent format)
int len = snprintf(buf, sizeof(buf), "%p", p);
if (len > 0 && len < (int)sizeof(buf))
append_to_output(out, buf, len);
}
static void value_to_output(StaticOutputBuffer *out, CWEB_VArg arg)
@@ -14237,13 +14303,9 @@ static int sqlite3utils_prepare(SQLiteCache *cache, sqlite3_stmt **pstmt, char *
return SQLITE_OK;
}
static void dump_sql(char *fmt, CWEB_VArgs args); // TODO: remove
static int sqlite3utils_prepare_and_bind_impl(SQLiteCache *cache,
sqlite3_stmt **pstmt, char *fmt, CWEB_VArgs args)
{
dump_sql(fmt, args); // TODO: remove
sqlite3_stmt *stmt;
int ret = sqlite3utils_prepare(cache, &stmt, fmt, strlen(fmt));
if (ret != SQLITE_OK)
@@ -14271,14 +14333,10 @@ static int sqlite3utils_prepare_and_bind_impl(SQLiteCache *cache,
case CWEB_VARG_TYPE_D : ret = sqlite3_bind_double(stmt, i+1, arg.d); break;
case CWEB_VARG_TYPE_B : ret = sqlite3_bind_int (stmt, i+1, arg.b); break;
case CWEB_VARG_TYPE_STR : ret = sqlite3_bind_text (stmt, i+1, arg.str.ptr, arg.str.len, NULL); break;
case CWEB_VARG_TYPE_HASH:
CWEB_TRACE("%s: binding hash [%s]", __func__, arg.hash.data);
ret = sqlite3_bind_text (stmt, i+1, arg.hash.data, strlen(arg.hash.data), SQLITE_TRANSIENT);
break;
case CWEB_VARG_TYPE_HASH: ret = sqlite3_bind_text (stmt, i+1, arg.hash.data, strlen(arg.hash.data), SQLITE_TRANSIENT); break;
default:
ASSERT(0); // TODO
ASSERT(0); // TODO
break;
}
if (ret != SQLITE_OK) {