summaryrefslogtreecommitdiffstats
path: root/firmware
diff options
context:
space:
mode:
authorSolomon Peachy <pizza@shaftnet.org>2020-10-11 08:26:53 -0400
committerSolomon Peachy <pizza@shaftnet.org>2020-10-11 17:47:34 -0400
commitdb6f21e2954db63cd04de73ed472c48f63b80a89 (patch)
tree252e2fccaef788141630ceeb67a03b69bd1654d1 /firmware
parenta5add3982bff6907d30942f614d5a471f75c018b (diff)
downloadrockbox-db6f21e2954db63cd04de73ed472c48f63b80a89.tar.gz
rockbox-db6f21e2954db63cd04de73ed472c48f63b80a89.tar.bz2
rockbox-db6f21e2954db63cd04de73ed472c48f63b80a89.zip
hosted: sanitize handling of HOME_DIR
* HOME_DIR is now either "/" or special "<HOME>" * target-specific "home dir path" is defined solely by PIVOT_ROOT * PIVOT_ROOT path is now defined in toplevel config files * Make Samsung YP-R0/R1 and SONY_NWZ use PIVOT_ROOT too * Do not prepend PIVOT_ROOT path if the path already has it! * Do not play these games for __PCTOOL__ builds Change-Id: I3d51ad902a5f9cafe45ba15ba654f30f1ec6113a
Diffstat (limited to 'firmware')
-rw-r--r--firmware/export/config/agptekrocker.h1
-rw-r--r--firmware/export/config/aigoerosq.h1
-rw-r--r--firmware/export/config/fiiom3k.h1
-rw-r--r--firmware/export/config/ibassodx50.h3
-rw-r--r--firmware/export/config/ibassodx90.h3
-rw-r--r--firmware/export/config/samsungypr0.h1
-rw-r--r--firmware/export/config/samsungypr1.h1
-rw-r--r--firmware/export/config/sonynwzlinux.h4
-rw-r--r--firmware/export/config/xduoox20.h1
-rw-r--r--firmware/export/config/xduoox3ii.h1
-rw-r--r--firmware/export/rbpaths.h27
-rw-r--r--firmware/target/hosted/filesystem-app.c35
-rw-r--r--firmware/target/hosted/rolo.c8
13 files changed, 47 insertions, 40 deletions
diff --git a/firmware/export/config/agptekrocker.h b/firmware/export/config/agptekrocker.h
index 230dc6cac4..f0e98d4db2 100644
--- a/firmware/export/config/agptekrocker.h
+++ b/firmware/export/config/agptekrocker.h
@@ -15,6 +15,7 @@
#ifndef SIMULATOR
#define CONFIG_PLATFORM (PLATFORM_HOSTED)
+#define PIVOT_ROOT "/mnt/sd_0"
#endif
#define HIBY_LINUX
diff --git a/firmware/export/config/aigoerosq.h b/firmware/export/config/aigoerosq.h
index 9207b5548f..6129557726 100644
--- a/firmware/export/config/aigoerosq.h
+++ b/firmware/export/config/aigoerosq.h
@@ -15,6 +15,7 @@
#ifndef SIMULATOR
#define CONFIG_PLATFORM (PLATFORM_HOSTED)
+#define PIVOT_ROOT "/mnt/sd_0"
#endif
#define HIBY_LINUX
diff --git a/firmware/export/config/fiiom3k.h b/firmware/export/config/fiiom3k.h
index 88652b633f..933e85dab9 100644
--- a/firmware/export/config/fiiom3k.h
+++ b/firmware/export/config/fiiom3k.h
@@ -15,6 +15,7 @@
#ifndef SIMULATOR
#define CONFIG_PLATFORM (PLATFORM_HOSTED)
+#define PIVOT_ROOT "/mnt"
#endif
#define HAVE_FPU
diff --git a/firmware/export/config/ibassodx50.h b/firmware/export/config/ibassodx50.h
index 4107fd496f..22215ef9e4 100644
--- a/firmware/export/config/ibassodx50.h
+++ b/firmware/export/config/ibassodx50.h
@@ -24,7 +24,10 @@
/* This config file is for Rockbox as an application on Android without JVM. */
/* We don't run on hardware directly */
+#ifndef SIMULATOR
#define CONFIG_PLATFORM PLATFORM_HOSTED
+#define PIVOT_ROOT "/mnt/sdcard"
+#endif
#define HAVE_FPU
/* For Rolo and boot loader */
diff --git a/firmware/export/config/ibassodx90.h b/firmware/export/config/ibassodx90.h
index ae5a446aa3..b0cff1a8d0 100644
--- a/firmware/export/config/ibassodx90.h
+++ b/firmware/export/config/ibassodx90.h
@@ -24,7 +24,10 @@
/* This config file is for Rockbox as an application on Android without JVM. */
/* We don't run on hardware directly */
+#ifndef SIMULATOR
#define CONFIG_PLATFORM PLATFORM_HOSTED
+#define PIVOT_ROOT "/mnt/sdcard"
+#endif
#define HAVE_FPU
/* For Rolo and boot loader */
diff --git a/firmware/export/config/samsungypr0.h b/firmware/export/config/samsungypr0.h
index 414ba39517..655ed811b7 100644
--- a/firmware/export/config/samsungypr0.h
+++ b/firmware/export/config/samsungypr0.h
@@ -7,6 +7,7 @@
/* YP-R0 need it too of course */
#ifndef SIMULATOR
#define CONFIG_PLATFORM (PLATFORM_HOSTED)
+#define PIVOT_ROOT "/mnt/media0"
#endif
/* For Rolo and boot loader */
diff --git a/firmware/export/config/samsungypr1.h b/firmware/export/config/samsungypr1.h
index 4d5c4a88f9..6f9904614c 100644
--- a/firmware/export/config/samsungypr1.h
+++ b/firmware/export/config/samsungypr1.h
@@ -7,6 +7,7 @@
/* YP-R1 need it too of course */
#ifndef SIMULATOR
#define CONFIG_PLATFORM (PLATFORM_HOSTED)
+#define PIVOT_ROOT "/mnt/media0"
#endif
/* For Rolo and boot loader */
diff --git a/firmware/export/config/sonynwzlinux.h b/firmware/export/config/sonynwzlinux.h
index 66f18724db..074ad1c417 100644
--- a/firmware/export/config/sonynwzlinux.h
+++ b/firmware/export/config/sonynwzlinux.h
@@ -4,11 +4,9 @@
#ifndef SIMULATOR
#define CONFIG_PLATFORM (PLATFORM_HOSTED)
+#define PIVOT_ROOT "/contents"
#endif
-
-
-
/* define this if you have a colour LCD */
#define HAVE_LCD_COLOR
diff --git a/firmware/export/config/xduoox20.h b/firmware/export/config/xduoox20.h
index 70e6131cb7..e12346e1bc 100644
--- a/firmware/export/config/xduoox20.h
+++ b/firmware/export/config/xduoox20.h
@@ -15,6 +15,7 @@
#ifndef SIMULATOR
#define CONFIG_PLATFORM (PLATFORM_HOSTED)
+#define PIVOT_ROOT "/mnt/sd_0"
#endif
#define HIBY_LINUX
diff --git a/firmware/export/config/xduoox3ii.h b/firmware/export/config/xduoox3ii.h
index d19165114a..0b886e3af9 100644
--- a/firmware/export/config/xduoox3ii.h
+++ b/firmware/export/config/xduoox3ii.h
@@ -15,6 +15,7 @@
#ifndef SIMULATOR
#define CONFIG_PLATFORM (PLATFORM_HOSTED)
+#define PIVOT_ROOT "/mnt/sd_0"
#endif
#define HIBY_LINUX
diff --git a/firmware/export/rbpaths.h b/firmware/export/rbpaths.h
index 215b4c0c4b..da5a2fb71c 100644
--- a/firmware/export/rbpaths.h
+++ b/firmware/export/rbpaths.h
@@ -40,24 +40,12 @@
#define ROCKBOX_DIR_LEN (sizeof(ROCKBOX_DIR)-1)
#endif /* def __PCTOOL__ */
+/* NOTE: target-specific hosted HOME_DIR resides in filesystem-app.c */
#if !defined(APPLICATION) || defined(SAMSUNG_YPR0) || defined(SAMSUNG_YPR1) || \
defined(DX50) || defined(DX90) || defined(SONY_NWZ_LINUX) || \
defined(HIBY_LINUX) || defined(FIIO_M3K)
-#if defined(SAMSUNG_YPR0) || defined(SAMSUNG_YPR1)
-#define HOME_DIR "/mnt/media0"
-#elif defined(SONY_NWZ_LINUX)
-#define HOME_DIR "/contents"
-#elif defined(DX50) || defined(DX90)
-/* Where to put save files like recordings, playlists, screen dumps ...*/
-#define HOME_DIR "/mnt/sdcard"
-#elif defined(HIBY_LINUX)
-#define HOME_DIR "/mnt/sd_0"
-#elif defined(FIIO_M3K)
-#define HOME_DIR "/mnt"
-#else
#define HOME_DIR "/"
-#endif
/* make sure both are the same for native builds */
#undef ROCKBOX_LIBRARY_PATH
@@ -69,6 +57,7 @@
#else /* APPLICATION */
#define HOME_DIR "<HOME>" /* replaced at runtime */
+#define HAVE_SPECIAL_DIRS
#define PLUGIN_DIR ROCKBOX_LIBRARY_PATH "/rockbox/rocks"
#if (CONFIG_PLATFORM & PLATFORM_ANDROID)
@@ -79,10 +68,8 @@
#endif /* !APPLICATION || SAMSUNG_YPR0 */
-#define HOME_DIR_LEN (sizeof(HOME_DIR)-1)
-
-#define REC_BASE_DIR "/Recordings"
-#define PLAYLIST_CATALOG_DEFAULT_DIR "/Playlists"
+#define REC_BASE_DIR HOME_DIR "/Recordings"
+#define PLAYLIST_CATALOG_DEFAULT_DIR HOME_DIR "/Playlists"
#define LANG_DIR ROCKBOX_DIR "/langs"
@@ -91,8 +78,10 @@
#define PLUGIN_DEMOS_DIR PLUGIN_DIR "/demos"
#define VIEWERS_DIR PLUGIN_DIR "/viewers"
-#if defined(APPLICATION) && !(defined(SAMSUNG_YPR0) || defined(SAMSUNG_YPR1) || \
- defined(DX50) || defined(DX90) || defined(SONY_NWZ_LINUX) || defined(HIBY_LINUX))
+#if defined(APPLICATION) && \
+ !(defined(SAMSUNG_YPR0) || defined(SAMSUNG_YPR1) || \
+ defined(DX50) || defined(DX90) || defined(SONY_NWZ_LINUX) || defined(HIBY_LINUX) || defined(FIIO_M3K))
+
#define PLUGIN_DATA_DIR ROCKBOX_DIR "/rocks.data"
#define PLUGIN_GAMES_DATA_DIR PLUGIN_DATA_DIR
#define PLUGIN_APPS_DATA_DIR PLUGIN_DATA_DIR
diff --git a/firmware/target/hosted/filesystem-app.c b/firmware/target/hosted/filesystem-app.c
index 24c5a7e062..1d64a58677 100644
--- a/firmware/target/hosted/filesystem-app.c
+++ b/firmware/target/hosted/filesystem-app.c
@@ -36,15 +36,13 @@
#include "rbpaths.h"
#include "logf.h"
-#if !(defined(BOOTLOADER) || defined(CHECKWPS) || defined(SIMULATOR))
-#if defined(HIBY_LINUX)
-#define PIVOT_ROOT "/mnt/sd_0"
-#elif defined(FIIO_M3K)
-#define PIVOT_ROOT "/mnt" // XXX check this!
-#else
+/* PIVOT_ROOT adds a fixed prefix to all paths */
+#if defined(BOOTLOADER) || defined(CHECKWPS) || defined(SIMULATOR) || defined(__PCTOOL__)
+/* We don't want to use pivot root on these! */
+#undef PIVOT_ROOT
#endif
-#endif // !(BOOTLOADER|WPS|SIM)
+#if defined(HAVE_MULTIDRIVE) || defined(HAVE_SPECIAL_DIRS)
#if (CONFIG_PLATFORM & PLATFORM_ANDROID)
static const char rbhome[] = "/sdcard";
#elif (CONFIG_PLATFORM & (PLATFORM_SDL|PLATFORM_MAEMO|PLATFORM_PANDORA)) \
@@ -54,15 +52,11 @@ static const char *rbhome;
/* YPR0, YPR1, NWZ, etc */
static const char rbhome[] = HOME_DIR;
#endif
+#endif
-#if !(defined(SAMSUNG_YPR0) || defined(SAMSUNG_YPR1) || defined(DX50) || \
- defined(SONY_NWZ_LINUX) || defined(DX90) || defined(HIBY_LINUX) || \
- defined(FIIO_M3K)) && \
- !defined(__PCTOOL__)
-/* Special dirs are user-accessible (and user-writable) dirs which take priority
- * over the ones where Rockbox is installed to. Classic example would be
- * $HOME/.config/rockbox.org vs /usr/share/rockbox */
-#define HAVE_SPECIAL_DIRS
+#if !defined(__PCTOOL__)
+/* We don't want this for tools */
+#undef HAVE_SPECIAL_DIRS
#endif
#ifdef HAVE_MULTIDRIVE
@@ -202,6 +196,8 @@ const char * handle_special_dirs(const char *dir, unsigned flags,
{
(void) flags; (void) buf; (void) bufsize;
#ifdef HAVE_SPECIAL_DIRS
+#define HOME_DIR_LEN (sizeof(HOME_DIR)-1)
+ /* This replaces HOME_DIR (ie '<HOME'>') with runtime rbhome */
if (!strncmp(HOME_DIR, dir, HOME_DIR_LEN))
{
const char *p = dir + HOME_DIR_LEN;
@@ -216,8 +212,13 @@ const char * handle_special_dirs(const char *dir, unsigned flags,
dir = handle_special_links(dir, flags, buf, bufsize);
#endif
#ifdef PIVOT_ROOT
- snprintf(buf, bufsize, "%s/%s", PIVOT_ROOT, dir);
- dir = buf;
+#define PIVOT_ROOT_LEN (sizeof(PIVOT_ROOT)-1)
+ /* Prepend root prefix to find actual path */
+ if (strncmp(PIVOT_ROOT, dir, PIVOT_ROOT_LEN))
+ {
+ snprintf(buf, bufsize, "%s/%s", PIVOT_ROOT, dir);
+ dir = buf;
+ }
#endif
return dir;
}
diff --git a/firmware/target/hosted/rolo.c b/firmware/target/hosted/rolo.c
index 432d69c86e..2aa3071c9a 100644
--- a/firmware/target/hosted/rolo.c
+++ b/firmware/target/hosted/rolo.c
@@ -91,8 +91,14 @@ int rolo_load(const char* filename)
lcd_remote_update();
#endif
+#ifdef PIVOT_ROOT
+#define EXECDIR PIVOT_ROOT
+#else
+#define EXECDIR ROOT_DIR
+#endif
+
char buf[256];
- snprintf(buf, sizeof(buf), "%s/%s", HOME_DIR, filename);
+ snprintf(buf, sizeof(buf), "%s/%s", EXECDIR, filename);
execl(buf, BOOTFILE, NULL);
rolo_error("Failed to launch!", strerror(errno));