mirror of
https://codeberg.org/grunfink/snac2.git
synced 2024-11-25 14:35:04 +00:00
New function index_gc().
This commit is contained in:
parent
4eec215729
commit
307c9420c3
2 changed files with 43 additions and 0 deletions
42
data.c
42
data.c
|
@ -285,6 +285,48 @@ int index_add(const char *fn, const char *id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int index_gc(const char *fn)
|
||||||
|
/* garbage-collects an index, deleting objects that are not here */
|
||||||
|
{
|
||||||
|
FILE *i, *o;
|
||||||
|
int gc = -1;
|
||||||
|
|
||||||
|
pthread_mutex_lock(&data_mutex);
|
||||||
|
|
||||||
|
if ((i = fopen(fn, "r")) != NULL) {
|
||||||
|
xs *nfn = xs_fmt("%s.new", fn);
|
||||||
|
char line[256];
|
||||||
|
|
||||||
|
if ((o = fopen(nfn, "w")) != NULL) {
|
||||||
|
gc = 0;
|
||||||
|
|
||||||
|
while (fgets(line, sizeof(line), i) != NULL) {
|
||||||
|
line[32] = '\0';
|
||||||
|
|
||||||
|
if (object_here_by_md5(line))
|
||||||
|
fprintf(o, "%s\n", line);
|
||||||
|
else
|
||||||
|
gc++;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(o);
|
||||||
|
|
||||||
|
xs *ofn = xs_fmt("%s.bak", fn);
|
||||||
|
|
||||||
|
unlink(ofn);
|
||||||
|
link(fn, ofn);
|
||||||
|
rename(nfn, fn);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
pthread_mutex_unlock(&data_mutex);
|
||||||
|
|
||||||
|
return gc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int index_del_md5(const char *fn, const char *md5)
|
int index_del_md5(const char *fn, const char *md5)
|
||||||
/* deletes an md5 from an index */
|
/* deletes an md5 from an index */
|
||||||
{
|
{
|
||||||
|
|
1
snac.h
1
snac.h
|
@ -60,6 +60,7 @@ double mtime_nl(const char *fn, int *n_link);
|
||||||
#define mtime(fn) mtime_nl(fn, NULL)
|
#define mtime(fn) mtime_nl(fn, NULL)
|
||||||
|
|
||||||
int index_add(const char *fn, const char *md5);
|
int index_add(const char *fn, const char *md5);
|
||||||
|
int index_gc(const char *fn);
|
||||||
int index_del(const char *fn, const char *md5);
|
int index_del(const char *fn, const char *md5);
|
||||||
int index_first(const char *fn, char *buf, int size);
|
int index_first(const char *fn, char *buf, int size);
|
||||||
int index_len(const char *fn);
|
int index_len(const char *fn);
|
||||||
|
|
Loading…
Reference in a new issue