/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

/* Persistence module for emulator */

#include <linux/limits.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>

static void get_storage_path(char *out)
{
	char buf[PATH_MAX];
	int sz;
	char *current;

	sz = readlink("/proc/self/exe", buf, PATH_MAX - 1);
	buf[sz] = '\0';

	/* replace / by underscores in the path to get the shared memory name */
	current = strchr(buf, '/');
	while (current) {
		*current = '_';
		current = strchr(current, '/');
	}

	snprintf(out, PATH_MAX - 1, "/dev/shm/EC_persist_%s", buf);
	out[PATH_MAX - 1] = '\0';
}

FILE *get_persistent_storage(const char *tag, const char *mode)
{
	char buf[PATH_MAX];
	char path[PATH_MAX];

	/*
	 * The persistent storage with tag 'foo' for test 'bar' would
	 * be named 'bar_persist_foo'
	 */
	get_storage_path(buf);
	snprintf(path, PATH_MAX - 1, "%s_%s", buf, tag);
	path[PATH_MAX - 1] = '\0';

	return fopen(path, mode);
}

void release_persistent_storage(FILE *ps)
{
	fclose(ps);
}

void remove_persistent_storage(const char *tag)
{
	char buf[PATH_MAX];
	char path[PATH_MAX];

	get_storage_path(buf);
	snprintf(path, PATH_MAX - 1, "%s_%s", buf, tag);
	path[PATH_MAX - 1] = '\0';

	unlink(path);
}
