示例#1
0
文件: peerman.c 项目: aido/picocoin
bool peerman_write(struct peer_manager *peers, void *peer_file, const struct chain_info *chain)
{
	char *filename = peer_file;
	if (!filename)
		return false;

	char tmpfn[strlen(filename) + 32];
	strcpy(tmpfn, filename);
	strcat(tmpfn, ".XXXXXX");

	int fd = mkstemp(tmpfn);
	if (fd < 0)
		return false;

	if (!ser_peerman(peers, fd, chain))
		goto err_out;

	close(fd);
	fd = -1;

	if (rename(tmpfn, filename)) {
		log_error("peerman: %s rename: %s",
			tmpfn,
			strerror(errno));
		goto err_out;
	}

	return true;

err_out:
	if (fd >= 0)
		close(fd);
	unlink(tmpfn);
	return false;
}
示例#2
0
bool peerman_write(struct peer_manager *peers)
{
	char *filename = setting("peers");
	if (!filename)
		return false;

	char tmpfn[strlen(filename) + 32];
	strcpy(tmpfn, filename);
	strcat(tmpfn, ".XXXXXX");

	int fd = mkstemp(tmpfn);
	if (fd < 0)
		return false;

	if (!ser_peerman(peers, fd))
		goto err_out;

	close(fd);
	fd = -1;

	if (rename(tmpfn, filename)) {
		strcat(tmpfn, " rename");
		perror(tmpfn);
		goto err_out;
	}

	return true;

err_out:
	if (fd >= 0)
		close(fd);
	unlink(tmpfn);
	return false;
}