Browse Source
The framework to create lockfiles that are removed at exit is first used to reliably write the index file, but it is applicable to other things, so stop calling it "cache_file". This also rewords a few remaining error message that called the index file "cache file". Signed-off-by: Junio C Hamano <junkio@cox.net>maint
Junio C Hamano
19 years ago
11 changed files with 98 additions and 95 deletions
@ -1,57 +0,0 @@
@@ -1,57 +0,0 @@
|
||||
/* |
||||
* Copyright (c) 2005, Junio C Hamano |
||||
*/ |
||||
#include <signal.h> |
||||
#include "cache.h" |
||||
|
||||
static struct cache_file *cache_file_list; |
||||
|
||||
static void remove_lock_file(void) |
||||
{ |
||||
while (cache_file_list) { |
||||
if (cache_file_list->lockfile[0]) |
||||
unlink(cache_file_list->lockfile); |
||||
cache_file_list = cache_file_list->next; |
||||
} |
||||
} |
||||
|
||||
static void remove_lock_file_on_signal(int signo) |
||||
{ |
||||
remove_lock_file(); |
||||
signal(SIGINT, SIG_DFL); |
||||
raise(signo); |
||||
} |
||||
|
||||
int hold_index_file_for_update(struct cache_file *cf, const char *path) |
||||
{ |
||||
int fd; |
||||
sprintf(cf->lockfile, "%s.lock", path); |
||||
fd = open(cf->lockfile, O_RDWR | O_CREAT | O_EXCL, 0666); |
||||
if (fd >=0 && !cf->next) { |
||||
cf->next = cache_file_list; |
||||
cache_file_list = cf; |
||||
signal(SIGINT, remove_lock_file_on_signal); |
||||
atexit(remove_lock_file); |
||||
} |
||||
return fd; |
||||
} |
||||
|
||||
int commit_index_file(struct cache_file *cf) |
||||
{ |
||||
char indexfile[PATH_MAX]; |
||||
int i; |
||||
strcpy(indexfile, cf->lockfile); |
||||
i = strlen(indexfile) - 5; /* .lock */ |
||||
indexfile[i] = 0; |
||||
i = rename(cf->lockfile, indexfile); |
||||
cf->lockfile[0] = 0; |
||||
return i; |
||||
} |
||||
|
||||
void rollback_index_file(struct cache_file *cf) |
||||
{ |
||||
if (cf->lockfile[0]) |
||||
unlink(cf->lockfile); |
||||
cf->lockfile[0] = 0; |
||||
} |
||||
|
@ -0,0 +1,57 @@
@@ -0,0 +1,57 @@
|
||||
/* |
||||
* Copyright (c) 2005, Junio C Hamano |
||||
*/ |
||||
#include <signal.h> |
||||
#include "cache.h" |
||||
|
||||
static struct lock_file *lock_file_list; |
||||
|
||||
static void remove_lock_file(void) |
||||
{ |
||||
while (lock_file_list) { |
||||
if (lock_file_list->filename[0]) |
||||
unlink(lock_file_list->filename); |
||||
lock_file_list = lock_file_list->next; |
||||
} |
||||
} |
||||
|
||||
static void remove_lock_file_on_signal(int signo) |
||||
{ |
||||
remove_lock_file(); |
||||
signal(SIGINT, SIG_DFL); |
||||
raise(signo); |
||||
} |
||||
|
||||
int hold_lock_file_for_update(struct lock_file *lk, const char *path) |
||||
{ |
||||
int fd; |
||||
sprintf(lk->filename, "%s.lock", path); |
||||
fd = open(lk->filename, O_RDWR | O_CREAT | O_EXCL, 0666); |
||||
if (fd >=0 && !lk->next) { |
||||
lk->next = lock_file_list; |
||||
lock_file_list = lk; |
||||
signal(SIGINT, remove_lock_file_on_signal); |
||||
atexit(remove_lock_file); |
||||
} |
||||
return fd; |
||||
} |
||||
|
||||
int commit_lock_file(struct lock_file *lk) |
||||
{ |
||||
char result_file[PATH_MAX]; |
||||
int i; |
||||
strcpy(result_file, lk->filename); |
||||
i = strlen(result_file) - 5; /* .lock */ |
||||
result_file[i] = 0; |
||||
i = rename(lk->filename, result_file); |
||||
lk->filename[0] = 0; |
||||
return i; |
||||
} |
||||
|
||||
void rollback_lock_file(struct lock_file *lk) |
||||
{ |
||||
if (lk->filename[0]) |
||||
unlink(lk->filename); |
||||
lk->filename[0] = 0; |
||||
} |
||||
|
Loading…
Reference in new issue