diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index fa43067..c5ad379 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -44,7 +44,10 @@ target_link_libraries(distromatic ${LIBIBERTY} ) target_include_directories(distromatic PUBLIC ${RPM_INCLUDE_DIRS}) -target_compile_options(distromatic PUBLIC -O2 -g -Wall -std=gnu11 -pedantic ${RPM_CFLAGS_OTHER}) +# +# NOTE: -fno-toplevel-reorder required to prevent Sqlite3 weird problems +# +target_compile_options(distromatic PUBLIC -O2 -fno-toplevel-reorder -g -Wall -std=gnu11 -pedantic ${RPM_CFLAGS_OTHER}) add_executable(distroquery distroquery.c diff --git a/src/backend-sqlite3.c b/src/backend-sqlite3.c index b956139..3c3edd6 100644 --- a/src/backend-sqlite3.c +++ b/src/backend-sqlite3.c @@ -216,8 +216,7 @@ int generateSQLite_provided(struct configTag* ct, sqlite3 *db, int arch) { struct providedList* provided; int i, thisrep; - snprintf(sqlite3_query, PATH_MAX, "provided"); - SQLite_init_table(db, sqlite3_query, SQLITE_TABLE_provided); + SQLite_init_table(db, "provided", SQLITE_TABLE_provided); SQLite_begin_transaction(db); provided = ct->providedlist_idx[arch][0]; @@ -231,17 +230,20 @@ int generateSQLite_provided(struct configTag* ct, sqlite3 *db, int arch) { } } if (thisrep) { - snprintf(sqlite3_query, PATH_MAX, "INSERT INTO provided VALUES(%ld,?,%ld,%d);", + snprintf(sqlite3_query, PATH_MAX, "INSERT INTO provided VALUES(%ld,?,%ld,%d);", provided->id, provided->flags, provided->numproviders); - sqlite3_prepare_v2(db, sqlite3_query, -1, &stmt, NULL); - sqlite3_bind_text(stmt, 1, provided->name, -1, SQLITE_STATIC); - if (sqlite3_step(stmt) != SQLITE_DONE) { + if (sqlite3_prepare_v3(db, sqlite3_query, -1, 0, &stmt, NULL)) { + fprintf(stderr, "ERROR: sqlite3_prepare_v2: %s (%s)\n", sqlite3_errmsg(db), sqlite3_query); + return 1; + } + sqlite3_bind_text(stmt, 1, provided->name, -1, SQLITE_STATIC); + if (sqlite3_step(stmt) != SQLITE_DONE) { fprintf(stderr, "ERROR: SQLite: (%s) %s\n", sqlite3_query, sqlite3_errmsg(db)); - return 1; - } - sqlite3_finalize(stmt); + return 3; + } + sqlite3_finalize(stmt); } provided = provided->next; }