@@ -72,14 +72,6 @@ OF SUCH DAMAGE.
72
72
73
73
#include "dbutils.h"
74
74
75
- static int str_output(void *args, int, char **data, char **) {
76
- char *output = static_cast <char *> (args);
77
- const size_t len = strlen(data[0]);
78
- memcpy(output, data[0], len);
79
- output[len] = '\0';
80
- return 0;
81
- }
82
-
83
75
TEST(attachdb, nullptr) {
84
76
EXPECT_EQ(attachdb("filename", nullptr, "attach name", SQLITE_OPEN_READONLY, 0), nullptr);
85
77
EXPECT_EQ(attachdb("filename", nullptr, "attach name", SQLITE_OPEN_READONLY, 1), nullptr);
@@ -184,8 +176,9 @@ TEST(addqueryfuncs, path) {
184
176
ASSERT_NE(db, nullptr);
185
177
ASSERT_EQ(addqueryfuncs_with_context(db, &work), 0);
186
178
187
- char output[MAXPATH] = {};
188
- EXPECT_EQ(sqlite3_exec(db, "SELECT path();", str_output, output, nullptr), SQLITE_OK);
179
+ char buf[MAXPATH] = {};
180
+ char *output = buf;
181
+ EXPECT_EQ(sqlite3_exec(db, "SELECT path();", copy_columns_callback, &output, nullptr), SQLITE_OK);
189
182
190
183
EXPECT_STREQ(output, work.name);
191
184
@@ -207,8 +200,9 @@ TEST(addqueryfuncs, epath) {
207
200
ASSERT_NE(db, nullptr);
208
201
ASSERT_EQ(addqueryfuncs_with_context(db, &work), 0);
209
202
210
- char output[MAXPATH] = {};
211
- EXPECT_EQ(sqlite3_exec(db, "SELECT epath();", str_output, output, nullptr), SQLITE_OK);
203
+ char buf[MAXPATH] = {};
204
+ char *output = buf;
205
+ EXPECT_EQ(sqlite3_exec(db, "SELECT epath();", copy_columns_callback, &output, nullptr), SQLITE_OK);
212
206
213
207
EXPECT_STREQ(output, dirname);
214
208
@@ -224,7 +218,7 @@ TEST(addqueryfuncs, fpath) {
224
218
ASSERT_EQ(sqlite3_open(":memory:", &db), SQLITE_OK);
225
219
ASSERT_NE(db, nullptr);
226
220
ASSERT_EQ(addqueryfuncs_with_context(db, &work), 0);
227
- EXPECT_EQ(sqlite3_exec(db, "SELECT fpath();", str_output, &work , nullptr), SQLITE_OK);
221
+ EXPECT_EQ(sqlite3_exec(db, "SELECT fpath();", nullptr, nullptr , nullptr), SQLITE_OK);
228
222
EXPECT_NE(work.fullpath, nullptr);
229
223
EXPECT_GT(work.fullpath_len, (size_t) 0);
230
224
@@ -233,7 +227,7 @@ TEST(addqueryfuncs, fpath) {
233
227
const size_t fullpath_len = work.fullpath_len;
234
228
235
229
// call again - should not update fullpath
236
- EXPECT_EQ(sqlite3_exec(db, "SELECT fpath();", str_output, &work , nullptr), SQLITE_OK);
230
+ EXPECT_EQ(sqlite3_exec(db, "SELECT fpath();", nullptr, nullptr , nullptr), SQLITE_OK);
237
231
EXPECT_EQ(work.fullpath, fullpath);
238
232
EXPECT_EQ(work.fullpath_len, fullpath_len);
239
233
@@ -264,8 +258,9 @@ TEST(addqueryfuncs, rpath) {
264
258
SNPRINTF(query, MAXSQL, "SELECT rpath('%s', %d);", dirname, rollupscore);
265
259
266
260
// the path returned by the query is the path without the index prefix
267
- char output[MAXPATH] = {};
268
- EXPECT_EQ(sqlite3_exec(db, query, str_output, output, nullptr), SQLITE_OK);
261
+ char buf[MAXPATH] = {};
262
+ char *output = buf;
263
+ EXPECT_EQ(sqlite3_exec(db, query, copy_columns_callback, &output, nullptr), SQLITE_OK);
269
264
270
265
EXPECT_STREQ(output, work.name);
271
266
}
@@ -280,8 +275,8 @@ TEST(addqueryfuncs, uidtouser) {
280
275
struct passwd pwd;
281
276
struct passwd *result = nullptr;
282
277
283
- char buf [MAXPATH] = {};
284
- ASSERT_EQ(getpwuid_r(uid, &pwd, buf, MAXPATH , &result), 0);
278
+ char ubuf [MAXPATH] = {};
279
+ ASSERT_EQ(getpwuid_r(uid, &pwd, ubuf, sizeof(ubuf) , &result), 0);
285
280
ASSERT_EQ(result, &pwd);
286
281
287
282
sqlite3 *db = nullptr;
@@ -294,8 +289,9 @@ TEST(addqueryfuncs, uidtouser) {
294
289
char query[MAXSQL] = {};
295
290
SNPRINTF(query, MAXSQL, "SELECT uidtouser('%d')", uid);
296
291
297
- char output[MAXPATH] = {};
298
- ASSERT_EQ(sqlite3_exec(db, query, str_output, output, nullptr), SQLITE_OK);
292
+ char buf[MAXPATH] = {};
293
+ char *output = buf;
294
+ ASSERT_EQ(sqlite3_exec(db, query, copy_columns_callback, &output, nullptr), SQLITE_OK);
299
295
300
296
EXPECT_STREQ(output, pwd.pw_name);
301
297
@@ -309,8 +305,8 @@ TEST(addqueryfuncs, gidtogroup) {
309
305
struct group grp;
310
306
struct group *result = nullptr;
311
307
312
- char buf [MAXPATH] = {};
313
- ASSERT_EQ(getgrgid_r(gid, &grp, buf, MAXPATH , &result), 0);
308
+ char gbuf [MAXPATH] = {};
309
+ ASSERT_EQ(getgrgid_r(gid, &grp, gbuf, sizeof(gbuf) , &result), 0);
314
310
ASSERT_EQ(result, &grp);
315
311
316
312
sqlite3 *db = nullptr;
@@ -323,8 +319,9 @@ TEST(addqueryfuncs, gidtogroup) {
323
319
char query[MAXSQL] = {};
324
320
SNPRINTF(query, MAXSQL, "SELECT gidtogroup('%d')", gid);
325
321
326
- char output[MAXPATH] = {};
327
- ASSERT_EQ(sqlite3_exec(db, query, str_output, output, nullptr), SQLITE_OK);
322
+ char buf[MAXPATH] = {};
323
+ char *output = buf;
324
+ ASSERT_EQ(sqlite3_exec(db, query, copy_columns_callback, &output, nullptr), SQLITE_OK);
328
325
329
326
EXPECT_STREQ(output, grp.gr_name);
330
327
@@ -340,17 +337,18 @@ TEST(addqueryfuncs, modetotxt) {
340
337
341
338
for(mode_t perm = 0; perm < 01000; perm++) {
342
339
char query[MAXSQL] = {};
343
- char output[11] = {};
340
+ char buf[11] = {};
341
+ char *output = buf;
344
342
char expected[11] = {};
345
343
346
344
// file
347
345
SNPRINTF(query, MAXSQL, "SELECT modetotxt(%zu)", (size_t) perm);
348
- ASSERT_EQ(sqlite3_exec(db, query, str_output, output, nullptr), SQLITE_OK);
346
+ ASSERT_EQ(sqlite3_exec(db, query, copy_columns_callback, & output, nullptr), SQLITE_OK);
349
347
EXPECT_STREQ(output, modetostr(expected, 11, perm));
350
348
351
349
// directory
352
350
SNPRINTF(query, MAXSQL, "SELECT modetotxt(%zu)", perm | S_IFDIR);
353
- ASSERT_EQ(sqlite3_exec(db, query, str_output, output, nullptr), SQLITE_OK);
351
+ ASSERT_EQ(sqlite3_exec(db, query, copy_columns_callback, & output, nullptr), SQLITE_OK);
354
352
EXPECT_STREQ(output, modetostr(expected, 11, perm | S_IFDIR));
355
353
}
356
354
@@ -371,8 +369,9 @@ TEST(addqueryfuncs, strftime) {
371
369
char query[MAXSQL] = {};
372
370
SNPRINTF(query, MAXSQL, "SELECT strftime('%s', %d)", fmt, (int) now);
373
371
374
- char output[MAXPATH] = {};
375
- ASSERT_EQ(sqlite3_exec(db, query, str_output, output, nullptr), SQLITE_OK);
372
+ char buf[MAXPATH] = {};
373
+ char *output = buf;
374
+ ASSERT_EQ(sqlite3_exec(db, query, copy_columns_callback, &output, nullptr), SQLITE_OK);
376
375
377
376
char expected[MAXSQL] = {};
378
377
struct tm tm;
@@ -421,37 +420,38 @@ TEST(addqueryfuncs, blocksize) {
421
420
422
421
for(size_t j = 0; j < 3; j++) {
423
422
char query[MAXSQL] = {};
424
- char output[MAXPATH] = {};
423
+ char buf[MAXPATH] = {};
424
+ char *output = buf;
425
425
char expected[MAXPATH] = {};
426
426
427
427
SNPRINTF(query, MAXSQL, "SELECT blocksize(%zu, '%c')", iBinputs[j], SIZE[i]);
428
- ASSERT_EQ(sqlite3_exec(db, query, str_output, output, nullptr), SQLITE_OK);
428
+ ASSERT_EQ(sqlite3_exec(db, query, copy_columns_callback, & output, nullptr), SQLITE_OK);
429
429
SNPRINTF(expected, MAXPATH, "%c%c", expecteds[j], SIZE[i]);
430
430
EXPECT_STREQ(output, expected);
431
431
432
432
SNPRINTF(query, MAXSQL, "SELECT blocksize(%zu, '%cB')", Binputs[j], SIZE[i]);
433
- ASSERT_EQ(sqlite3_exec(db, query, str_output, output, nullptr), SQLITE_OK);
433
+ ASSERT_EQ(sqlite3_exec(db, query, copy_columns_callback, & output, nullptr), SQLITE_OK);
434
434
SNPRINTF(expected, MAXPATH, "%c%cB", expecteds[j], SIZE[i]);
435
435
EXPECT_STREQ(output, expected);
436
436
437
437
SNPRINTF(query, MAXSQL, "SELECT blocksize(%zu, '%ciB')", iBinputs[j], SIZE[i]);
438
- ASSERT_EQ(sqlite3_exec(db, query, str_output, output, nullptr), SQLITE_OK);
438
+ ASSERT_EQ(sqlite3_exec(db, query, copy_columns_callback, & output, nullptr), SQLITE_OK);
439
439
SNPRINTF(expected, MAXPATH, "%c%ciB", expecteds[j], SIZE[i]);
440
440
EXPECT_STREQ(output, expected);
441
441
}
442
442
}
443
443
444
- ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize('', '')", str_output , nullptr, nullptr), SQLITE_ERROR); /* non-integer size argument */
445
- ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize('abc', '')", str_output , nullptr, nullptr), SQLITE_ERROR); /* missing size argument */
446
- ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, 'i')", str_output , nullptr, nullptr), SQLITE_ERROR); /* single bad character */
447
- ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, 'iB')", str_output , nullptr, nullptr), SQLITE_ERROR); /* 1st character isn't valid */
448
- ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, 'ij')", str_output , nullptr, nullptr), SQLITE_ERROR); /* 2nd character isn't B */
449
- ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, 'AiB')", str_output , nullptr, nullptr), SQLITE_ERROR); /* 1st character isn't valid */
450
- ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, 'AjB')", str_output , nullptr, nullptr), SQLITE_ERROR); /* 2nd character isn't i */
451
- ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, 'Aij')", str_output , nullptr, nullptr), SQLITE_ERROR); /* 3nd character isn't B */
452
- ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, '0KB')", str_output , nullptr, nullptr), SQLITE_ERROR); /* block coefficient is 0 */
453
- ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, '1.2KiB')", str_output , nullptr, nullptr), SQLITE_ERROR); /* decimal point is not allowed */
454
- ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, 'KiBGiB')", str_output , nullptr, nullptr), SQLITE_ERROR); /* suffix is too long */
444
+ ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize('', '')", copy_columns_callback , nullptr, nullptr), SQLITE_ERROR); /* non-integer size argument */
445
+ ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize('abc', '')", copy_columns_callback , nullptr, nullptr), SQLITE_ERROR); /* missing size argument */
446
+ ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, 'i')", copy_columns_callback , nullptr, nullptr), SQLITE_ERROR); /* single bad character */
447
+ ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, 'iB')", copy_columns_callback , nullptr, nullptr), SQLITE_ERROR); /* 1st character isn't valid */
448
+ ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, 'ij')", copy_columns_callback , nullptr, nullptr), SQLITE_ERROR); /* 2nd character isn't B */
449
+ ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, 'AiB')", copy_columns_callback , nullptr, nullptr), SQLITE_ERROR); /* 1st character isn't valid */
450
+ ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, 'AjB')", copy_columns_callback , nullptr, nullptr), SQLITE_ERROR); /* 2nd character isn't i */
451
+ ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, 'Aij')", copy_columns_callback , nullptr, nullptr), SQLITE_ERROR); /* 3nd character isn't B */
452
+ ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, '0KB')", copy_columns_callback , nullptr, nullptr), SQLITE_ERROR); /* block coefficient is 0 */
453
+ ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, '1.2KiB')", copy_columns_callback , nullptr, nullptr), SQLITE_ERROR); /* decimal point is not allowed */
454
+ ASSERT_EQ(sqlite3_exec(db, "SELECT blocksize(0, 'KiBGiB')", copy_columns_callback , nullptr, nullptr), SQLITE_ERROR); /* suffix is too long */
455
455
456
456
sqlite3_close(db);
457
457
}
@@ -464,12 +464,13 @@ TEST(addqueryfuncs, human_readable_size) {
464
464
ASSERT_EQ(addqueryfuncs(db), 0);
465
465
466
466
char query[MAXSQL] = {};
467
- char output[MAXPATH] = {};
467
+ char buf[MAXPATH] = {};
468
+ char *output = buf;
468
469
469
470
size_t size = 1;
470
471
471
472
SNPRINTF(query, MAXSQL, "SELECT human_readable_size(%zu);", size);
472
- ASSERT_EQ(sqlite3_exec(db, query, str_output, output, nullptr), SQLITE_OK);
473
+ ASSERT_EQ(sqlite3_exec(db, query, copy_columns_callback, & output, nullptr), SQLITE_OK);
473
474
EXPECT_STREQ(output, "1.0");
474
475
475
476
// greater than 1K - has unit suffix
@@ -479,13 +480,13 @@ TEST(addqueryfuncs, human_readable_size) {
479
480
size *= 1024;
480
481
481
482
SNPRINTF(query, MAXSQL, "SELECT human_readable_size(%zu);", size + (size / 10));
482
- ASSERT_EQ(sqlite3_exec(db, query, str_output, output, nullptr), SQLITE_OK);
483
+ ASSERT_EQ(sqlite3_exec(db, query, copy_columns_callback, & output, nullptr), SQLITE_OK);
483
484
SNPRINTF(expected, MAXPATH, "1.1%c", SIZE[i]);
484
485
EXPECT_STREQ(output, expected);
485
486
}
486
487
487
- ASSERT_EQ(sqlite3_exec(db, "SELECT human_readable_size('');", str_output , nullptr, nullptr), SQLITE_ERROR); /* empty input */
488
- ASSERT_EQ(sqlite3_exec(db, "SELECT human_readable_size('abc');", str_output , nullptr, nullptr), SQLITE_ERROR); /* non-integer input */
488
+ ASSERT_EQ(sqlite3_exec(db, "SELECT human_readable_size('');", copy_columns_callback , nullptr, nullptr), SQLITE_ERROR); /* empty input */
489
+ ASSERT_EQ(sqlite3_exec(db, "SELECT human_readable_size('abc');", copy_columns_callback , nullptr, nullptr), SQLITE_ERROR); /* non-integer input */
489
490
490
491
sqlite3_close(db);
491
492
}
@@ -501,8 +502,9 @@ TEST(addqueryfuncs, level) {
501
502
for(work.level = 0; work.level < 10; work.level++) {
502
503
ASSERT_EQ(addqueryfuncs_with_context(db, &work), 0);
503
504
504
- char output[MAXPATH] = {};
505
- ASSERT_EQ(sqlite3_exec(db, "SELECT level()", str_output, output, nullptr), SQLITE_OK);
505
+ char buf[MAXPATH] = {};
506
+ char *output = buf;
507
+ ASSERT_EQ(sqlite3_exec(db, "SELECT level()", copy_columns_callback, &output, nullptr), SQLITE_OK);
506
508
507
509
char expected[MAXPATH] = {};
508
510
SNPRINTF(expected, MAXPATH, "%zu", work.level);
@@ -525,8 +527,9 @@ TEST(addqueryfuncs, starting_point) {
525
527
526
528
ASSERT_EQ(addqueryfuncs_with_context(db, &work), 0);
527
529
528
- char output[MAXPATH] = {};
529
- ASSERT_EQ(sqlite3_exec(db, "SELECT starting_point()", str_output, output, nullptr), SQLITE_OK);
530
+ char buf[MAXPATH] = {};
531
+ char *output = buf;
532
+ ASSERT_EQ(sqlite3_exec(db, "SELECT starting_point()", copy_columns_callback, &output, nullptr), SQLITE_OK);
530
533
531
534
EXPECT_STREQ(output, work.orig_root.data);
532
535
@@ -540,31 +543,32 @@ TEST(addqueryfuncs, basename) {
540
543
541
544
ASSERT_EQ(addqueryfuncs(db), 0);
542
545
543
- char output[MAXPATH] = {};
546
+ char buf[MAXPATH] = {};
547
+ char *output = buf;
544
548
545
549
/* from basename(3) manpage */
546
550
547
- ASSERT_EQ(sqlite3_exec(db, "SELECT basename('/usr/lib')", str_output, output, nullptr), SQLITE_OK);
551
+ ASSERT_EQ(sqlite3_exec(db, "SELECT basename('/usr/lib')", copy_columns_callback, & output, nullptr), SQLITE_OK);
548
552
EXPECT_STREQ(output, "lib");
549
553
550
- ASSERT_EQ(sqlite3_exec(db, "SELECT basename('/usr/')", str_output, output, nullptr), SQLITE_OK);
554
+ ASSERT_EQ(sqlite3_exec(db, "SELECT basename('/usr/')", copy_columns_callback, & output, nullptr), SQLITE_OK);
551
555
EXPECT_STREQ(output, "usr");
552
556
553
- ASSERT_EQ(sqlite3_exec(db, "SELECT basename('usr')", str_output, output, nullptr), SQLITE_OK);
557
+ ASSERT_EQ(sqlite3_exec(db, "SELECT basename('usr')", copy_columns_callback, & output, nullptr), SQLITE_OK);
554
558
EXPECT_STREQ(output, "usr");
555
559
556
- ASSERT_EQ(sqlite3_exec(db, "SELECT basename('/')", str_output, output, nullptr), SQLITE_OK);
560
+ ASSERT_EQ(sqlite3_exec(db, "SELECT basename('/')", copy_columns_callback, & output, nullptr), SQLITE_OK);
557
561
EXPECT_STREQ(output, "/");
558
562
559
- ASSERT_EQ(sqlite3_exec(db, "SELECT basename('.')", str_output, output, nullptr), SQLITE_OK);
563
+ ASSERT_EQ(sqlite3_exec(db, "SELECT basename('.')", copy_columns_callback, & output, nullptr), SQLITE_OK);
560
564
EXPECT_STREQ(output, ".");
561
565
562
- ASSERT_EQ(sqlite3_exec(db, "SELECT basename('..')", str_output, output, nullptr), SQLITE_OK);
566
+ ASSERT_EQ(sqlite3_exec(db, "SELECT basename('..')", copy_columns_callback, & output, nullptr), SQLITE_OK);
563
567
EXPECT_STREQ(output, "..");
564
568
565
569
/* not from manpage */
566
570
567
- ASSERT_EQ(sqlite3_exec(db, "SELECT basename(NULL)", str_output, output, nullptr), SQLITE_OK);
571
+ ASSERT_EQ(sqlite3_exec(db, "SELECT basename(NULL)", copy_columns_callback, & output, nullptr), SQLITE_OK);
568
572
EXPECT_STREQ(output, "");
569
573
570
574
sqlite3_close(db);
0 commit comments