зеркало из https://github.com/microsoft/git.git
commit_lock_file(): use a strbuf to manage temporary space
Avoid relying on the filename length restrictions that are currently checked by lock_file(). Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
daccee387a
Коммит
3e88e8fc08
12
lockfile.c
12
lockfile.c
|
@ -319,7 +319,8 @@ int reopen_lock_file(struct lock_file *lk)
|
|||
|
||||
int commit_lock_file(struct lock_file *lk)
|
||||
{
|
||||
char result_file[PATH_MAX];
|
||||
static struct strbuf result_file = STRBUF_INIT;
|
||||
int err;
|
||||
|
||||
if (!lk->active)
|
||||
die("BUG: attempt to commit unlocked object");
|
||||
|
@ -327,11 +328,12 @@ int commit_lock_file(struct lock_file *lk)
|
|||
if (close_lock_file(lk))
|
||||
return -1;
|
||||
|
||||
strcpy(result_file, lk->filename);
|
||||
/* remove ".lock": */
|
||||
result_file[strlen(result_file) - LOCK_SUFFIX_LEN] = 0;
|
||||
|
||||
if (rename(lk->filename, result_file)) {
|
||||
strbuf_add(&result_file, lk->filename,
|
||||
strlen(lk->filename) - LOCK_SUFFIX_LEN);
|
||||
err = rename(lk->filename, result_file.buf);
|
||||
strbuf_reset(&result_file);
|
||||
if (err) {
|
||||
int save_errno = errno;
|
||||
rollback_lock_file(lk);
|
||||
errno = save_errno;
|
||||
|
|
Загрузка…
Ссылка в новой задаче