Mail: Reworking of the unique filename discovery (drafts)

This commit is contained in:
Philippe Saint-Pierre 2012-12-12 21:49:20 -05:00
parent 55ef15c45a
commit 53b234eb1c
1 changed files with 15 additions and 8 deletions

View File

@ -2548,11 +2548,11 @@ TMailWindow::SaveAsDraft()
return status;
case B_OK:
{
char fileName[B_FILE_NAME_LENGTH], *eofn;
char fileName[B_FILE_NAME_LENGTH];
// save as some version of the message's subject
strlcpy(fileName, fHeaderView->fSubject->Text(),
sizeof(fileName));
eofn = fileName + strlen(fileName);
uint32 originalLength = strlen(fileName);
// convert /, \ and : to -
for (char *bad = fileName; (bad = strchr(bad, '/')) != NULL;
@ -2564,12 +2564,19 @@ TMailWindow::SaveAsDraft()
// Create the file; if the name exists, find a unique name
flags = B_WRITE_ONLY | B_CREATE_FILE | B_FAIL_IF_EXISTS;
for (int32 i = 1; (status = draft.SetTo(&dir, fileName, flags))
!= B_OK; i++) {
if (status != B_FILE_EXISTS)
return status;
sprintf(eofn, "%ld", i);
}
int32 i = 1;
do {
status = draft.SetTo(&dir, fileName, flags);
if (status == B_OK)
break;
char appendix[B_FILE_NAME_LENGTH];
sprintf(appendix, " %ld", i++);
int32 pos = min_c(sizeof(fileName) - strlen(appendix),
originalLength);
sprintf(fileName + pos, "%s", appendix);
} while (status == B_FILE_EXISTS);
if (status != B_OK)
return status;
// Cache the ref
if (fRef == NULL)