50 lines
1.0 KiB
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;
|
|
}
|