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:
parent
daccee387a
commit
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)
|
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)
|
if (!lk->active)
|
||||||
die("BUG: attempt to commit unlocked object");
|
die("BUG: attempt to commit unlocked object");
|
||||||
@ -327,11 +328,12 @@ int commit_lock_file(struct lock_file *lk)
|
|||||||
if (close_lock_file(lk))
|
if (close_lock_file(lk))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
strcpy(result_file, lk->filename);
|
|
||||||
/* remove ".lock": */
|
/* remove ".lock": */
|
||||||
result_file[strlen(result_file) - LOCK_SUFFIX_LEN] = 0;
|
strbuf_add(&result_file, lk->filename,
|
||||||
|
strlen(lk->filename) - LOCK_SUFFIX_LEN);
|
||||||
if (rename(lk->filename, result_file)) {
|
err = rename(lk->filename, result_file.buf);
|
||||||
|
strbuf_reset(&result_file);
|
||||||
|
if (err) {
|
||||||
int save_errno = errno;
|
int save_errno = errno;
|
||||||
rollback_lock_file(lk);
|
rollback_lock_file(lk);
|
||||||
errno = save_errno;
|
errno = save_errno;
|
||||||
|
Loading…
Reference in New Issue
Block a user