// Create files table
r = pakfire_db_execute(db,
"CREATE TABLE IF NOT EXISTS files("
- "id INTEGER PRIMARY KEY, "
- "path TEXT, "
- "pkg INTEGER, "
- "size INTEGER, "
- "config INTEGER, "
- "datafile INTEGER, "
- "mode INTEGER, "
- "user TEXT, "
- "'group' TEXT, "
- "ctime INTEGER, "
- "mtime INTEGER, "
- "capabilities TEXT, "
- "digest_sha512 BLOB, "
- "digest_sha256 BLOB, "
+ "id INTEGER PRIMARY KEY, "
+ "path TEXT, "
+ "pkg INTEGER, "
+ "size INTEGER, "
+ "config INTEGER, "
+ "datafile INTEGER, "
+ "mode INTEGER, "
+ "user TEXT, "
+ "'group' TEXT, "
+ "ctime INTEGER, "
+ "mtime INTEGER, "
+ "capabilities TEXT, "
+ "digest_sha2_512 BLOB, "
+ "digest_sha2_256 BLOB, "
+ "digest_blake2b512 BLOB, "
+ "digest_blake2s256 BLOB, "
+ "digest_sha3_512 BLOB, "
+ "digest_sha3_256 BLOB, "
"FOREIGN KEY (pkg) REFERENCES packages(id) ON DELETE CASCADE"
")");
if (r)
return r;
}
+static int pakfire_db_bind_digest(struct pakfire_db* db, sqlite3_stmt* stmt, const int field,
+ struct pakfire_file* file, const enum pakfire_digest_types type) {
+ const unsigned char* digest = NULL;
+ size_t length = 0;
+
+ // Fetch the digest
+ digest = pakfire_file_get_digest(file, type, &length);
+
+ // If this digest isn't set, just bind NULL
+ if (!digest)
+ return sqlite3_bind_null(stmt, field);
+
+ // Otherwise bind the data blob
+ return sqlite3_bind_blob(stmt, field, digest, length, NULL);
+}
+
static int pakfire_db_add_files(struct pakfire_db* db, unsigned long id, struct pakfire_archive* archive) {
sqlite3_stmt* stmt = NULL;
int r = 1;
goto END;
}
- const char* sql = "INSERT INTO files(pkg, path, size, config, datafile, mode, "
- "user, 'group', ctime, mtime, capabilities, digest_sha512, digest_sha256) "
- "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+ const char* sql =
+ "INSERT INTO "
+ " files("
+ "pkg, "
+ "path, "
+ "size, "
+ "config, "
+ "datafile, "
+ "mode, "
+ "user, "
+ "'group', "
+ "ctime, "
+ "mtime, "
+ "capabilities, "
+ "digest_sha2_512, "
+ "digest_sha2_256, "
+ "digest_blake2b512, "
+ "digest_blake2s256, "
+ "digest_sha3_512, "
+ "digest_sha3_256"
+ ") "
+ "VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
// Prepare the statement
r = sqlite3_prepare_v2(db->handle, sql, strlen(sql), &stmt, NULL);
goto END;
}
- const unsigned char* sha512_digest = NULL;
- size_t sha512_length = 0;
+ // SHA2-512 Digest
+ r = pakfire_db_bind_digest(db, stmt, 12, file, PAKFIRE_DIGEST_SHA2_512);
+ if (r) {
+ ERROR(db->pakfire, "Could not bind SHA2-512 digest: %s\n",
+ sqlite3_errmsg(db->handle));
+ pakfire_file_unref(file);
+ goto END;
+ }
- // SHA-512 Digest
- sha512_digest = pakfire_file_get_digest(file, PAKFIRE_DIGEST_SHA2_512, &sha512_length);
- if (sha512_digest) {
- r = sqlite3_bind_blob(stmt, 12, sha512_digest, sha512_length, NULL);
- } else {
- r = sqlite3_bind_null(stmt, 12);
+ // SHA2-256 Digest
+ r = pakfire_db_bind_digest(db, stmt, 13, file, PAKFIRE_DIGEST_SHA2_256);
+ if (r) {
+ ERROR(db->pakfire, "Could not bind SHA2-256 digest: %s\n",
+ sqlite3_errmsg(db->handle));
+ pakfire_file_unref(file);
+ goto END;
}
+
+ // BLAKE2b512 Digest
+ r = pakfire_db_bind_digest(db, stmt, 14, file, PAKFIRE_DIGEST_BLAKE2B512);
if (r) {
- ERROR(db->pakfire, "Could not bind SHA-512 digest: %s\n",
+ ERROR(db->pakfire, "Could not bind BLAKE2b512 digest: %s\n",
sqlite3_errmsg(db->handle));
pakfire_file_unref(file);
goto END;
}
- const unsigned char* sha256_digest = NULL;
- size_t sha256_length = 0;
+ // BLAKE2s256 Digest
+ r = pakfire_db_bind_digest(db, stmt, 15, file, PAKFIRE_DIGEST_BLAKE2S256);
+ if (r) {
+ ERROR(db->pakfire, "Could not bind BLAKE2s256 digest: %s\n",
+ sqlite3_errmsg(db->handle));
+ pakfire_file_unref(file);
+ goto END;
+ }
- // SHA-256 Digest
- sha256_digest = pakfire_file_get_digest(file, PAKFIRE_DIGEST_SHA2_256, &sha256_length);
- if (sha256_digest) {
- r = sqlite3_bind_blob(stmt, 13, sha256_digest, sha256_length, NULL);
- } else {
- r = sqlite3_bind_null(stmt, 13);
+ // SHA3-512 Digest
+ r = pakfire_db_bind_digest(db, stmt, 16, file, PAKFIRE_DIGEST_SHA3_512);
+ if (r) {
+ ERROR(db->pakfire, "Could not bind SHA3-512 digest: %s\n",
+ sqlite3_errmsg(db->handle));
+ pakfire_file_unref(file);
+ goto END;
}
+
+ // SHA3-256 Digest
+ r = pakfire_db_bind_digest(db, stmt, 17, file, PAKFIRE_DIGEST_SHA3_256);
if (r) {
- ERROR(db->pakfire, "Could not bind SHA-256 digest: %s\n",
+ ERROR(db->pakfire, "Could not bind SHA3-256 digest: %s\n",
sqlite3_errmsg(db->handle));
pakfire_file_unref(file);
goto END;
if (mtime)
pakfire_file_set_mtime(file, mtime);
- // SHA-512 Digest
+ // SHA2-512 Digest
r = pakfire_db_load_file_digest(db, file, stmt, PAKFIRE_DIGEST_SHA2_512, 7);
if (r)
goto ERROR;
- // SHA-256 Digest
+ // SHA2-256 Digest
r = pakfire_db_load_file_digest(db, file, stmt, PAKFIRE_DIGEST_SHA2_256, 8);
if (r)
goto ERROR;
+ // BLAKE2b512 Digest
+ r = pakfire_db_load_file_digest(db, file, stmt, PAKFIRE_DIGEST_BLAKE2B512, 9);
+ if (r)
+ goto ERROR;
+
+ // BLAKE2s256 Digest
+ r = pakfire_db_load_file_digest(db, file, stmt, PAKFIRE_DIGEST_BLAKE2S256, 10);
+ if (r)
+ goto ERROR;
+
+ // SHA3-512 Digest
+ r = pakfire_db_load_file_digest(db, file, stmt, PAKFIRE_DIGEST_SHA3_512, 11);
+ if (r)
+ goto ERROR;
+
+ // SHA3-256 Digest
+ r = pakfire_db_load_file_digest(db, file, stmt, PAKFIRE_DIGEST_SHA3_256, 12);
+ if (r)
+ goto ERROR;
+
// Append the file to the filelist
r = pakfire_filelist_append(filelist, file);
if (r)
"'group', "
"ctime, "
"mtime, "
- "digest_sha512, "
- "digest_sha256 "
+ "digest_sha2_512, "
+ "digest_sha2_256, "
+ "digest_blake2b512, "
+ "digest_blake2s256, "
+ "digest_sha3_512, "
+ "digest_sha3_256 "
"FROM files "
"ORDER BY path"
";";