Remove file when error while saving the data in DB

This commit is contained in:
2026-07-28 13:18:11 +03:00
parent 7d965af68b
commit 8d4067ee8a
5 changed files with 22 additions and 42 deletions
+11 -9
View File
@@ -2,14 +2,12 @@
/* Copyright (c) 2026 Oleksandr Zhylin */
#include "session.h"
#include <client.h>
#include <file_p.h>
#include <main.h>
#include <user.h>
#include <utils.h>
#include <arpa/inet.h>
#include <client.h>
#include <db.h>
#include <fcntl.h>
#include <file_p.h>
#include <main.h>
#include <netinet/in.h>
#include <stdarg.h>
#include <stddef.h>
@@ -19,6 +17,8 @@
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>
#include <user.h>
#include <utils.h>
session *make_new_session(int fd, struct sockaddr_in *from, char *wm);
@@ -206,14 +206,16 @@ void perform_session_action(session *sess, char *line, server_data_t *s_d) {
case OP_UPLOAD_DESCRIPTION:
res = file_upload_description(sess, line, s_d);
if (res) {
if (db_save_file(sess)) {
if (db_save_file(sess->file, sess->uid)) {
session_send_string(sess, "File \"%s\" is saved!\04\n",
sess->file->name);
clear_file_from_sess(sess);
sess->state = OP_WAIT;
} else {
// TODO: error case
session_send_string(sess, "Error while saving the file %s!\04\n",
sess->file->name);
unlink(sess->file->path);
}
clear_file_from_sess(sess);
sess->state = OP_WAIT;
}
break;
case OP_DOWNLOAD_WAIT_CONFIRM_PACKAGE:
+1 -1
View File
@@ -47,7 +47,7 @@ typedef struct {
enum db_cb_resp { db_no_result, db_success, db_err, db_fail }; /* fail: the problem is on the user's side; no error */
int32_t init_db_connection();
int32_t db_save_file(session *s);
int32_t db_save_file(s_file_t *sfP, int uid);
int32_t db_user_auth(i_auth_t *credentials, o_auth_t *response);
s_file_t *db_get_file(i_get_file_db *arg);
int32_t db_get_files_data(i_get_files_db *arg, fl_t **fl_start,
+5 -6
View File
@@ -3,9 +3,7 @@
/* TODO: variadic function for preparing parameters */
#include "../main.h"
#include "../utils.h"
#include "db_common.h"
#include <main.h>
#include <db.h>
#include <endian.h>
#include <fcntl.h>
@@ -18,6 +16,8 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "utils.h"
#include "db_common.h"
#define UNUSED(x) (void)(x)
#define Q_LEN 128
@@ -198,15 +198,14 @@ int32_t db_user_create(i_db_user_create *args) {
return ret_value;
}
int32_t db_save_file(session *s) {
int32_t db_save_file(s_file_t *sf, int uid) {
const char *paramValues[6];
int paramFormats[6];
int paramLengths[6];
/* int collision_id = 0; */
s_file_t *sf = s->file;
char empty_str[] = "";
int32_t uid_n = htonl(s->uid);
int32_t uid_n = htonl(uid);
size_t size_n = htobe64(sf->size);
int32_t hash_n = htonl(sf->hash);
int32_t perm_n = htonl(sf->permissions);
+3 -4
View File
@@ -3,7 +3,6 @@
#include <main.h>
#include <utils.h>
#include "db_common.h"
#include <db.h>
#include <endian.h>
#include <openssl/sha.h>
@@ -16,6 +15,7 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "db_common.h"
#define UNUSED(x) (void)(x)
#define Q_LEN 128
@@ -284,8 +284,7 @@ enum db_cb_resp db_save_file_cb(sqlite3_stmt *stmt, void *resp) {
return res;
};
int32_t db_save_file(session *s) {
s_file_t *sfP = s->file;
int32_t db_save_file(s_file_t *sfP, int uid) {
struct db_save_file_data resp_data = {.id = 0};
const char empty_str[] = "";
enum db_cb_resp res = db_no_result;
@@ -296,7 +295,7 @@ int32_t db_save_file(session *s) {
"hash, description, permissions) "
"VALUES ($1, $2, $3, date(), $4, $5, $6) "
"RETURNING id",
db_save_file_cb, &resp_data, arg_types, s->uid, sfP->name,
db_save_file_cb, &resp_data, arg_types, uid, sfP->name,
sfP->size, sfP->hash,
sfP->description != NULL ? sfP->description : empty_str,
sfP->permissions);