blob: dbd1ce812ca6d3127f5a353892b5767167a26ac9 [file] [log] [blame]
/* 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);
}