diff options
Diffstat (limited to 'maildir/maildircreate.c')
| -rw-r--r-- | maildir/maildircreate.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/maildir/maildircreate.c b/maildir/maildircreate.c index 5efc0af..b0c8e01 100644 --- a/maildir/maildircreate.c +++ b/maildir/maildircreate.c @@ -178,10 +178,26 @@ static int maildir_tmpcreate_fd_do(struct maildir_tmpcreate_info *info) if (info->newname) free(info->newname); + info->newname=NULL; + + if (info->curname) + free(info->curname); + info->curname=NULL; info->newname=malloc(strlen(info->tmpname)+strlen(ino_buf)+ strlen(dev_buf)+3); + if (info->newname) + { + info->curname=malloc(strlen(info->tmpname)+strlen(ino_buf)+ + strlen(dev_buf)+3); + if (!info->curname) + { + free(info->newname); + info->newname=NULL; + } + } + if (!info->newname) { maildir_tmpcreate_free(info); @@ -209,6 +225,9 @@ static int maildir_tmpcreate_fd_do(struct maildir_tmpcreate_info *info) strcat(info->newname, hostname); strcat(info->newname, len_buf); + strcpy(info->curname, info->newname); + memcpy(info->curname + strlen(maildir)+1, "cur", 3); + return fd; } @@ -221,6 +240,10 @@ void maildir_tmpcreate_free(struct maildir_tmpcreate_info *info) if (info->newname) free(info->newname); info->newname=NULL; + + if (info->curname) + free(info->curname); + info->curname=NULL; } int maildir_movetmpnew(const char *tmpname, const char *newname) |
