mirror of
https://github.com/Tha14/toxic.git
synced 2024-11-22 14:53:02 +01:00
Make sure we check for duplicate paths in pending file transfers list
This fixes a bug where if you receive multiple file transfer requests simultaneously and they have the same path the files will overwrite each other
This commit is contained in:
parent
ceb175e3f1
commit
05dbc626e2
@ -676,8 +676,10 @@ static void chat_onFileRecv(ToxWindow *self, Tox *m, uint32_t friendnum, uint32_
|
|||||||
FILE *filecheck = NULL;
|
FILE *filecheck = NULL;
|
||||||
int count = 1;
|
int count = 1;
|
||||||
|
|
||||||
while ((filecheck = fopen(file_path, "r"))) {
|
while ((filecheck = fopen(file_path, "r")) || file_transfer_recv_path_exists(file_path)) {
|
||||||
fclose(filecheck);
|
if (filecheck) {
|
||||||
|
fclose(filecheck);
|
||||||
|
}
|
||||||
|
|
||||||
file_path[path_len] = '\0';
|
file_path[path_len] = '\0';
|
||||||
char d[5];
|
char d[5];
|
||||||
|
@ -45,9 +45,8 @@ extern FriendsList Friends;
|
|||||||
void init_progress_bar(char *progline)
|
void init_progress_bar(char *progline)
|
||||||
{
|
{
|
||||||
strcpy(progline, "0% [");
|
strcpy(progline, "0% [");
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < NUM_PROG_MARKS; ++i) {
|
for (size_t i = 0; i < NUM_PROG_MARKS; ++i) {
|
||||||
strcat(progline, "-");
|
strcat(progline, "-");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -397,3 +396,26 @@ void kill_all_file_transfers(Tox *m)
|
|||||||
kill_all_file_transfers_friend(m, Friends.list[i].num);
|
kill_all_file_transfers_friend(m, Friends.list[i].num);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool file_transfer_recv_path_exists(const char *path)
|
||||||
|
{
|
||||||
|
for (size_t friendnumber = 0; friendnumber < Friends.max_idx; ++friendnumber) {
|
||||||
|
if (!Friends.list[friendnumber].active) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i = 0; i < MAX_FILES; ++i) {
|
||||||
|
FileTransfer *ft = &Friends.list[friendnumber].file_receiver[i];
|
||||||
|
|
||||||
|
if (ft->state == FILE_TRANSFER_INACTIVE) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(path, ft->file_path) == 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
@ -145,4 +145,7 @@ void kill_all_file_transfers_friend(Tox *m, uint32_t friendnumber);
|
|||||||
|
|
||||||
void kill_all_file_transfers(Tox *m);
|
void kill_all_file_transfers(Tox *m);
|
||||||
|
|
||||||
|
/* Return true if any pending or active file receiver has the path `path`. */
|
||||||
|
bool file_transfer_recv_path_exists(const char *path);
|
||||||
|
|
||||||
#endif /* FILE_TRANSFERS_H */
|
#endif /* FILE_TRANSFERS_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user