2 * Copyright (c) 2005, Junio C Hamano
7 static struct lock_file
*lock_file_list
;
9 static void remove_lock_file(void)
11 while (lock_file_list
) {
12 if (lock_file_list
->filename
[0])
13 unlink(lock_file_list
->filename
);
14 lock_file_list
= lock_file_list
->next
;
18 static void remove_lock_file_on_signal(int signo
)
21 signal(SIGINT
, SIG_DFL
);
25 int hold_lock_file_for_update(struct lock_file
*lk
, const char *path
)
28 sprintf(lk
->filename
, "%s.lock", path
);
29 fd
= open(lk
->filename
, O_RDWR
| O_CREAT
| O_EXCL
, 0666);
30 if (fd
>=0 && !lk
->next
) {
31 lk
->next
= lock_file_list
;
33 signal(SIGINT
, remove_lock_file_on_signal
);
34 atexit(remove_lock_file
);
39 int commit_lock_file(struct lock_file
*lk
)
41 char result_file
[PATH_MAX
];
43 strcpy(result_file
, lk
->filename
);
44 i
= strlen(result_file
) - 5; /* .lock */
46 i
= rename(lk
->filename
, result_file
);
51 void rollback_lock_file(struct lock_file
*lk
)