1
0
Fork 0
forked from len0rd/rockbox

Rockbox as an application: add get_user_file_path().

For RaaA it evaluates user paths at runtime. For everything but codecs/plugins it will give the path under $HOME/.config/rockbox.org if write access is needed or if the file/folder in question exists there (otherwise it gives /usr/local/share/rockbox).
This allows for installing themes under $HOME as well as having config.cfg and other important files there while installing the application (and default themes) under /usr/local.

On the DAPs it's a no-op, returing /.rockbox directly.

Not converted to use get_user_file_path() are plugins themselves, because RaaA doesn't build plugins yet.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27656 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Thomas Martitz 2010-08-01 16:15:27 +00:00
parent 2e7d92fef7
commit 9c0b2479f7
41 changed files with 620 additions and 248 deletions

View file

@ -25,6 +25,7 @@
#include <limits.h>
#include "inttypes.h"
#include "config.h"
#include "rbpaths.h"
#include "action.h"
#include "crc32.h"
#include "sound.h"
@ -110,7 +111,6 @@ long lasttime = 0;
[8-NVRAM_BLOCK_SIZE] data
*/
#define NVRAM_DATA_START 8
#define NVRAM_FILE ROCKBOX_DIR "/nvram.bin"
static char nvram_buffer[NVRAM_BLOCK_SIZE];
static bool read_nvram_data(char* buf, int max_len)
@ -118,7 +118,9 @@ static bool read_nvram_data(char* buf, int max_len)
unsigned crc32 = 0xffffffff;
int var_count = 0, i = 0, buf_pos = 0;
#ifndef HAVE_RTC_RAM
int fd = open(NVRAM_FILE,O_RDONLY);
char path[MAX_PATH];
int fd = open(get_user_file_path(NVRAM_FILE, IS_FILE|NEED_WRITE,
path, sizeof(path)), O_RDONLY);
int bytes;
if (fd < 0)
return false;
@ -172,6 +174,7 @@ static bool write_nvram_data(char* buf, int max_len)
char var_count = 0;
#ifndef HAVE_RTC_RAM
int fd;
char path[MAX_PATH];
#endif
memset(buf,0,max_len);
/* magic, version */
@ -195,7 +198,8 @@ static bool write_nvram_data(char* buf, int max_len)
max_len-NVRAM_DATA_START-1,0xffffffff);
memcpy(&buf[4],&crc32,4);
#ifndef HAVE_RTC_RAM
fd = open(NVRAM_FILE,O_CREAT|O_TRUNC|O_WRONLY, 0666);
fd = open(get_user_file_path(NVRAM_FILE, IS_FILE|NEED_WRITE,
path, sizeof(path)),O_CREAT|O_TRUNC|O_WRONLY, 0666);
if (fd >= 0)
{
int len = write(fd,buf,max_len);
@ -226,8 +230,12 @@ void settings_load(int which)
read_nvram_data(nvram_buffer,NVRAM_BLOCK_SIZE);
if (which&SETTINGS_HD)
{
settings_load_config(CONFIGFILE,false);
settings_load_config(FIXEDSETTINGSFILE,false);
const char *file;
char path[MAX_PATH];
file = get_user_file_path(CONFIGFILE, IS_FILE|NEED_WRITE, path, sizeof(path));
settings_load_config(file, false);
file = get_user_file_path(FIXEDSETTINGSFILE, IS_FILE, path, sizeof(path));
settings_load_config(file, false);
}
}
@ -334,10 +342,12 @@ bool settings_load_config(const char* file, bool apply)
char storage[MAX_PATH];
if (settings[i].filename_setting->prefix)
{
int len = strlen(settings[i].filename_setting->prefix);
if (!strncasecmp(value,
settings[i].filename_setting->prefix,
len))
char prefix_dir[MAX_PATH];
const char *dir = get_user_file_path(
settings[i].filename_setting->prefix,
0, prefix_dir, sizeof(prefix_dir));
int len = strlen(dir);
if (!strncasecmp(value, dir, len))
{
strlcpy(storage, &value[len], MAX_PATH);
}
@ -470,6 +480,10 @@ bool cfg_to_string(int i/*setting_id*/, char* buf, int buf_len)
if (((char*)settings[i].setting)[0]
&& settings[i].filename_setting->prefix)
{
char path[MAX_PATH];
const char *prefix = get_user_file_path(
settings[i].filename_setting->prefix, 0,
path, sizeof(path));
if (((char*)settings[i].setting)[0] == '-')
{
buf[0] = '-';
@ -477,8 +491,7 @@ bool cfg_to_string(int i/*setting_id*/, char* buf, int buf_len)
}
else
{
snprintf(buf,buf_len,"%s%s%s",
settings[i].filename_setting->prefix,
snprintf(buf,buf_len,"%s%s%s", prefix,
(char*)settings[i].setting,
settings[i].filename_setting->suffix);
}
@ -589,8 +602,11 @@ static void flush_global_status_callback(void *data)
static void flush_config_block_callback(void *data)
{
(void)data;
char path[MAX_PATH];
write_nvram_data(nvram_buffer,NVRAM_BLOCK_SIZE);
settings_write_config(CONFIGFILE, SETTINGS_SAVE_CHANGED);
settings_write_config(
get_user_file_path(CONFIGFILE, IS_FILE|NEED_WRITE, path, sizeof(path)),
SETTINGS_SAVE_CHANGED);
}
/*
@ -634,8 +650,8 @@ int settings_save(void)
bool settings_save_config(int options)
{
char filename[MAX_PATH];
char *folder, *namebase;
char filename[MAX_PATH], path[MAX_PATH];
const char *folder, *namebase;
switch (options)
{
case SETTINGS_SAVE_THEME:
@ -663,6 +679,8 @@ bool settings_save_config(int options)
namebase = "config";
break;
}
folder = get_user_file_path(folder, NEED_WRITE, path, sizeof(path));
create_numbered_filename(filename, folder, namebase, ".cfg", 2
IF_CNFN_NUM_(, NULL));
@ -1180,6 +1198,7 @@ bool set_option(const char* string, const void* variable, enum optiontype type,
if (!option_screen(&item, NULL, false, NULL))
{
if (type == BOOL)
*(bool*)variable = (temp == 1);
else
*(int*)variable = temp;