git/reftable/system.c

50 lines
1.0 KiB
C

#include "system.h"
#include "basics.h"
#include "reftable-error.h"
#include "../tempfile.h"
int tmpfile_from_pattern(struct reftable_tmpfile *out, const char *pattern)
{
struct tempfile *tempfile;
tempfile = mks_tempfile(pattern);
if (!tempfile)
return REFTABLE_IO_ERROR;
out->path = tempfile->filename.buf;
out->fd = tempfile->fd;
out->priv = tempfile;
return 0;
}
int tmpfile_close(struct reftable_tmpfile *t)
{
struct tempfile *tempfile = t->priv;
int ret = close_tempfile_gently(tempfile);
t->fd = -1;
if (ret < 0)
return REFTABLE_IO_ERROR;
return 0;
}
int tmpfile_delete(struct reftable_tmpfile *t)
{
struct tempfile *tempfile = t->priv;
int ret = delete_tempfile(&tempfile);
*t = REFTABLE_TMPFILE_INIT;
if (ret < 0)
return REFTABLE_IO_ERROR;
return 0;
}
int tmpfile_rename(struct reftable_tmpfile *t, const char *path)
{
struct tempfile *tempfile = t->priv;
int ret = rename_tempfile(&tempfile, path);
*t = REFTABLE_TMPFILE_INIT;
if (ret < 0)
return REFTABLE_IO_ERROR;
return 0;
}